Нейросети и трейдинг. Практическая реализация
Мода на трейдинг переживает взлеты и падения вместе с курсом Биткоина. Многие за это время успели познакомиться с криптобиржами — вникали в тему, учились, трейдили, теряли деньги и даже иногда зарабатывали. В итоге, мода прошла, а опыт остался, пусть и негативный. Слова «лонг», «шорт», «спред», «дивер» можно услышать от тех, от кого уж точно этого не ожидаешь. Но не только торговля «руками» приковывала к себе внимание, есть еще торговые боты. Что у нас в этой области, о чем говорит опыт последних 2-3 лет?
К сожалению, в этой области нет ничего интересного. Инструментов для написания торговых ботов много, а стабильно профитных стратегий нет. В лучшем случае работающее решение нужно постоянно обслуживать парой трейдер-программист меняя настройки под текущий рынок. Стандартный результат после подключения полностью автономного бота к депозиту — слив депозита.
Остается последняя надежда — нейросети. Тут уж точно должно получиться, ведь нейросеть учится как человек и сама подстраивается под рынок. Как дела в этой области? Ну… вы уже догадались, ничего хорошего, разговоров много, а работающих решений нет. Яркий тому пример магазин приложений сообщества MQL5. За брендом MQL5 стоит профессиональная платформа для трейдинга — MetaTrader5 плюс огромное сообщество трейдеров и программистов. Так вот в этом магазине есть раздел для решений на основе нейросетей, там много ботов, но ни одного настоящего. Добавить туда бота использующего нейросети запрещено правилами. В это трудно поверить, но это так. Запрет на подключение внешнего API исключает возможность использования нейросетей, а встроенные в MQL5 средства на практике не работают. Этот вопрос я обсуждал с техподдержкой MQL5, внятного ответа так и не получил. В итоге, на рынке нет ничего реально работающего из коробки, выложенные на гитхабе решения из серии «обучи сам» в расчет не берутся.
Ладно, заканчиваю со вступлением, перехожу к делу. У меня получилось обучить нейросеть, есть стоящие внимания результаты на реальном рынке. Дальше опишу как это было сделано.
Первой и главной ошибкой всех, кто пытается обучать нейросеть торговле является трейдерское мышление о рынке. Обычно внедрить решение основанное на нейросетях пытается трейдер в паре с программистом которые до этого писали ботов. Алгоритм торгового бота решает задачу поиска правильной точки входа в позицию и определения «тейка» и «стопа». Если эту задачу иметь в голове при проектировании нейросети, то ничего не получится. Можно бесконечно перебирать хитроумные варианты входных данных, подавать или не подавать индикаторы, пробовать разные типы нейросетей, подставлять костыли ввиде обучения только на определенных участках или обучать показывая только известные паттерны. Работать не будет.
С нейросетью надо как с ребенком, смотреть на мир ее глазами и начинать с простых задач. Самый простой вопрос который можно задать — «куда пойдет цена через Х свечей, вверх или вниз?». Не важно на сколько сильно изменится цена и не важно, что ответ потом нельзя будет превратить в торговую стратегию. Забываем про торговлю, сейчас главная задача хоть чему-то обучить сеть, просто получить правильный ответ.
У меня эта начальная задача решилась после 100500 подборов входных данных. Использовал TensoFlow плюс Keras, сеть Sequental Dense. Входной датасет на 200-300 тыс примеров, входной вектор 250-350 фичь. Из поставленного сети вопроса вытекает и форма ответа — бинарная классификация «вверх» или «вниз». Входные данные готовил ботом на MQL5. Бот пробегая историю формирует обычный csv фаил, каждая строка — вектор. В конце каждого вектора правильный ответ ввиде 1:0 если вверх, 0:1 если вниз.
Вот несколько советов тем, кто попробует это сделать:
- Хорошо обучается в пределах прогноза от 15 минут до 60 минут. На меньшем периоде растет хаотичность движения цены, на большем увеличивается внешнее влияние — новости и прочее, 15-60 минут самая «техничная» зона.
- Лучше всего обучение проходит на BTCUSD, второе место у EURUSD.
- Не забивайте голову вопросами типа «а что если цена не изменилась? тогда это третий вариант ответа?». При сборе данных я просто не включал их в датасет, задачу надо упрощать.
- При прогоне на тестовом участке ответы сети на первый взгляд будут казаться хаотичными с практически случайным, приближающимся к 50% уровнем результативности. Это серьезная проблема, ниже поясню как я ее решил.
Используя такой подход получил следующий результат:
примерно в 2% ответов сеть угадывает дальнейшее движение в соотношении 2 правильных ответа к 1 неправильному. При тесте на реальном рынке именно так и получается, но возникает другая проблема. У нас ведь всего 2% вопросов имеют ответ, остальное игнорируем. Т.е. запускаем нейро на реальном рынке на таймфрейме 5 минут и ждем… при 2% — это только каждая 50ая свеча будет с ответом, один ответ за 4 часа! И что с этим делать? Ладно если бы ответ был «купи/продай», тогда 6 сделок в сутки нормально, а тут абстрактные «вверх/вниз» и то неточно, полное разочарование.
В итоге, решил эту проблему относительно легко — просто каждые 5 мин надо опрашивать не одну модель, а несколько. Модели обучаются на разных входных данных и, соответственно, обучаются разным паттернам. На практике так и получается, модели сигналят на разных свечах, вместе активируясь только в очевидных, предсказуемых местах и друг друга не перекрывают.
Подведем итог, теперь есть нечто, что можно запустить на реальном рынке и иметь сигналы «вверх/вниз» со средней отработкой. Уже веселее, но практического толку по-прежнему ноль.
Пара слов о реализации. У меня это работало на связке MQL5 плюс Keras. Бот запущенный в MetaTrader5 на каждой свече готовил данные для нейросети и через сокеты передавал скрипту на питоне, который по очереди опрашивал все модели и при прохождении ответом допустимого порога отправлял сигнал в Телеграм канал (UPDATE: сейчас уже есть работающее приложение для MetaTrade5).
Итак, схема работает, но применить нельзя. Сложить сигналы в какую-то стратегию не получалось. Главный недостаток — дискретность ответов. Ответ — это событие на которое надо как то реагировать — смотреть на рыночную ситуацию, думать права сеть или нет и т.д. На одной свече одна модель могла сигналить вверх, а другая вниз и какой верить? В итоге, родилась идея отказаться от порога прохождения ответа, а начать уважать каждый ответ сети, пусть и с низкой степенью уверенности. Если начать усреднять все ответы в единое общее мнение и это считать ответом сети, то ответ становится совершенно другого качества. В этом случае начинают складываться знания всех моделей, а это огромный объем совместного обучения.
Долго ли, коротко ли, но после всех переделок стал получать единые ответы нейросети на каждой свече выраженные в процентах ожидаемой отаботки от -100% до +100%. Знак отражает ожидаемое направление движения «вверх/вниз». Стало видно, что теперь смысл есть в каждом ответе. Оно работает! Я сам имею опыт трейдинга и видел как поведение сети на глазах становилось осмысленным. Иногда ее логика была понятна иногда нет, но всегда за ее ответами чувствовалось какое то свое, часто парадоксальное, видение рынка. В добавок к этому, выяснилось, что чем выше уверенность сети тем ближе к нужному сроку ожидаемая отработка и наоборот. Низкая уверенность как бы говорила «что будет через 15 минут не знаю, но общий тренд вверх».
С этого места, я понял, что пытаться все это формализовать в сигналы «купи/продай» это как микроскопом забивать гвозди. Нужен был какой то инструмент для визуализации сигналов нейросети — графического отображения на каждой свече уровня «уверенности». Широкий набор инструментов MQL5 позволил все это собрать в «Эксперт» для MetaTrader5. «Эксперт» через API получает ответы нейросети и занимается только отрисовкой. Вот пример его работы на BTCUSD M1:
Цветная область вверху — прогноз «вниз», область внизу — прогноз «вверх», толщина — степень уверенности.
На данном этапе качество прогноза не имеет значения, важно, что нейросеть демонстрирует вполне адекватное мнение о рыночной ситуации. Еще больше прокачать сеть всегда можно, главное, что это работает!
В итоге, на сегодняшний день есть Expert к MetaTrader5 с двумя видами прогнозов — кроткосрочным и долгосрочным. Постепенно накапливается статистика, есть обратная связь с трейдерами. Полученный результат вдохновляет на дальнейшую работу, теперь надо подбираться к заветным «buy/sell» командам. Сделать это можно существенно увеличив качество прогноза. Дальше вижу такой путь развития:
- Надо подготовить еще десяток прогнозов в промежутке между 15 и 60 минутами. Т.е. начать предсказывать «вверх/вниз» для 20, 25, 30, 35 минут и так до 60. Каждый прогноз, напомню, строится из ответов примерно 20 моделей.
- Имея такой объем информации на каждой минутной свече, можно и нужно анализировать ее другой нейросетью. Связь прогнозов между собой на разных временных отрезках может оказаться совсем нетривиальной, поэтому нейросеть тут будет уместна.
- Датасет для этой нейросети не будет так зашумнен как у ее младших товарищей, поэтому ее надо обучать не банальному «вверх/вниз», а предсказанию силы движения актива, а это уже прямой выход на «buy/sell».
Продолжение статьи здесь и здесь.
Приложение с работающей нейросетью тут.
Нейросети и трейдинг: Индикатор
UPDATE : Еще есть локальная версия. Нейросеть запускается на компьютере пользователя и ЛЮБЫЕ торговые пары.
Если никогда не пользовались MetaTrader 5 вот инструкция .
Что это
Это индикатор который рисует сигналы нейросети проекта NNTA.
Для работы индикатора требуется запустить Сервис который подключается к удаленному серверу и получает сигналы нейросети. Необходимость в этом сервисе связана с тем, что локально, на компьютере пользователя сложно запустить опрос моделей нейросети. Попытка сделать это была предпринята здесь .
Как установить
1. Файл индикатора кладем в папку Indicators.
2. Файл сервиса кладем в папку Services.
3. Идем в Сервис -> Настройки -> Советники.
⚠️ Ставим галочку Разрешить WebRequest для следующих URL
и добавляем url https://nnta.ru
4. Открываем окно Навигатора если оно уже не открыто (Ctrl+N), заходим в Сервисы. Видим там один сервис NN. Кликаем по нему правой кнопкой мышки и жмем Добавить сервис как на этой 👇 картинке.
5. Кликаем правой кнопкой мышки по добавленному сервису и выбираем Запустить.
Особенности работы
1. Работает только для торговых пар: EURUSD, GBPUSD, BTCUSD, ETHUSD, ADAUSD, BCHUSD, TRXUSD, XRPUSD.
2. ⚠️ Индикатор не привязан к таймфреймам. Есть время выхода сигнала и есть его длительность — это никак не связано с таймфреймами.
3. Пока нет алертов и прочих уведомлений. Будут в следующей версии.
4. «Сервис» работает только когда добавлен индикатор на график. Без индикатора сервис не запрашивает никакой информации и ничего не делает, а значит не потребляет ресурс .
Нейросетевой советник
Как считают оптимисты, нейросетевые советники — это будущее трейдинга. Крупные таймфреймы показывают ярко-выраженные трендовые участки. Цена не движется хаотично, так как график не подходит близко к прямой.
На рынке «Форекс» по-прежнему существуют свои алгоритмы. Как раз нейронные сети и смогут позволить еще ближе подойти к их пониманию.
Стоит ли скачать нейросетевого робота?
В идеале нейросетевой советник должен проходить полностью все стадии торгового процесса самостоятельно, совершенно без человеческого участия. Обычные роботы периодически подлежат оптимизации, нужно грамотно все настроить для прибыльного результата. Соединение достоинства автоматической торговли (соблюсти правила стратегии, холодный расчет) и обучаемости (этого лишены стандартные торговые программы Forex) позволит использование нейросетевых систем.
Несмотря на разнообразие роботов для электронного валютного рынка, все равно есть искушение делегировать компьютеру даже эту роль. Автоматический советник для «Форекс» на основе нейронной сети может сделать реальным такой вариант.
Как действует нейросетевой робот?
Нейросетевая торговая система на «Форекс» должна проводить точную классификацию событий, основываясь на входящих данных. Обычные советники критерий для выполнения такого подхода оставляют неизменным. В результате, при смене тенденции он продолжает торговать по старым правилам и успешно сливает весь Ваш счет на рынке Forex. Робот, основанный на нейронной сети, должен распознавать обновление курсов автоматически и меняет правила торговли без участия трейдера.
В настоящее время эффективность нейросетевых автоматических торговых систем применима для результатов технического анализа. С их помощью хорошо можно наладить индикаторные стратегии. Не стоит ожидать серьезных изменений в решении этого вопроса до момента создания реального искусственного интеллекта.
Base — true пишем файл с базой векторов, false торгуем с классификацией. Обязательно сначала нужно протестировать эксперта с Base = true, и только потом тестировать с Base = false.
buy_threshold = 0.6 порог на все Buy позиции. Если вероятность покупки выше этого порога, то эксперт покупает. Этот параметр относится к тестированию с Base = false.
sell_threshold = 0.6 аналогично параметру buy_threshold.
inverse_position_open_? = true — Если вероятность сделки на покупку очень мала то значит вероятность продажи очень велика. Этот параметр позволяет открывать сделки когда возникают такие ситуации.
invers_buy_threshold=0.3 порог, когда вероятность прибыльной Buy позиции меньше то входим на Sell
invers_sell_threshold=0.3 аналогично invers_buy_threshold.
График тестирования без применения метода k-ближайших соседей
Источник https://habr.com/ru/post/494964/
Источник https://www.mql5.com/ru/blogs/post/749068
Источник https://tradexperts.ru/torgovye-roboty-foreks/nejrosetevoj-torgovyj-robot-knn