Торговля на фондовом рынке может быть сложным процессом, но с развитием ИИ и машинного обучения его можно вывести на новый уровень сложности. В этом сообщении блога мы рассмотрим, как улучшить классический торговый алгоритм с помощью глубокого обучения с подкреплением. Соединив Python и MQL5 с помощью сокетов, мы разработаем торговый алгоритм и реализуем сетевой агент глубокого Q, который будет постоянно изучать и оптимизировать гиперпараметры алгоритма. Эта комбинация приведет к созданию торговой системы, способной адаптироваться к изменяющимся рыночным условиям и со временем повышать свою эффективность.

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

Оглавление:

  1. Введение в соединение Python-MQL5
  2. Классический торговый алгоритм на MQL5
  3. Агент обучения с подкреплением в Python
  4. Советы по улучшению результатов.

Введение в соединение Python-MQL5

В этом разделе мы проведем вас через процесс подключения Python и MQL5 с помощью сокетов. Мы будем следовать инструкциям из конкретной ссылки и укажем, какие методы оказались эффективными, а какие нет. GitHub-репозиторий проекта содержит две папки: одну для кода Python, реализующего сервер сокетов, и другую для файлов MQL5, включающих библиотеку и код, подключающийся к сокету.

Стоит отметить, что код заявлен как совместимый как с MQL4, так и с MQL5, но автор тестировал его только на MQL5.

Классический алгоритм торговли на MQL5

Классический алгоритм торговли основан на самой высокой и самой низкой цене свечей. Он вычисляет самую высокую и самую низкую из каждой из последних n свечей. Если новая цена пересекает максимальную, исполняется ордер на покупку. Если он проходит минимум, исполняется ордер на продажу. При исполнении ордера стоп-лосс устанавливается посередине между самой высокой и самой низкой ценой. Количество свечей, используемых для расчета стоп-лосса и лимитной цены (n), определяется агентом RL. Например, если свечи такие, как показано ниже, ордер на покупку будет выполнен 6 января. Код этого алгоритма можно найти здесь.

Код MQL5 отвечает за отправку состояния последнего шага, состояния нового шага, примененного действия и полученного вознаграждения в среду Python. Информация о состоянии включает в себя стоп-лосс контракта, цену входа, цену закрытия, а также самые высокие и самые низкие значения за последние 5, 10, 20, 40, 80 и 120 свечей (размерность = 15). Действие относится к выбранному значению n (n может быть равно 10, 20 или 40). Вознаграждение дается, если контракт остановлен, и представляет собой прибыль от контракта.

При каждом взаимодействии между Python и MQL5 вышеупомянутые четыре части информации отправляются из MQL5 в Python, в то время как из Python в MQL5 отправляется только значение n.

Как было сказано ранее, все коды находятся здесь.

Агент обучения с подкреплением в Python

Агент Reinforcement Learning (RL) прост в реализации и создаст сеть Deep Q, используя 15 функций. Q-Network имеет 15 входов, которые описаны в предыдущем разделе, и 3 выхода, которые соответствуют трем действиям, которые агент может предпринять в мире (установив n равным 10, 20 или 40).

На следующем рисунке показана вся идея связанного кода:

Файл «socket_handling» использует многопоточность для облегчения взаимодействия с кодом Python. Он заполняет «input_list», который можно очистить, когда коду выполнения потребуется получить к нему доступ. Значения «модель» и «эпсилон» (эпсилон-жадный) устанавливаются в файле «run.py».

Файл «reinforcement_learning» содержит три класса: «DataPrepare», «NeuralNetwork» и «ReinforcementLearningAgent». Сеть представляет собой многослойный персептрон (MLP) с четырьмя слоями. «ReinforcementLearningAgent» использует нейронную сеть для генерации Q-значений, и действия выполняются на основе эпсилон-жадной политики, при этом эпсилон затухает со временем.

Советы по улучшению результатов

Вот несколько советов по улучшению результатов вашего агента RL:

  • Визуализируйте вознаграждение и функцию потерь нейронной сети с течением времени, чтобы лучше понять процесс обучения.
  • Помните о расчете q-значений. Важно удерживать эти значения в разумных пределах (например, от -10 до 10), поскольку большие значения могут затруднить обучение сети.
  • Рассмотрите возможность использования оптимизатора RMSprop, поскольку в некоторых статьях было показано, что он эффективен (часто это хороший выбор, но не всегда).
  • Если вы испытываете трудности, попробуйте настроить скорость обучения, размер памяти алгоритма Q-обучения и график затухания эпсилон. Главное экспериментировать!

И последнее замечание: во многих задачах я видел такую ​​схему изменения потерь:

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

Справочник