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

 
mytarmailS #:

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

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

Да

В этом и суть: прогнозируем тренд - входим. Цена начинает кривляться, прогнозируем выход (HOLD) - выходим, хрен с этим трендом, поищем другой. 

Трейдеры так и поступают: прогнозирует тренд/импульс. Заходит. Цена начинает кривляться как-то, да так, что трейдеру не нравится свой вход. Он прогнозирует 50 на 50 или "не пойму, что происходит". И такой "ну нафик, лучше я выйду". Плата - небольшой минус или небольшой плюс. 

Он не прогнозирует "обратный сигнал". Ему именно не нравится реализация тренда/импульса. 


Вот так и нужно: прогнозируем вход, прогнозируем продолжение тренда, прогнозируем выход/либо обратный вход. 

 
Arty G #:

Я же что делаю - прогоняю сотню бектестов на одном и том же отрезке времени с разными настройками. Потом сгоняю это всё в один датафрейм и тренирую модель. Для модели комбинация настроек торговой стратегии - это такая же фича

Ты делаешь это немного кустарно..

Ты проганяешь через модель множество настроек ТС (много датасетов) и модель дает вероятность лучшых настроек ТС верно?

Те на каждом новом баре ты создаешь огромное количество датасетов.


Думаю лучше взять алгоритм регресии с многими выходами, где выходы будут готовые параметры для ТС.


У тебя схма такая : много датасетов + модель с одним выходом

А лучше : один датасет + модель с многими выходами


пример

https://stackoverflow.com/questions/57704609/multi-target-regression-using-scikit-learn

 
Ivan Butko #:

Да

В этом и суть: прогнозируем тренд - входим. Цена начинает кривляться, прогнозируем выход (HOLD) - выходим, хрен с этим трендом, поищем другой. 

Трейдеры так и поступают: прогнозирует тренд/импульс. Заходит. Цена начинает кривляться как-то, да так, что трейдеру не нравится свой вход. Он прогнозирует 50 на 50 или "не пойму, что происходит". И такой "ну нафик, лучше я выйду". Плата - небольшой минус или небольшой плюс. 

Он не прогнозирует "обратный сигнал". Ему именно не нравится реализация тренда/импульса. 


Вот так и нужно: прогнозируем вход, прогнозируем продолжение тренда, прогнозируем выход/либо обратный вход. 

да, в идеале все так

 
mytarmailS #:

Ты делаешь это немного кустарно..

Ты проганяешь через модель множество настроек ТС (много датасетов) и модель дает вероятность лучшых настроек ТС верно?

Те на каждом новом баре ты создаешь огромное количество датасетов.


Думаю лучше взять алгоритм регресии с многими выходами, где выходы будут готовые параметры для ТС.


У тебя схма такая : много датасетов + модель с одним выходом

А лучше : один датасет + модель с многими выходами


пример

https://stackoverflow.com/questions/57704609/multi-target-regression-using-scikit-learn


Ну чуть избыточно как-будто получается, да. Каждый новый бар порождает кол-во новых строк равных тестируемым параметрам для стратегии. Факторы - рыночные фичи + параметры ТС, выход - бинарный выход где бар будет либо прибыльным, либо убыточным.

Модель регресси, которая бы на выходе выдавала параметры для стратегии должна быть как-то обучена выдавать такие значения параметров, которые дадут положительный профит. То есть, профит должен быть использован как предиктор. Получается, тренируем multi-out модель, для которой X будет содержать рыночные фичи и либо абсолютный профит от торговлу внутри минутного бара, либо просто знак профита, а y - это параметры стратегии. Затем, при торговле на вход ей подаем фичи и желаемый профит или знак профита, чтобы она регресснула нам параметры для такой комбинации фич и профита?

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


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


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

Я же что делаю - прогоняю сотню бектестов на одном и том же отрезке времени с разными настройками. Потом сгоняю это всё в один датафрейм и тренирую модель. Для модели комбинация настроек торговой стратегии - это такая же фича, как и остальные рыночные фичи типа волатильности или, скажем, перевеса в 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]


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

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

Ну получается, что сначала нужно определить режимы, а потом сделать все то же самое что вы делаете для каждого из них, исключая данные из других режимов :)

 
Arty G #:


Ну чуть избыточно как-будто получается, да. Каждый новый бар порождает кол-во новых строк равных тестируемым параметрам для стратегии. Факторы - рыночные фичи + параметры ТС, выход - бинарный выход где бар будет либо прибыльным, либо убыточным.

Модель регресси, которая бы на выходе выдавала параметры для стратегии должна быть как-то обучена выдавать такие значения параметров, которые дадут положительный профит. То есть, профит должен быть использован как предиктор. Получается, тренируем multi-out модель, для которой X будет содержать рыночные фичи и либо абсолютный профит от торговлу внутри минутного бара, либо просто знак профита, а y - это параметры стратегии. Затем, при торговле на вход ей подаем фичи и желаемый профит или знак профита, чтобы она регресснула нам параметры для такой комбинации фич и профита?

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

Ты подаешь ценовой ряд и его характеристики в модель, а модель тебе отвечает :

Для самой прибыльной торговли тебе надо настроить такие периоды

стохастик n = 12 , рси  n = 33, машка  n = 55 ..... .... .... 


----------------------------------------------------------------------

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

----------------------------------------------------------------------

По сути это называеться адаптивная фильтрация, идеи ЦОС сто летней давности

 
Maxim Dmitrievsky #:
Ну получается, что сначала нужно определить режимы, а потом сделать все то же самое что вы делаете для каждого из них, исключая данные из других режимов :)

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

Вы советуете определять режимы более конкретно (например, методами кластеризации из Вашей статьи), а потом научить модель под каждый режим выбирать оптимальные параметры? Правильно ли я понимаю, что кластеризация режимов позволит с большей вероятностью определять прибыльный набор параметров, чем текущий мой сетап?

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

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

Вы советуете определять режимы более конкретно (например, методами кластеризации из Вашей статьи), а потом научить модель под каждый режим выбирать оптимальные параметры? Правильно ли я понимаю, что кластеризация режимов позволит с большей вероятностью определять прибыльный набор параметров, чем текущий мой сетап?

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

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

 
mytarmailS #:

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

Ты подаешь ценовой ряд и его характеристики в модель, а модель тебе отвечает :

Для самой прибыльной торговли тебе надо настроить такие периоды

стохастик n = 12 , рси  n = 33, машка  n = 55 ..... .... .... 


----------------------------------------------------------------------

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

----------------------------------------------------------------------

По сути это называеться адаптивная фильтрация, идеи ЦОС сто летней давности


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


Maxim Dmitrievsky #:

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

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

Понял, спасибо. По сути, это labeling по режимам где мы либо торгуем, либо вообще не торгуем. Я хочу пойти немного дальше и как-то подбирать более оптимальные (с точки зрения МЛ модели) параметры для следующей минуты торговли.

 
Arty G #:
То есть, X для модели выглядит примерно так: [volatility_short, volatility_long, rsi, trade_imbalamce, strategy_param1, strategy_param2]. А y - это знак того, что заработали за минуту.

Как я понял, есть значения предикторов, которые изменяются раз в минуту, и есть значения настроек стратегии, которые вы перебираете и смотрите результат.

Думаю, тут всё же уместно использовать кластеризацию, но только на тех предикторах, что меняются раз в минуту - они и определяют состояние рынка.

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

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

Ещё есть вариант посмотреть в сторону ранжирования и рекомендательных систем - в теории сможете получать наборы оптимальных настроек под текущую ситуацию. Правда, пока руки у меня не дошли до этого, поэтому только в теории тут.

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

Почитайте. Квантование в лоб не всегда эффективно, в статье предлагается инструмент для оценки качества квантования, оценивается потеря точности.

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

Не очень понимаю, какие могут возникнуть сложности применения модели - посмотрите у них на сайте много примеров с детальным кодом для питона - сам я не специалист по питону. Опять же можно использовать ONNX - в теории.

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

А, Вы про данные, по которым торгуете и на которых формируете настройки стратегии, верно?

В чём храните данные?