Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 3465

 
СанСаныч Фоменко #:

Признаки коррелированы?

Нет, естественно 
 

Всех приветствую!


У меня такая мысль. Допустим, имеется торговая система, которая выставляет ЛО на покупку и продажу в некотором расстоянии от мидпрайса, образуя спред. Эта же система при наборе позиции сдвигает корридор так, чтобы не застревать в позиции, таким образом управляя рисокм. Торговая система основана на идеях Avellaneda and Stoikov и их Optimal Market Maker. То есть, для определения расстояния используется логика этой системы: оценивается показатель trading intensity и на основании его и некоторых изначальных параметров (gamma, delta), определяется насколько широко мы котируем и насколько сильно боимся застрять в позиции. 

Проблема в том, что в mean reversing режиме система работает хорошо, а при сильных трендах она начинает лузать: набирает позицию не в нужную сторону изменения мидпрайса, за счет чего происходит просадка. Ну, то есть проблема классическая для подобного рода торговой системы. 

Почитав про meta labeling и схожие фишки, а так же статьи  @Maxim Dmitrievsky мне пришла в голову такая мысль: а что, если подбор параметров системы задавать не единожды путем оптимизации (используя генетические алгоритмы либо поиск по сетке), а менять их подстраивясь под рынок? То есть, для определенных условий рынка, при которых нет трендов, можно котировать плотнее к мидпрайса. Для других лучше вставать пошире. По идее, это должна модель сама по себе уметь делать, но она следит только за волатильностью и интенсивностью торговли (насколько глубоко от мидпрайса в книге происходят маркет ордеры, типа как глубоко книга проедается). Она не видит волатильность в более коротком окне, под волатильность подстраивается линейно, не видит других вещей происходящих на рынке. Идея в том, что обогатить модель моделью машинного обучения, которая смотрит немного шире и тюнит параметры изначальной модели, либо вообще стопает торговлю.

Я решил поступить следующим образом: Имеется бектестер, который очень близко к реальности близко протестировать торговую систему на куске данных. Я решил прогнать через бектестер 50-100 вариантов более-менее неплохих комбинаций параметров, собрать по ходу фичи и натренировать модель, которая, глядя на фичи и комбинации параметров, могла бы предсказывать, прибыльным будет отрезок времени на данных параметрах или нет.  Свои коеффициенты торговая система обновляет примерно раз в минуту. За эту минуту система успевает выставить до 600 ордеров по обеим сторонам и либо что-то заработать, либо что-то проиграть. Так вот за эту минуту я собираю фичи: коеффициенты основной логики, rsi, нормированный к мидпрайса vwap, объем и тому подобное, а так же заработанное бабло в долларах за эту минуту. Далее результаты прогона бектестера собираются в один большой датафрейм, в качестве зависимой переменной выбираем заработанный за минуту профит, данные сдвигаем на одну позицию, чтобы иметь возможность предсказывать исход торговли и тренируем модель RandomForestClassifier. НА test/train 80/20 accuracy score удается достичь в 95-97%. 

Модель используется следующим образом - в работающую торговую систему (лайв или в бектестере) подставляется модель и мы накапливаем фичи, а так же имеем массив с возможными вариантами комбинаций параметров для торговой системы. Чтобы решить, какие параметры использовать следующую минуту, мы прогоняем через модель текущие фичи описывающие рынок, а так же комбинации параметров и смотрим, на какой комбинации при текущих рыночных фичах получаем наибольшую вероятность получения профита с положительным знаком (всего два class labes - 0,1). Если такой комбинации не найдено, то просто не торгуем следующую минуту. Если нашли, то торгуем на оптимальных с точки зрения модели параметрах. 


In Sample данная идея сильно улучшает показатели торговли. Резко возрастает Шарп, падает просадки. OOS немного всё разваливается. Возможно, дело в том, что мне нужно накопить больше данных для тренировки модели, но так как это по сути HFT и данные начинают весить гигабайты уже на десятке дней, это становится немного проблематично.

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


