Биткойн-торговый бот, часть 5: руководство по интеграции технических индикаторов в нашего торгового бота, чтобы он научился принимать более эффективные торговые решения.

Самые продвинутые планы развития науки о данных, которые вы когда-либо видели! Поставляется с тысячами бесплатных учебных ресурсов и интеграцией ChatGPT! https://aigents.co/learn/roadmaps/intro

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

В моих предыдущих уроках мы уже создали пользовательскую среду Python для торговли биткойнами; для этого мы написали агент обучения с подкреплением. Кроме того, мы протестировали три разные архитектуры (Dense, CNN, LSTM) и сравнили их производительность, продолжительность обучения и проверили их рентабельность. Поэтому я подумал, что если мы сможем создать торгового бота, совершающего несколько прибыльных сделок только по Price Action, может быть, мы сможем использовать индикаторы, чтобы повысить точность и прибыльность нашего бота, интегрировав индикаторы? Давай сделаем это! Я подумал, что, наверное, нет ни одного трейдера или инвестора, который бы совершал сделки вслепую, не проведя технического или фундаментального анализа; более или менее все используют технические индикаторы.

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

В ближайшее время я расскажу о каждом из приведенных выше технических индикаторов. Для их реализации воспользуемся уже готовой библиотекой ta Python, используемой для расчета партии индикаторов. Если нам удастся использовать эти индикаторы с нашим торговым агентом RL Bitcoin, возможно, мы попробуем больше из них в будущем.

Скользящая средняя (MA)

MA — или «простая скользящая средняя» (SMA) — это индикатор, привыкший определять направление текущего рыночного тренда, не вмешиваясь в краткосрочные рыночные всплески. Индикатор скользящей средней объединяет рыночные точки выбранного инструмента за определенный период времени. Он делит его на количество точек таймфрейма, чтобы представить нам направление линии тренда.

Используемые данные зависят от длины MA. Например, для 200 MA требуется историческая информация за 200 дней. Используя индикатор MA, вы сможете изучать уровни поддержки и сопротивления и видеть предыдущее поведение цены (историю рынка). Это означает, что вы сможете определить возможные будущие ценовые модели.

Я написал следующую функцию, которую мы будем использовать для построения графиков наших индикаторов с барами OHCL и Matplotlib:

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

Мы можем добавить все наши 3 индикатора SMA в наш фрейм данных и построить их с помощью следующего простого фрагмента кода:

После расчета индикаторов для всего нашего набора данных и построения графика для последних 720 баров он выглядит следующим образом:

Про простую скользящую среднюю больше нечего объяснять. В интернете много информации.

Полосы Боллинджера

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

Мы получим следующие результаты:

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

Параболический стоп и реверс (Parabolic SAR)

Параболический SAR является широко используемым техническим индикатором для определения направления рынка, но он обращает на себя внимание именно в тот момент, когда направление рынка меняется. Этот индикатор также можно назвать «системой стопа и разворота», параболический SAR был разработан Дж. Уэллсом Уайлдером-младшим. — создатель индекса относительной силы (RSI).

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

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

Но если мы хотим изобразить этот индикатор точками, а не одной линией, мы должны изменить его в функции Plot_OHCL следующим образом:

Следующим:

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

Схождение-расхождение скользящих средних (MACD)

Схождение-расхождение скользящих средних (MACD) — это индикатор импульса, следующий за трендом, который показывает корреляцию между двумя скользящими средними рыночной цены. MACD по умолчанию рассчитывается путем вычитания 26-периодной экспоненциальной скользящей средней (EMA) из 12-периодной EMA.

В результате упомянутого расчета мы получаем линию MACD. Девятидневная EMA MACD — это «сигнальная линия», которая строится поверх линии MACD и может действовать как триггер для сигналов покупки и продажи. Трейдеры могут сделать ордер на покупку, как только MACD пересечет сигнальную линию, и продать или продать ценную бумагу, как только MACD пересечет сигнальную линию. Индикаторы схождения-расхождения скользящих средних (MACD) часто интерпретируются несколькими способами. Однако наиболее распространенными методами являются дивергенции, пересечения и быстрые подъемы/падения.

  • MACD рассчитывается путем вычитания 26-периодной экспоненциальной скользящей средней (EMA) из 12-периодной EMA.
  • MACD подает технические сигналы, когда пересекает выше (для покупки) или ниже (для продажи) свою сигнальную линию;
  • Скорость пересечения дополнительно воспринимается как показатель того, что рынок перекуплен или перепродан;
  • MACD помогает инвесторам понять, усиливается или ослабевает оптимистическое или пессимистическое движение цены.

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

Этот индикатор будет выглядеть не так информативно, как предыдущие, но наши Нейронные Сети обнаружат это сами:

Индекс относительной силы (RSI)

Индекс относительной силы (RSI) — это индикатор импульса, используемый в техническом анализе, который измеряет величину недавних рыночных изменений для оценки условий перекупленности или перепроданности в рамках текущей рыночной цены. RSI отображается в виде осциллятора (линейный график, который перемещается между двумя экстремумами) и может считываться в диапазоне от 0 до 100. Индикатор был первоначально разработан Дж. Уэллсом Уайлдером-младшим. и представлен в его основополагающей книге 1978 года «Новые концепции технических торговых систем». Традиционная интерпретация и использование RSI измеряют, что значения >70 указывают на то, что ценная бумага становится перекупленной или переоцененной, и ее стоимость настроена на разворот тренда или коррекционный откат. Значение 30‹ указывает на состояние перепроданности или недооцененности.

  • RSI — вирусный и известный индикатор импульсного осциллятора, разработанный в 1978 году;
  • RSI предоставляет трейдерам технические сигналы относительно оптимистичного и пессимистического импульса рынка, и он часто располагается в нижней части ценового графика;
  • Актив обычно считается перекупленным, если RSI выше 70%, а перепродан ниже 30%.

