semen74
semen74 личный блог
04 марта 2019, 14:07

Исследование машинного обучения для среднечастотной торговли РИ: 7% за 4 дня бэктест

Основная предпосылка для исследования озвучена ural_pro в статье http://www.quantalgos.ru/?p=9516
Дневная доходность здесь — около 50%! Причем здесь количество прибыльных сделок — 53%, убыточных (вместе с нулевыми) — 47%, соотношение средней прибыли к среднему убытку — 1.05. То есть, при таком вроде бы незначительном  преимуществе в расчете вероятностей  результат оказывается очень значительным — эффект большого количества сделок, то есть достаточной статистической выборке даже внутри одного дня.
В данном случае мы не пытаемся что-то предсказывать, а четко определяем вероятности и планируем свои действия в соответствии с их величиной. Проблема здесь в том, что вычислить эти величины довольно сложно, в связи с тем, что присутствует влияние множества факторов, которые должны быть учтены в определении вероятностей

Суть проблемы: ищем алгоритм, с небольшим профит фактором и большим количеством сделок. После написания и тестирования разнообразных подходов, решил вернуться к истокам и обучить модель ML. Фичи взял из старых работ плюс skew из одной из статей Виталия.

Возьмем Ри. То есть на 1000 сделок: 530*105-430*100 = 8650, если взять тейк и стоп = 100, то получается 548 прибыльных на 452 убыточный. PF = 1.21


Исходные данные, это тики, сжатые до движения 1 пункта цены. Мы выбрасываем промежуточные тики, сохраняя информацию о том сколько покупок и продаж было между двумя точками. График разметим 3-мя категориями:  1 в случае если мы достигли +profit_loss за 200 следующих тиков цены, либо -1 если мы достигли -profit_loss рублей, и 0 если мы ничего не достигли:
Исследование машинного обучения для среднечастотной торговли РИ: 7% за 4 дня бэктест
Для обучения использую модель LightGBM, текущий фаворит kaggle
Подробное описание фич feature_creation_1
результаты обучения model_train

Алгоритм бектеста: если ожидаемая вероятность больше tolerance то покупаем один лот, если меньше -tolerance — продаем
ограничение 100 лотов
Вкратце 4 дня последние out_of_sample:
Параметры немного другие, чем для обучения
tolerance=0.3,take_profit=50,stop_loss_time=100
Исследование машинного обучения для среднечастотной торговли РИ: 7% за 4 дня бэктест
Общая прибыль (без учета комиссии) 100 тыс рублей
Максимальная загрузка 100 лотов.
Средняя прибыль PPD на сделку 8.8 рублей
PF = 1.68
Если перебирать параметры, то можно получить бОльшую ppd, при худшем графике эквити.
Основная проблема на Ри это исполнение по тику — если выставить эмуляторе исполнение exe.on_price_prob =0.1 (10% а в реальности около 0), то мы таких доходов не увидим.


11 Комментариев
  • старый трейдер
    04 марта 2019, 15:56
    мы не пытаемся что-то предсказывать, а четко определяем вероятности
    мы не пытаемся есть, а четко рассчитываем траекторию пищи во рту…
  • ves2010
    05 марта 2019, 11:50
    смотри в чем прикол… реальность отличается  от тестов… чтоб лимитка исполниалась в реальности надо чтоб цена перешла за лимитку а не уперлась в цену как в тестах…
    вообщем надо смотреть не эквита, а среднюю сделку 

  • Sergey Pavlov
    05 марта 2019, 12:11
    Это почти бессмысленно тестировать без знания своего реального места в очереди. Фантастические эквити при условии касания ценой сделки цены лимитки и полный слив при условии пробоя на 1шц для исполнения. Реальность где-то посередине.

    Ну и тут можно без машобуча. Можно топорно. Если был даунтик, то покупаем. Если аптик, то продаем. Будут такие же эквити по всем дням за 10 лет РИ при условии, что торгуемый фьючерс ближайший, т.е. самый ликвидный.

    Основная работа будет не в том, чтобы машобучением заниматься, а в том, чтобы стоять первым в очереди, а это ой как нелегко…
    • _sg_
      06 марта 2019, 09:23
      semen74, спасибо, хорошее исследование
      Но средняя сделка меньше величины спреда 10 пипсов = 13.16.
      Я считаю необходимо иметь на тестах среднюю сделку  > 1*Spread,
      а лучше > 2* Spread. И при этом необходимо иметь execution близкий к идеальному.
      В этом случае что-то можно в реале пробовать. 
      А при условии плохого для системы execution это монотонный слив.
      • _sg_
        06 марта 2019, 09:33
        _sg_,
        Кстати, попробуйте метод на Si или SR — там сейчас исполнение значительно лучше, чем на RI.
        • _sg_
          06 марта 2019, 09:53
          _sg_, сейчас еще раз посмотрел
          Общая прибыль (без учета комиссии) 100 тыс рублей

          «без учета комиссии» — это ломает многие системы на корню.
          Также необходимо учитывать тенденцию Moex периодически увеличивать комиссию. А Execution со временем будет только ухудшаться.
          Поэтому вряд ли это будет работать.

          Но подход интересный, спасибо.
          • _sg_
            11 марта 2019, 11:26
            semen74, главное в нашем деле (активная торговля) понимать следующее:
            Цены не непрерывны, они имеют спрэд «шаг цены», что определяет спрэд. И если тестер не учитывает проскальзывание в худшую для позиции сторону даже в 1*Spreаd, то это, например, на 10-ти тысячах сделок на RI в квартал уже выливается в ошибку в
            (Spread=13.227 + Бирж.сбор = 3.43 (скальп)) * 10 000 = 166 тыс.рублей на Oдин контракт. И стратегии это то надо отбить. 
              • _sg_
                11 марта 2019, 19:24
                semen74, 
                но Вы молодец. В правильном направлении двигаетесь.
                Желаю успехов. 

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн