Блог им. AleksandrBaryshnikov

Q-learning в алготрейдинге

    • 24 ноября 2023, 02:32
    • |
    • bascomo
  • Еще
Привет! Новая интересная тема в ночь, как я люблю, а так же ликбез для тех, кто хочет достичь больше большинства (и стать успешным меньшинством), и стремится к новым свершениям.

Размышляя и говоря о самообучающихся торговых системах, невозможно пройти мимо Machine Learning / Deep Learning (ML / DL), и это — пост, который посвящён этой теме.

Q-learning в алготрейдинге

О технологиях ИИ и областях их применения в алготрейдинге
Я бы разделил применение ML в трейдинге на три части:
  1. Классический ML, который представлен, например, библиотекой scikit-learn. Она позволяет обрабатывать данные статистически, а так же предоставляет простые модели классификации, кластеризации и регрессии. Функций этой библиотеки достаточно, чтобы несколькими строчками кода выявить наличие или отсутствие зависимостей/корреляций в данных, разбить данные на кластера и выполнить другие типовые задачи, в том числе, препроцессинг данных (предварительную обработку) — стандартизацию, нормализацию, очистку и т.п. Кроме того, её можно использовать для уменьшения размерности, что может пригодиться, например, для выявления значимых метрик торговых стратегий для дальнейшей фильтрации и отбора по существенным. И это только одна библиотека, а их теперь существует множество.
  2. Нейронные сети или, иначе, глубокое обучение. Это одно и то же. По большому счёту, они позволяют решить те же самые задачи, что и п. 1, но возможностей для тюнинга тут безграничное количество. Например, можно сделать нейронную сеть с множеством входов, на которые подавать различные данные. А, кроме того, обработка видео, изображений, звука и текстов осуществляется только ими. Тут следует отметить, что тем, кто желает предсказывать именно цену временного ряда, нужно использовать RNN-сети. Эти сети, основываясь на предыдущих ценах, пытаются предсказать будущую цену. В большинстве случаев, они могут довольно неплохо, с точки зрения человека, предсказать значение цены закрытия следующего периода, но чем дальше в будущее, тем хуже результат, который очень быстро превращается в никакого отношения к реальности не имеющий. И потому я писал раньше, что у такой сети хорошо бы иметь несколько входов, на которые подавать данные разных таймфреймов. Тогда точность должна существенно возрасти, но от 24.02.2022 это никак не защитит, разумеется. Скармливать сетям других типов цены — бессмысленное и бесполезное упражнение, не занимайтесь этим, пожалуйста. Можно реализовать и другой тип предсказаний, который относится к теме классификации. В этом случае нейросеть должна будет отвечать на вопросы в духе «Следует ли на этом баре купить или нет?» (т.н. бинарная классификация) или «На этом баре лучше купить, продать или ждать?» (т.н. многоклассовая классификация). Можно попытаться и увеличить число классов, например «купить, увеличить позицию, ждать, продать частично, закрыть полностью» — тут всё зависит от фантазии конструктора. Здесь сеть не пытается предсказать будущую цену, как понятно, а будет нам говорить, с какой вероятностью торговое действие при таких же условиях в прошлом было правильным / прибыльным. Бонусом является то, что можно стандартизировать (привести к одному диапазону, обычно 0..1) цены множества различных инструментов и скормить их нейросети, что, теоретически, должно существенно повысить её точность и качество предсказаний, при условии, что в данных, которые вы подготовили, таки-есть зависимости. И по своему опыту скажу, что это очень неплохо работает, но только если кормите нейронную сеть не ценами, а производными от цен сигналами. Сигналами индикаторов, свечных фигур или ещё каким-то образом рассчитанными. Что же до моих предпочтений в применении глубокого обучения в трейдинге, помимо только что упомянутого опыта, — у меня очень хорошо получилось использовать его для отбора перспективных ТС по их метрикам, о чём рассказывал подробно в одном из предыдущих постов и приводил архитектуру сети, тут: Отбор систем для торговли — final call (smart-lab.ru)
  3. Обучение с подкреплением, одним из вариантов которого является Q-learning. С моей точки зрения, это одна из наиболее интересных для трейдинга технологий, которую я собираюсь протестировать уже давно, но пока «руки не дошли», хотя идут обычно ногами. Её суть заключается в том, что мы создаём агента, который торгует на исторических данных, и за каждую сделку получает вознаграждение (прибыль) или штраф (убыток), и таким образом, учится и выстраивает внутри себя торговый алгоритм. Об этом и буду говорить дальше, только одно «но» для недоверчивых: ни описания этого алгоритма, ни представления о том, как он работает и почему именно такую сделку решил совершить и именно на этом баре, вы не получите. Это чёрный ящик и, похоже, надо просто это принять, если вы пойдёте таким путём. А страхи свои купировать стопами и управлением капиталом; в том числе, принудительной остановкой торгов, если что-то пошло не так. Впрочем, практикующим успешным алготрейдерам это и так известно и они это применяют в любых торговых алгоритмах, поскольку прекрасно понимают, что слезами вернуть слитый депозит не получится.
