Встроенная поддержка Python

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

Последний пункт позволяет обеспечить взаимодействие с любым программным обеспечением, API которого есть в формате DLL. Некоторые разработчики используют этот способ для подключения к промышленным распределенным СУБД (вместо встроенной SQLite), математическим пакетам вроде R или MATLAB и даже другим языкам программирования.

Одним из наиболее популярных языков программирования последнего времени стал Python. Его особенностью является компактное ядро, которое дополняется пакетами — готовыми сборниками скриптов для построения прикладных решений. Именно богатство выбора и функционал пакетов полюбились трейдерам для фундаментального анализа рынка (статистических вычислений, визуализации данных) и проверки торговых гипотез, включая машинное обучение.

Следуя этой тенденции, компания MQ встроила в 2019 году поддержку Python в MQL5. Такая более тесная интеграция "прямо из коробки" позволяет полностью перенести технический анализ и торговые алгоритмы в среду Python.

С технической точки зрения интеграция достигается за счет установки в Python пакета "MetaTrader5", который организует межпроцессное взаимодействие с терминалом (на момент написания книги — через механизм ipykernel/RPC).

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

Вместе с тем, интеграция с Python имеет и некоторые ограничения. В частности, в Python невозможно реализовать обработку событий, таких как OnTick, OnBookEvent и других. Из-за этого для проверки новых цен необходимо использовать бесконечный цикл, примерно также, как мы были вынуждены делать в скриптах MQL5. Столь же затруднен и анализ исполнения торговых приказов: в отсутствие OnTradeTransaction потребуется больше кода, чтобы узнать, была ли позиция закрыта полностью или частично. Для обхода этих ограничений можно организовать взаимодействие скрипта Python и MQL5, например, через сокеты. На сайте mql5.com можно найти статьи с примерами реализации такого "моста".

Таким образом, представляется, что наиболее органично применять Python в связке с MetaTrader 5 для задач машинного обучения, в которых происходит анализ котировок, тиков или истории торгового счета. К сожалению, получить показания индикаторов в Python нельзя.