У меня просьба покритиковать затею, хоть закидать помидорами. Если есть что подсказать конструктивное - вообще здорово. Может, кто-то что-то уже делал подобное? В правильное направление смотрю вообще?

[Удален]  
Arty G #:

Всех приветствую!

У меня просьба покритиковать затею, хоть закидать помидорами. Если есть что подсказать конструктивное - вообще здорово. Может, кто-то что-то уже делал подобное? В правильное направление смотрю вообще?

Насколько понял, нужно найти такие режимы рынка, в которых эта ТС работает хорошо. Например, режимы можно определять по волатильности.

В последней статье предложил кластеризацию по волатильности и потом выбор лучших кластеров для торговли. Если не читали, может будет полезной.

 
Arty G #:

Проблема в том, что в mean reversing режиме система работает хорошо, а при сильных трендах она начинает лузать: набирает позицию не в нужную сторону изменения мидпрайса, за счет чего происходит просадка. Ну, то есть проблема классическая для подобного рода торговой системы. 

Здравствуйте. Почему не пробовать прогнозировать ожидание тренда? Или просто детектировать его, раз столь активная торговля? Или трендом считается сильное движение внутри минутного бара?

Arty G #:
Я решил прогнать через бектестер 50-100 вариантов более-менее неплохих комбинаций параметров, собрать по ходу фичи и натренировать модель, которая, глядя на фичи и комбинации параметров, могла бы предсказывать, прибыльным будет отрезок времени на данных параметрах или нет.

Не совсем понятно, какими предикторами вы описываете эти наборы параметров? Или у Вас мультиклассификатор?

Arty G #:
но так как это по сути HFT и данные начинают весить гигабайты уже на десятке дней, это становится немного проблематично.

Можете использовать квантование перед сохранением данных, что позволит перейти на тип данных uchar .

Попробуйте CatBoost - умеет работать с большими объёмами данных.

 
mytarmailS #:
Запустил поиск паттернов на бай, оставил комп на ночь, с утра будет резултат и сделаю бектест еще покупок

при переделке скрипта с селл на бай допустил опечатку...