Q-learning у нас близко дружит с Deep Learning, а тот, в свою очередь, как изображено ниже, является частью машинного обучения и искусственного интеллекта в целом.

Q-learning в алготрейдинге


Пример модели Q-learning

Одним из возможных вариантов модели, основанной на обучении с подкреплением, созданной для алгоритмической торговой стратегии, может быть следующий: 
  • Модель состоит из трех основных компонентов: агента, среды и функции награды.
  • Агент — это программа, которая принимает торговые решения на основе своих наблюдений за средой (рынком) и своей стратегии. Агент может использовать различные алгоритмы обучения с подкреплением, такие как Q-обучение, глубокое Q-обучение, политика градиента, актор-критик и другие, чтобы обучаться оптимальной стратегии.
  • Среда — это рыночная ситуация, в которой агент действует. Среда предоставляет агенту информацию о ценах, объемах, технических индикаторах и других факторах, которые влияют на торговлю. Среда также реагирует на действия агента, изменяя свое состояние и возвращая агенту награду или штраф.
  • Функция награды — это правило, которое определяет, как оценивать торговые действия агента. Функция награды может учитывать различные аспекты торговли, такие как прибыль, убыток, риск, стабильность, частота и другие. Функция награды должна быть такой, чтобы мотивировать агента максимизировать свою долгосрочную прибыльность и избегать переобучения. Самый простой вариант — это прибыль/убыток от сделки минус комиссия. И, для особо упёртых — проскальзывание :)
  • Выскажу и такое соображение: понятие функции награды для торговой системы для алготрейдеров — это как розеттский камень, это некая универсальная оценка качества торговой системы одной цифрой. В этом направлении можно долго и упорно копать, исследуя и ища оптимум, а я же доверил это глубокому обучению.
Всё это напоминает путь трейдера за терминалом, от первой сделки до профессиональных высот, не правда ли? :)Пример кода (загрузка данных, определение параметров и структуры модели, основанной на обучении с подкреплением, для алгоритмической торговой стратегии, и её обучение) может выглядеть так:

Подключаем библиотеки
Q-learning в алготрейдинге

Загружаем свечи, преобразуем дату из текста в тип date
Q-learning в алготрейдинге

Тут мы используем специальную библиотеку gym, которая предназначена для тренировки алгоритмов Q-learning
Q-learning в алготрейдинге

Модель построена со слоем LSTM, который относится к типу RNN — реккурентных сетей. Кстати, Chat GPT работает на сетях именно такого типа (LSTM = long-short memory term). Он, конечно, посложнее будет, но принципы те же. Далее идут два самых обычных слоя Dense, один скрытый и последний — выходной. Они много и часто где используются, поскольку универсальные и неспециализированные. RNN-слои, каковым и является LSTM, имеют одну отличительную особенность: они работают с последовательностями и были придуманы именно для этого: слова в предложениях, последовательность цен во времени (свечи как пример), или значений температуры или силы ветра по датам — для предсказания погоды, или последовательность кадров в видео — для предсказания следующего изображения, и так далее. То есть, какой-то временной или смысловой ряд, который предполагает, что последующее зависит от предыдущего. Именно по этой причине я выше говорил, что использовать другие типы сетей для предсказания временных рядов (и конкретно цен — если ваша задача спрогнозировать следующую цену) — это как есть суп вилкой.
Q-learning в алготрейдинге
Тут всё прокомментировано в коде. За деталями обращайтесь к документации ;)
Q-learning в алготрейдинге

Ну и само обучение
Q-learning в алготрейдинге

Вот и весь код. Если вы ранее не сталкивались с нейронными сетями и их обучением, тут много непонятного для вас, и это плохо. Но есть и хорошее: строчек кода совсем немного и разобраться сможете довольно быстро. А ещё это Python, который довольно прост как язык.
Код писал не я, кстати, а ChatGPT, так что могут быть и неожиданности, но нам, разработчикам, главное что? Структура. А напихать туда своих измышлений мы сможем сколько душе будет угодно, шаблончик-то — вот он.

