Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 3466
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
надо прогнозировать
это тоже прогноз
Да
В этом и суть: прогнозируем тренд - входим. Цена начинает кривляться, прогнозируем выход (HOLD) - выходим, хрен с этим трендом, поищем другой.
Трейдеры так и поступают: прогнозирует тренд/импульс. Заходит. Цена начинает кривляться как-то, да так, что трейдеру не нравится свой вход. Он прогнозирует 50 на 50 или "не пойму, что происходит". И такой "ну нафик, лучше я выйду". Плата - небольшой минус или небольшой плюс.
Он не прогнозирует "обратный сигнал". Ему именно не нравится реализация тренда/импульса.
Вот так и нужно: прогнозируем вход, прогнозируем продолжение тренда, прогнозируем выход/либо обратный вход.
Я же что делаю - прогоняю сотню бектестов на одном и том же отрезке времени с разными настройками. Потом сгоняю это всё в один датафрейм и тренирую модель. Для модели комбинация настроек торговой стратегии - это такая же фича
Ты делаешь это немного кустарно..
Ты проганяешь через модель множество настроек ТС (много датасетов) и модель дает вероятность лучшых настроек ТС верно?
Те на каждом новом баре ты создаешь огромное количество датасетов.
Думаю лучше взять алгоритм регресии с многими выходами, где выходы будут готовые параметры для ТС.
У тебя схма такая : много датасетов + модель с одним выходом
А лучше : один датасет + модель с многими выходами
пример
https://stackoverflow.com/questions/57704609/multi-target-regression-using-scikit-learn
Да
В этом и суть: прогнозируем тренд - входим. Цена начинает кривляться, прогнозируем выход (HOLD) - выходим, хрен с этим трендом, поищем другой.
Трейдеры так и поступают: прогнозирует тренд/импульс. Заходит. Цена начинает кривляться как-то, да так, что трейдеру не нравится свой вход. Он прогнозирует 50 на 50 или "не пойму, что происходит". И такой "ну нафик, лучше я выйду". Плата - небольшой минус или небольшой плюс.
Он не прогнозирует "обратный сигнал". Ему именно не нравится реализация тренда/импульса.
Вот так и нужно: прогнозируем вход, прогнозируем продолжение тренда, прогнозируем выход/либо обратный вход.
да, в идеале все так
Ты делаешь это немного кустарно..
Ты проганяешь через модель множество настроек ТС (много датасетов) и модель дает вероятность лучшых настроек ТС верно?
Те на каждом новом баре ты создаешь огромное количество датасетов.
Думаю лучше взять алгоритм регресии с многими выходами, где выходы будут готовые параметры для ТС.
У тебя схма такая : много датасетов + модель с одним выходом
А лучше : один датасет + модель с многими выходами
пример
https://stackoverflow.com/questions/57704609/multi-target-regression-using-scikit-learn
Ну чуть избыточно как-будто получается, да. Каждый новый бар порождает кол-во новых строк равных тестируемым параметрам для стратегии. Факторы - рыночные фичи + параметры ТС, выход - бинарный выход где бар будет либо прибыльным, либо убыточным.
Модель регресси, которая бы на выходе выдавала параметры для стратегии должна быть как-то обучена выдавать такие значения параметров, которые дадут положительный профит. То есть, профит должен быть использован как предиктор. Получается, тренируем multi-out модель, для которой X будет содержать рыночные фичи и либо абсолютный профит от торговлу внутри минутного бара, либо просто знак профита, а y - это параметры стратегии. Затем, при торговле на вход ей подаем фичи и желаемый профит или знак профита, чтобы она регресснула нам параметры для такой комбинации фич и профита?
Пробегался по этой статье. Почитаю еще раз, спасибо!
Задача стоит не совсем в том, чтобы найти режимы рынка, при которых стратегия работает хорошо, а определить для режима набор параметров для стратегии, которые будут работать хорошо.
Я же что делаю - прогоняю сотню бектестов на одном и том же отрезке времени с разными настройками. Потом сгоняю это всё в один датафрейм и тренирую модель. Для модели комбинация настроек торговой стратегии - это такая же фича, как и остальные рыночные фичи типа волатильности или, скажем, перевеса в 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]
Получили модель. Теперь, запустив бектестер или живую торговлю, мы можем каждую минуту циклом проходиться по модели, передавая ей текущий набор фич и доступные комбинации параметров для торговой стратегии, пока не найдем такую комбинацию параметров, при которой модель видит высокую вероятность прибыльной торговли.
То есть, гипотеза заключается в том, что для разных режимов рынка есть разный набор параметров, при которых торговая система будет прибыльна и еще в том, что можно научить модель МЛ находить для разных режимов подходящий набор параметров.
Ну получается, что сначала нужно определить режимы, а потом сделать все то же самое что вы делаете для каждого из них, исключая данные из других режимов :)
Ну чуть избыточно как-будто получается, да. Каждый новый бар порождает кол-во новых строк равных тестируемым параметрам для стратегии. Факторы - рыночные фичи + параметры ТС, выход - бинарный выход где бар будет либо прибыльным, либо убыточным.
Модель регресси, которая бы на выходе выдавала параметры для стратегии должна быть как-то обучена выдавать такие значения параметров, которые дадут положительный профит. То есть, профит должен быть использован как предиктор. Получается, тренируем multi-out модель, для которой X будет содержать рыночные фичи и либо абсолютный профит от торговлу внутри минутного бара, либо просто знак профита, а y - это параметры стратегии. Затем, при торговле на вход ей подаем фичи и желаемый профит или знак профита, чтобы она регресснула нам параметры для такой комбинации фич и профита?
Я не знаю что точно и как ты делаешь потому не могу дать конкретный совет но в обьщем это должно выглядеть так.
Ты подаешь ценовой ряд и его характеристики в модель, а модель тебе отвечает :
Для самой прибыльной торговли тебе надо настроить такие периоды
стохастик n = 12 , рси n = 33, машка n = 55 ..... .... ....
----------------------------------------------------------------------
Но в принцепе я тебе рекомендую делать то что делаешь и не тратить время на изучение нового но не факт что лучшего подхода.
Твой подход не должен быть хуже с точки зрения точности, он просто более громоздкий
----------------------------------------------------------------------
По сути это называеться адаптивная фильтрация, идеи ЦОС сто летней давности
Ну получается, что сначала нужно определить режимы, а потом сделать все то же самое что вы делаете для каждого из них, исключая данные из других режимов :)
В текущей версии я сваливаю кажущиеся мне важными для ТС данного типа фичи в модель и взятый по сути от балды разброс параметров для ТС и обучаю модель понимать при каких комбинациях фич + параметрах ТС будет профит, а при каких лосс.
Вы советуете определять режимы более конкретно (например, методами кластеризации из Вашей статьи), а потом научить модель под каждый режим выбирать оптимальные параметры? Правильно ли я понимаю, что кластеризация режимов позволит с большей вероятностью определять прибыльный набор параметров, чем текущий мой сетап?
В текущей версии я сваливаю кажущиеся мне важными для ТС данного типа фичи в модель и взятый по сути от балды разброс параметров для ТС и обучаю модель понимать при каких комбинациях фич + параметрах ТС будет профит, а при каких лосс.
Вы советуете определять режимы более конкретно (например, методами кластеризации из Вашей статьи), а потом научить модель под каждый режим выбирать оптимальные параметры? Правильно ли я понимаю, что кластеризация режимов позволит с большей вероятностью определять прибыльный набор параметров, чем текущий мой сетап?
Для конкретного режима да, если ТС чувствительна к волатильности, например. То есть вторая модель будет определять какой сейчас режим, если нужный - то торговля разрешена. А первая модель обучена уже на ваших параметрах для этого режима.
Но можно подобрать параметры для всего датасета, не разделяя на режимы, а потом посмотреть как ТС работает на конкретных режимах. На каком лучше, только на нем и торговать. Ну то есть обычный фильтр. Так в статье сделано.
Я не знаю что точно и как ты делаешь потому не могу дать конкретный совет но в обьщем это должно выглядеть так.
Ты подаешь ценовой ряд и его характеристики в модель, а модель тебе отвечает :
Для самой прибыльной торговли тебе надо настроить такие периоды
стохастик n = 12 , рси n = 33, машка n = 55 ..... .... ....
----------------------------------------------------------------------
Но в принцепе я тебе рекомендую делать то что делаешь и не тратить время на изучение нового но не факт что лучшего подхода.
Твой подход не должен быть хуже с точки зрения точности, он просто более громоздкий
----------------------------------------------------------------------
По сути это называеться адаптивная фильтрация, идеи ЦОС сто летней давности
Понял. Пробую такое сделать уже. Для регрессии подходящих параметров необходимо снабдить модель и заработком за минутный бар. Тогда подаем ей текущие фичи и "желаемый" заработок, а на выходе получаем набор параметров для стратегии. Для начала попробую подавать просто знак заработка. Дальше можно пробовать создавать катеогрии - типа, небольшой профит, большой профит. Интересно, как обученная модель себя поведет, если при текущем положении дел категория "большой профит" в принципе невозможна - рынок дохлый например, сделок мало.
Для конкретного режима да, если ТС чувствительна к волатильности, например. То есть вторая модель будет определять какой сейчас режим, если нужный - то торговля разрешена. А первая модель обучена уже на ваших параметрах для этого режима.
Но можно подобрать параметры для всего датасета, не разделяя на режимы, а потом посмотреть как ТС работает на конкретных режимах. На каком лучше, только на нем и торговать. Ну то есть обычный фильтр. Так в статье сделано.
Понял, спасибо. По сути, это labeling по режимам где мы либо торгуем, либо вообще не торгуем. Я хочу пойти немного дальше и как-то подбирать более оптимальные (с точки зрения МЛ модели) параметры для следующей минуты торговли.
То есть, X для модели выглядит примерно так: [volatility_short, volatility_long, rsi, trade_imbalamce, strategy_param1, strategy_param2]. А y - это знак того, что заработали за минуту.
Как я понял, есть значения предикторов, которые изменяются раз в минуту, и есть значения настроек стратегии, которые вы перебираете и смотрите результат.
Думаю, тут всё же уместно использовать кластеризацию, но только на тех предикторах, что меняются раз в минуту - они и определяют состояние рынка.
Потом для каждого кластера посмотреть уже посмотреть распределение вероятности конкретных настроек стратегии. Причём можно смотреть отдельно настройки, а можно их рассматривать как сет нумерованный. В итоге получится такая вот база - с показателями вероятности и оценкой финансового результата для каждой настройки. Далее просто определяете текущий кластер и выбираете оптимальные настройки.
Другой вариант - мультиклассификация для каждой настройки. Если настройки влияют на ТС через функцию - можно регрессию. Потом брать ответы от каждой модели и использовать в качестве настроек.
Ещё есть вариант посмотреть в сторону ранжирования и рекомендательных систем - в теории сможете получать наборы оптимальных настроек под текущую ситуацию. Правда, пока руки у меня не дошли до этого, поэтому только в теории тут.
Почитаю Вашу статью про квантование. Я использовал децили, но при переходе на реальные величины точность предсказаний резко возросла. Я так понял, что для деревьев нормализация данных не так важна, а вот гранулярность данных сильно терялась при использовании децилий.
Почитайте. Квантование в лоб не всегда эффективно, в статье предлагается инструмент для оценки качества квантования, оценивается потеря точности.
CatBoost попробую, спасибо. Просто у меня бектестер и код для живой торговли написаны на Numba в Питоне и пользоваться обученными моделями в sklearn там не получается. Для этого я нашел способ экспорта модели случайного леса в набор листов и диктов, что позволило использовать натренированную модель под Нумбой. Изучу, возможно ли такое или подобное с CatBoost.
Не очень понимаю, какие могут возникнуть сложности применения модели - посмотрите у них на сайте много примеров с детальным кодом для питона - сам я не специалист по питону. Опять же можно использовать ONNX - в теории.
По поводу размера данных - я имел в виду, что данные для бектеста слишком много весят и прогнать бектест на сотне другой параметров на годе HFT данных (среди которых все апдейты книги и трейды) занимает много места и времени.
А, Вы про данные, по которым торгуете и на которых формируете настройки стратегии, верно?
В чём храните данные?