всю ночь комп считал рандом! (((((((((((

мля..

 
Ivan Butko #:

Вот есть правило "если, то". 

Если цена ниже и если там что-то ещё - отрисовка линии до нового экстремума. 


Как это можно трактовать "по-разному"?

так и торговать на словах просто - "покупай дёшево, продавай дорого" :-)

что такое экстремум ? почему вот эта пипка считается экстремумом, а вот соседняя уже нет..а какая-то за ними вообще встречный

число способов определять абстрактный экстремум, ограничивается лишь фантазией. Стандарта зигзага, общей практики и эталонной реализации нет (и быть не может). В кодебейз тьма вариантов, с разнообразными параметрами (и конечно ошибками)

размечать данные зигзагом довольно опасно - вполне может выйти что у каждого чуть но отличается, в разных прогонах по разному, может зависеть от момента старта и шумов, и в Python и MQL тоже не идентично

 
Aleksey Vyazmikin #:

Здравствуйте. Почему не пробовать прогнозировать ожидание тренда? 

Мне кажется прогнозировать будущее - это полумера. 

Нужно учиться вовремя выходить из позиции. 

И плата за ошибку - короткий убыток. 

То есть, обучаем входить и обучаем выходить. 

Просто так прогноз тренда - это сесть в одну сторону и не дождаться его отработки. 


 
Maxim Kuznetsov #:


что такое экстремум ? 

Ты прикидываешься или что?


Экстре́мум (лат. extremum — крайнее) в математике — максимальное или минимальное значение функции на заданном множестве. Точка, в которой достигается экстремум, называется точкой экстремума


Maxim Kuznetsov #:

 почему вот эта пипка считается экстремумом, а вот соседняя уже нет..а какая-то за ними вообще встречный

А почему сегодня вторник, а завтра уже нет?

 
Ivan Butko #:

Мне кажется прогнозировать будущее - это полумера. 

надо прогнозировать

Ivan Butko #:

Нужно учиться вовремя выходить из позиции. 
И плата за ошибку - короткий убыток. 

это тоже прогноз

 
Maxim Dmitrievsky #:

Насколько понял, нужно найти такие режимы рынка, в которых эта ТС работает хорошо. Например, режимы можно определять по волатильности.

В последней статье предложил кластеризацию по волатильности и потом выбор лучших кластеров для торговли. Если не читали, может будет полезной.


Пробегался по этой статье. Почитаю еще раз, спасибо!


Задача стоит не совсем в том, чтобы найти режимы рынка, при которых стратегия работает хорошо, а определить для режима набор параметров для стратегии, которые будут работать хорошо.

Я же что делаю - прогоняю сотню бектестов на одном и том же отрезке времени с разными настройками. Потом сгоняю это всё в один датафрейм и тренирую модель. Для модели комбинация настроек торговой стратегии - это такая же фича, как и остальные рыночные фичи типа волатильности или, скажем, перевеса в trades balance. Таким образом модель учится понимать какие параметры для стратегии при каких рыночных фичах могут быть прибыльными. То есть, X для модели выглядит примерно так: [volatility_short, volatility_long, rsi, trade_imbalamce, strategy_param1, strategy_param2]. А y - это знак того, что заработали за минуту. Так как ордера отсылаются до 10ти штук в секунду, за минуту можно наторговать достаточно, чтобы понять как отрабатывают параметры. В датафрейме, в который мы сгрузили всё это дело, дублируются рыночые фичи столько раз, сколько есть уникальных комбинаций параметров стратегии. То есть, в датафрейме не просто результаты торговли за весь бектест, а поминутные данные:

X:[volatility_short, volatility_long, rsi, trade_imbalamce, strategy_param1, strategy_param2], y:[step_profit]


Получили модель. Теперь, запустив бектестер или живую торговлю, мы можем каждую минуту циклом проходиться по модели, передавая ей текущий набор фич и доступные комбинации параметров для торговой стратегии, пока не найдем такую комбинацию параметров, при которой модель видит высокую вероятность прибыльной торговли.

То есть, гипотеза заключается в том, что для разных режимов рынка есть разный набор параметров, при которых торговая система будет прибыльна и еще в том, что можно научить модель МЛ находить для разных режимов подходящий набор параметров.


Aleksey Vyazmikin #:

Здравствуйте. Почему не пробовать прогнозировать ожидание тренда? Или просто детектировать его, раз столь активная торговля? Или трендом считается сильное движение внутри минутного бара?

Не совсем понятно, какими предикторами вы описываете эти наборы параметров? Или у Вас мультиклассификатор?

Можете использовать квантование перед сохранением данных, что позволит перейти на тип данных uchar .

Попробуйте CatBoost - умеет работать с большими объёмами данных.

В целом идея не только от тренда убежать, а подобрать параметры для текущего режима рынка, имеющие высокую вероятность прибыльности на обученных данных. Как описал выше, при обучении модели, комбинации параметров так же являются фичами при тренировке модели. Перед новым рандуом торговли мы спрашиваем у модели - рыночные фичи вот такие, а комбинаций параметров у нас, к примеру, 100. Вот, уважаемая модель, каждый из наборов параметров торговой стратегии по отдельности - у какого из них высокие шансы быть прибыльным при текущих рыночных фичах?


Почитаю Вашу статью про квантование. Я использовал децили, но при переходе на реальные величины точность предсказаний резко возросла. Я так понял, что для деревьев нормализация данных не так важна, а вот гранулярность данных сильно терялась при использовании децилий.


CatBoost попробую, спасибо. Просто у меня бектестер и код для живой торговли написаны на Numba в Питоне и пользоваться обученными моделями в sklearn там не получается. Для этого я нашел способ экспорта модели случайного леса в набор листов и диктов, что позволило использовать натренированную модель под Нумбой. Изучу, возможно ли такое или подобное с CatBoost.

По поводу размера данных - я имел в виду, что данные для бектеста слишком много весят и прогнать бектест на сотне другой параметров на годе HFT данных (среди которых все апдейты книги и трейды) занимает много места и времени.