Идеи по совершенствованию
Я бы, например, предложил бы кормить такое чудо не непосредственно ценами хоть тиков, хоть свечей, а производными от них сигналами. Хоть индикаторов, хоть свечных фигур. Впрочем, об этом уже было выше. Просто это красная нить моих идей. А если предварительно исследуете существенность этих сигналов по оптимальному торговому пути и отбросите все, так сказать, неяркие и слабые сигналы, то вы обречены на успех :)

Некоторые участники сообщества пишут, что, мол, бери любую сетку, скорми ей цены и сразу будет всё в шоколаде. Увы, это не так. Для каждой задачи нужно правильно подбирать инструмент, ведь всем очевидно, что стеклодувы не молотками работают. Почему тут должно быть по-другому?
Тут всё ещё хуже: подобрать инструмент мало, нужно его ещё хорошенько оттюнить: большие деньги разработчикам нейронных сетей (тот самый Data Science) платят не за то, что они хаотично набросают первые попавшиеся слои в не пойми какую сетку. Конструирование нейронных сетей — это не столько профессия, сколько искусство. Да, всё ещё так. Есть рекомендации для наиболее часто встречающихся задач, но конкретный результат зависит от разработчика. Универсальных рецептов нет, а на некоторые задачи нет вообще никаких. Просто начни с нуля и что-то придумай. А тут у вас уже есть хребет, только нужно мясцо нарастить.

Q-learning в алготрейдинге

Вообще это очень перспективная тема — скрестить сигналы имеющихся у вас торговых систем и получить что-то новенькое. Не пробовали?

Как вы уже понимаете, код иного индикатора может занимать куда больше строк, чем код создания и обучения этой нейросети.
И при этом, вы видите код системы, которая будет учиться торговать сама и не нужно писать никаких алгоритмов если-тогда-иначе и всего вот этого прочего, нудного.
Просто побольше свечек скормите (читай: сигналов).
Звучит заманчиво? :)

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

Стройте модель, тестируйте и оценивайте результат!

А то у меня эта задача в хвостике очереди тех, к которым пока не приступил :)
Вдруг кто-то раньше успеет :)

И советы из прошлого:
  • если у кого-то не получилось — это не значит, что оно не работает. Это значит, что у кого-то не получилось,
  • а если не получилось у вас — вероятность того, что вы плохо старались выше, чем вероятность того, что это не работает.


Доброй ночи и приятных снов.
★7
30 комментариев
лет 10-12 назад мы пытались делать нейросети для торгов
в тот момент не вышло ((
avatar
@bascomo, у вас получилось запустить этот код на питоне?
avatar
yurikon, Я не пробовал, нужно данные готовить. Могу сегодня попробовать. Но это не точно. 
avatar

Подписан на рассылку от Medium — в рассылке очень много статей про Reinforcement Learning в трейдинге. Я правда не знаю — может это рассылка под мои клики так подстроилась))).

 

Этот тип обучения чуть особняком, потому что тут не классическое fit-predict. Когда-то давно пробовал не осилил. Щас с кучей примеров и ChatGPT попробовать на порядок проще. Но щас я больше налегаю на прикладные аспекты и в авантюрные исследования менее охотно врываюсь. Но конечно пощупать RL хочется.

avatar
Replikant_mih, значит, надо щупать, пока LLM нас всех не поработили и не пустили на биотопливо
avatar
bascomo, Это да, надо торопиться)).
avatar
В целом мы все очень отстаем от прогресса в области ИИ :). Ведь можно использовать уже и сам чатгпт и другие модели четь подкоректировав под свои задачи… У самого пока руки не дошли до данного эксперемента.. 
В целом в теме RL забавные продвижения тоже имеются, которые, как мне кажется, в скором времени могут облегчить все это дело.
Я все это к чему, возможно не стоит изобритать велосипед и строить все с 0, а взять готовые решения и адаптировать под свои нужды.
avatar
 
А если у вас есть предубеждение к машинному обучению в трейдинге, просто пообщайтесь с ChatGPT. Хорошо прочищает мозги неверующим. Мне кажется, порой, что на том конце сидит какой-то всезнайка, который мгновенно отвечает на мои вопросы на любые темы.
У него есть проблема :))) он всегда говорит что я прав
avatar
Это уже достаточно давняя модель. Вот статья от 2019 года — они индикаторы использовали на входе ieeexplore.ieee.org/document/8786132 там есть сравнение разных моделей, в т.ч. A2C/A3C — дала лучший результат. Я ее пробовал github.com/akumidv/startup-khv-ai-study/blob/main/07_A2C/07_A2C_50.ipynb

Но если посмотреть на чем они учили — то у них модель проигрывает «купи и держи». Сама суть этой модели — случайно тыкать и смотреть на результат. Примерно как подобрать параметры средних… Вероятность, что она найдет что-то — думаю небольшая.
Из новых — это трансформеры для тайм серий на основе модели GPT arxiv.org/pdf/2310.03589.pdf

Но схемы выглядят пока сложными — в тех примерах которые в описаниях смотрел — брали те таймсерии, которые вроде как могут коррелировать с данными, на которых потенциально модель обучалась (например погода). Но так ли она работает — сложно сказать. И насколько это ложится на акции?
avatar
akumidv, я считаю, что погоду предсказывать легче чем цены акций, но проблемы там возникают очень похожие — до 4-5 периода куда ни шло, а после получается полная ерунда.
avatar
akumidv, что-то ссылки не открываются, то 404, то ещё что-то
avatar
Искать надо руками простую геометрию, а потом уже в ИИ впиндюривать…
avatar

Да не работает это всё, прошлые цены не предсказывают будущие.

Вы хотите на простейших сетях торговать лучше рынка? Да крупные банки и корпорации подключили суперкомпьютеры и обучили сети с тысячами слоёв, но нет результатата — очевидно!

avatar
Antihype, меня интересует опыт прошедших этот путь, а не бестолковые и непрофессиональные мнения личностей, не разбирающихся в вопросе :)
avatar

bascomo, это путь в один конец, без результата. Интересует процесс, а не профит? Пожалуйста, наслаждайтесь по ночам, если больше не чем заняться:) 

А нормальные люди должны знать, что профита здесь нет. И не стоит на хайповую тему вестись.

avatar
Antihype, сам-то пробовал?
avatar

bascomo, зачем? Научен на ошибках похожих мелких и крупных проектов, которые не взлетели.

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

avatar
Antihype, потому что это для тебя написал:
  • если у кого-то не получилось — это не значит, что оно не работает. Это значит, что у кого-то не получилось,
  • а если не получилось у вас — вероятность того, что вы плохо старались выше, чем вероятность того, что это не работает
avatar

bascomo, ты то конечно хорошо постараешься и у тебя получится) Наивный))

Ничего, помучаешься, потом вспомнишь мои слова. Прошлые цены не определяют будущие.

avatar
Antihype, у меня уже получилось, и я об этом писал раньше.

Всё, чем занимаются алго- и трейдеры — это подгонка под историю, в надежде, что в будущем это будет работать.
Будущие цены предсказывают идиоты.
avatar
bascomo, посмотрите резалт фонда numerai. Там все топовое: основатель математик, продвинутая методология, краудсорсинг идей, взвешивание альфа-сигналов
avatar
wrmngr, да что ж вы в меня фондами и банками тычете? Неужели не соображаете, что они институционалы и у них совершенно другие торговые стратегии от слова совсем? Они не десятком акций торгуют, и это определяет возможности стратегий.
avatar
bascomo, я так понимаю wrmngr намекает на то, что у вас намечается путь, похожий на numerai. Т.е. провели тесты, потратили кучу денег/времени на топовые ИИ исследования, получили красивые доходности на тестах, запустились в продакшн, привлекли клиентов, в реале с января сидят в -50% просадке. Почему-то кажется что они о таком не подозревали и не планировали, когда тестили лучшими умами.
avatar
Sprite, и во главе там какой-нибудь индус, поди. Мой путь, который намечается, точно так же неизвестен, как будущие цены рыночных котировок, и это всё, что нужно знать. 
avatar
bascomo, не, там норм, все сплошь профильные учёные.
avatar
Sprite, Возможно, переоценили свои силы
avatar
Sprite, мне кажется гражданин считает себя умнее всех. Но это пройдет со временем
avatar
bascomo, а вы в курсе что gpt не является рекуррентной и не имеет вообще ни какого отношения к lstm сетям?
avatar
Valentin Budaev, Не в курсе.
avatar
Antihype, скажем так, всё работает в правильных руках. Только эти руки без всякого алго сначала всю математику нашли, а потом уже в нормальном коде реализовали, без всяких навороченных и непонятных ИИ… Кто робота не осилил, тот полуавтоматическим индикатором справляется.
avatar

теги блога bascomo

....все тэги



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