Это последний индикатор, который мы будем использовать с нашим трейдером, и построить этот индикатор так же просто, как и раньше:

Приведенный выше код даст нам следующие результаты:

Как вы можете видеть на графике выше, индикатор RSI может оставаться в области перекупленности (> 70%) в течение длительных периодов времени, пока акции находятся в восходящем тренде. Индикатор также может оставаться в зоне перепроданности (‹ 30%) в течение длительного времени, когда акции находятся в нисходящем тренде.

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

До этого момента мы рассмотрели все пять индикаторов один за другим, но мы не будем использовать эти индикаторы по отдельности. Мы будем обрабатывать эти индикаторы вместе с нашей рыночной информацией и информацией о заказах. Мы отправим все эти данные нашему агенту Bitcoin Reinforcement Learning, чтобы решить, какие действия он должен предпринять. Но прежде чем сделать это, давайте посмотрим, как выглядят наши индикаторы, когда все они нанесены на один график.

Чтобы построить этот график, я написал новую функцию под названием Plot_OHCL, которую я вставил в utils.py, но для основного построения я написал еще один скрипт под названием indicators.py, который мы можем использовать для построения одного графика всех наших индикаторов с барами OHCL.

Это наша функция Plot_OHCL в функции построения графика сценария utils.py:

И это наш основной код для построения индикаторов:

После того, как он запустится без каких-либо ошибок, вы должны увидеть следующую диаграмму:

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

Внедрение индикаторов в наш код агента RL

Мы уже рассмотрели, как внедрить эти индикаторы в наш набор данных и как мы можем их визуализировать. Проделываем все те же действия с числами Open, High, Close и т.д. Итак, мы вкратце рассмотрели пять индикаторов с девятью параметрами: три по SMA, три по полосам Боллинджера и по одному на каждый из индикаторов PSAR, MACD, RSI. Это означает, что нам нужно изменить входное состояние нашей модели, прежде чем у нее было десять входных функций, сейчас будет 10 + 9 функций:

Поскольку эти индикаторы уже рассчитаны и вставлены в наш фрейм данных, их довольно просто использовать. В основном нам нужно изменить функции reset и _next_observation из класса CustomEnv.

В месте __init__ мы определяем новый список очередей:

self.indicators_history = deque(maxlen=self.lookback_window_size)

Где мы будем хранить информацию о наших индикаторах с каждого шага. Раньше мы обрабатывали только информацию self.market_history, а затем объединяли ее с self.orders_history, теперь нам нужно добавить self.indicators_history ко всему процессу.

Мы модифицируем нашу функцию reset следующим образом:

А также нам нужно изменить нашу функцию _next_observation:

При виде этого кода у вас должен возникнуть один вопрос: почему в двух строках вместо деления на self.normalize_value я делю на 400 и 100. Проще наглядно показать ответ, чем объяснять.

Если вы запустите скрипт indicators.py для всего набора данных, вы увидите следующие графики:

Хотя график кажется значительно сжатым, поскольку он содержит множество таймфреймов, глядя на нижний подграфик, вы можете увидеть, что наша кривая MACD имеет максимальное и минимальное пики между +-300, а наш RSI колеблется между 0–100. Я решил нормализовать эти значения, разделив их на 400 и 100 соответственно.

Обучение и тестирование нашей модели

В отличие от моего предыдущего руководства, где мы тестировали лучшую архитектуру модели (Dense, CNN или LSTM), теперь нам не нужно тестировать все эти модели. Мы будем обучать ту же модель Dense с теми же параметрами и на том же количестве шагов обучения. После обучения мы сравним результаты, полученные при запуске этой модели, с тем же невидимым набором тестовых данных:

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

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

Как видите, параметры точно такие же, как и в моей серии предыдущих туториалов, в результате наше обучение заняло около 16 часов. Но на самом деле мы здесь не об обучении, а о тестировании, поэтому я запустил следующий код, чтобы протестировать нашу обученную модель:

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

Если бы мы сравнили эти результаты с предыдущим уроком, следующие результаты:

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

Таким образом, наш бот получил около 8% прибыли от невидимых данных, торгуя биткойнами в идеальных условиях; это фантастические результаты!

Если мы хотим увидеть, какие заказы делает наш бот со всеми индикаторами и т. д., мы должны изменить следующие Show_reward=True, Show_indicators=True, visualize=True параметры, и при запуске того же кода тестирования мы можем увидеть аналогичные результаты:

Заключение:

В настоящее время мы видим, что наш торговый агент Биткойн показывает некоторые положительные результаты, которых мы можем достичь. Конечно, еще многое можно сделать для улучшения работы этих агентов. Однако это требует много усилий и времени для разработки и проведения экспериментов с этими изменениями. Каждый новый туториал на эту тему отнимает у меня все больше и больше времени, и я ничего не могу сделать. Единственная мотивация — увидеть положительные результаты, и я доказал, что искусственный интеллект можно использовать при прибыльной торговле биткойнами! Включая этот учебник и предыдущие, которые у нас были в прошлом, мы преодолели множество проблем.

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

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

Спасибо за прочтение! Предстоит еще много работы. Подпишитесь и поставьте лайк моему видео на YouTube, поделитесь этим уроком, и вы будете уведомлены, когда другой урок увидит свет! Как всегда, весь код, приведенный в этом руководстве, можно найти на моей странице GitHub и использовать его можно бесплатно! Увидимся в следующей части.

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

Первоначально опубликовано на https://pylessons.com/RL-BTC-BOT-indicators

Больше контента на plainenglish.io