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

 
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 данных (среди которых все апдейты книги и трейды) занимает много места и времени.

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

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

 
Ivan Butko #:

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

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

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

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

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


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

Я думал о системе подтверждения тенденции, и если ожидания уменьшились, то закрываемся - проверяем состояние не на каждом баре.

 

Сделал для покупок..

Кароч для покупок сливат но по четкой причине, волатильность.

Если та свеча на которую тригернул сигнал была аномально волатильной то вход по открытию получаеться черти где


Но если волатильность нормальная и рынок спокойный то и вход нормальный


Так случилось что 4 из 5ти тригеров оказались на екстримальной волатильности...

Так что пока так.. надо как то нормировать силу сигнала к волатильности..


Также интересная картина если перейти с м1 на м15 и увеличить порог входа


 
Aleksey Vyazmikin #:

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

Да, так и есть. И торговаля происходит в течении этой минуты, так как это HFT.


Aleksey Vyazmikin #:

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

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


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


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


Имеете в виду регрессию параметров для прибыльной торговли, примерно как обсуждалось на пару сообщений выше? Попробовал натренировать RandomForestRegressor, которому в качестве фич скармливаю минутные предикторы, а так же полученный за минуту профит в виде пока просто знака, а в качестве dependent value два параметра для ТС, сильно влияющие на поведение ТС. В бектестер пока не запустил, но пока не вижу, распределения предсказаний для положительной торговли и отрицательной сильно отличаются.


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

А попадались какие-то полезные статьи по этой теме, в которые могли бы ткнуть для ликбеза? Был ба благодарен.


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

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

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


Да, так и есть - говорю про данные для бектестера. Данные изначально скачиваются в формате CSV от вендора данных, а затем конвертятся в формат данных библиотеки Numpy - npz, в нём и хранятся. Это ZIP архив, но данные не сжаты.

Машинное обучение в трейдинге: теория, модели, практика и алготорговля
Машинное обучение в трейдинге: теория, модели, практика и алготорговля
  • 2024.04.09
  • mytarmailS
  • www.mql5.com
Добрый день всем, Знаю, что есть на форуме энтузиасты machine learning и статистики...
 
Arty G #:

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

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

С числом кластеров надо экспериментировать.

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

Arty G #:

Имеете в виду регрессию параметров для прибыльной торговли, примерно как обсуждалось на пару сообщений выше? Попробовал натренировать RandomForestRegressor, которому в качестве фич скармливаю минутные предикторы, а так же полученный за минуту профит в виде пока просто знака, а в качестве dependent value два параметра для ТС, сильно влияющие на поведение ТС. В бектестер пока не запустил, но пока не вижу, распределения предсказаний для положительной торговли и отрицательной сильно отличаются.

Регрессия может работать, если есть функциональная зависимость настроек от предикторов, если её нет, то лучше пробовать мультиклассификацию. И я не понял, как можно подавать фин результат в качестве предиктора - он же не известен будет модели...

Arty G #:

Да, так и есть - говорю про данные для бектестера. Данные изначально скачиваются в формате CSV от вендора данных, а затем конвертятся в формат данных библиотеки Numpy - npz, в нём и хранятся. Это ZIP архив, но данные не сжаты.

Попробуйте feather - загружает быстро и данные несколько сжаты относительно csv, можно изменить тип данных перед сохранением для уменьшения размера.

 
Arty G #:

А попадались какие-то полезные статьи по этой теме, в которые могли бы ткнуть для ликбеза? Был ба благодарен.

Попадались - браузер глюкнул и всё потерялось, к сожалению. Но при желании можно найти.

Причина обращения: