Блог им. alex7088

Исследование машинного обучения для среднечастотной торговли РИ: 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), то мы таких доходов не увидим.


★6
11 комментариев
мы не пытаемся что-то предсказывать, а четко определяем вероятности
мы не пытаемся есть, а четко рассчитываем траекторию пищи во рту…
смотри в чем прикол… реальность отличается  от тестов… чтоб лимитка исполниалась в реальности надо чтоб цена перешла за лимитку а не уперлась в цену как в тестах…
вообщем надо смотреть не эквита, а среднюю сделку 

avatar
Это почти бессмысленно тестировать без знания своего реального места в очереди. Фантастические эквити при условии касания ценой сделки цены лимитки и полный слив при условии пробоя на 1шц для исполнения. Реальность где-то посередине.

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

Основная работа будет не в том, чтобы машобучением заниматься, а в том, чтобы стоять первым в очереди, а это ой как нелегко…
avatar

Да, я понял про пересечение уже раньше. Поэтому в эмуляторе можно выставить вероятность исполнения при касании. Большинство стратегий становятся убыточными при вероятности менее 0.3
Но если посмотреть конкретно эту работу, то настройками можно добиться ppd более 20 рублей на сделку, что позволит входить выходить с потерей 10 рублей. Например в конце model_train

Само ML требует кучу времени и настроек, одному все это очень тяжело.

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

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

Но подход интересный, спасибо.
avatar
_sg_, попробовал: работает хорошо при сжатии тиков с tt=4 рубля. 
средняя на сделку = 5.4 по первому алгоритму и загрузке 100 лотов
средняя на сделку = 7.7 по второму алгоритму и загрузке 20 лотов
при сжатии tt=3 значительно хуже



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

теги блога semen74

....все тэги



UPDONW
Новый дизайн