Торговый бот: MQL5 или Python — выбор схемы и проверка ошибок
MQL5 и Python позволяют автоматизировать заранее определённый процесс, но язык сам не создаёт прибыльное правило. Сначала выберите доступ к счёту, источник данных, частоту решений и способ наблюдать за ошибками. Короткий скрипт не подтверждает правильность исполнения.
Сравнивайте схему работы, а не названия языков
Советник MQL5 выполняется в терминале MT5. Python может работать через официальный пакет MetaTrader5, через отдельный API брокера либо лишь анализировать исторические файлы. Пакет MetaTrader5 связывается с терминалом, а не напрямую со всеми брокерскими серверами. Страница пакета на PyPI показывает колёса Windows x86-64 для текущего выпуска; это ограничение опубликованной сборки пакета, а не всего языка Python.
| Схема | Зависимости | Первая проверка |
|---|---|---|
| Советник MQL5 | Терминал, код, параметры, счёт | Версия и ответ сервера |
| Python + MT5 | Процесс Python, терминал и связь | Нужный счёт после подключения |
| Python + API брокера | Авторизация, адаптер, лимиты | Единицы символа и права |
| Python для анализа, MQL5 для исполнения | Совпадение правил и данных | Те же граничные входы |
Справка initialize() допускает автоматический поиск и запуск терминала, а без указания номера счёта может использоваться последний счёт. Задайте путь установки, проверьте номер, сервер, среду demo/live и нужный символ. Успех подключения не говорит, исполнился ли предыдущий приказ.
Советник MQL5: сильная интеграция с условиями
MQL5 предоставляет события терминала, торговые функции и тестер. Тестер работает по выбранным данным и модели, а не воспроизводит всю историю реального исполнения. ONNX-модель можно запускать средствами MQL5, так что обучение модели в Python не всегда означает постоянный процесс Python при исполнении. При переносе сверяйте форму входов, предобработку и смысл выхода модели.
Согласно официальной справке, если событие NewTick уже стоит в очереди или обрабатывается, ещё одно такое событие не добавляется. Следовательно, OnTick() не гарантирует отдельный вызов для каждого поступившего тика. Измеряйте нагрузку и задержку в своей конфигурации; нет универсального обещания миллисекундного отклика или превосходства языка при живом исполнении.
Python не отменяет проверки данных и адаптера
Библиотеки Python помогают исследованию и построению моделей. При подключении брокера всё равно нужны его обозначения символов, размер контракта, единицы количества, торговые часы, правила приказов и права доступа. Храните версии зависимостей и конфигурацию. Оригинальный репозиторий ib_insync помечен архивным с 14 марта 2024 года; это не доказывает, что старый код не работает, но старый учебник не подтверждает текущую поддержку выбранной интеграции.
Не записывайте секреты в публичный код или обычные логи. Для проверки аналитической формулы достаточно данных без права отправлять приказ. Установка библиотеки не заменяет проверку конкретной компании брокера и продукта.
Два разных гибридных процесса
В первом варианте Python создаёт модель и тесты, а проверенное правило исполняет советник MQL5; тогда Python не обязан оставаться включённым, если вся необходимая логика перенесена. Во втором Python непрерывно отправляет запросы через терминал; оба процесса, свежесть данных и состояние счёта нужно наблюдать одновременно. Виртуальный хостинг MetaQuotes переносит среду советника, но не служит универсальным рабочим столом для произвольного внешнего процесса Python.
Документированная функция order_send() отправляет запрос и возвращает структуру результата. Закрытие позиции требует подходящего действия и идентификатора позиции; не следует предполагать универсальную функцию position_close() в официальном пакете. При потерянном ответе сначала сверяйте активные приказы, сделки и позиции, затем принимайте решение о повторе.
Вымышленный случай потерянного ответа. Система запрашивает покупку 0,10 лота. Приказ полностью исполняется, но ответ теряется; слепой повтор тоже исполняется, так что вместо 0,10 возникает 0,20 лота. При явно принятом контракте EUR/USD 100 000 EUR на лот, пункте 0,0001 и счёте USD чувствительность меняется с 1 до 2 USD за пункт. Это условный сценарий с двумя исполнениями, не предположение, что каждый неизвестный запрос исполнен.
Отрицание сравнения может принять пропущенные данные
На узком экране прокрутите диаграмму вбок.
x = float('nan'), вымышленный порог 10. Отсутствующее значение блокирует правило в предложенной реализации; для массивов и других типов требуются отдельные проверки.Для скалярного float('nan') сравнение x <= 10 ложно, поэтому not(x <= 10) истинно. Но x > 10 тоже ложно. Для конечных чисел эти две формулировки часто выглядят равносильными, а для NaN — нет. Отдельная проверка math.isfinite(x) and x > 10 не пропускает этот вход. Не заменяйте пропуск нулём без отдельного правила и записи такого решения.
Сверяйте границы правила и исполнения
Вымышленная разница входа. Сигнал известен после закрытия свечи по 1,1000; модель A покупает по этой цене, модель B по более позднему Ask 1,1003. Разница составляет три пункта EUR/USD при размере пункта 0,0001. Вклад могут иметь время, движение рынка и сторона котировки; всю разницу нельзя назвать «накладными расходами Python» или спредом. Сопоставляйте отметки сигнала, запрос, объём, исполнение и издержки по отдельности.
Граничный тест Python также показывает, что 0.1 + 0.2 даёт 0.30000000000000004, а не точный объект 0.3. Decimal('0.1') + Decimal('0.2') в этой модели равен Decimal('0.3'); целые единицы дают 1 + 2 = 3. Определите единицу и правило округления до переноса логики. В тест включайте значения ниже порога, ровно на пороге, выше него, пропущенные и бесконечные. Массивы NumPy и MQL5 проверяйте отдельно — эти примеры не исполняют за них код.
Выбирайте по воспроизводимому требованию
Запишите счёт и API, данные, момент решения, необходимые библиотеки, систему размещения и способ контроля. Небольшой прототип может только читать данные и писать сигналы в журнал, без торговых прав. Если важна задержка, измерьте её в конкретной схеме; интервал свечи не доказывает, что задержка всегда безразлична.
Сравните расходы и способность поддерживать конфигурацию. Длина файла, время первого запуска и название языка не устанавливают будущую надёжность или доходность. Если нужное действие проще выполнить вручную на демо, зафиксируйте это как альтернативу до автоматизации.
Порядок следующего теста
- Зафиксируйте небольшое правило, единицы, доступность входов и ожидаемую границу.
- Укажите полный путь терминала или API, номер и тип счёта, символ и права; аналитический тест оставьте без права отправлять приказ.
- Проверьте на демо отказ, неполное исполнение, пропуск данных, перезапуск и потерю ответа.
- После неопределённого ответа сверяйте историю, активные приказы и позиции до любого повторения.
- Сопоставляйте отдельные сигналы и исполнения до агрегирования прибыли теста.
Проверьте понимание
Что возвращает not(x <= 10) для скалярного Python float NaN?
Ответ и объяснения без JavaScript
Правильный ответ: True, хотя данных нет.
False, поскольку значение отсутствует.
Сравнение x <= 10 ложно; его отрицание становится истинным.
True, хотя данных нет.
Верно. Перед правилом нужна независимая проверка наличия и конечности.
NaN автоматически превращается в 0.
Это выражение не выполняет такой замены.
Вопросы и ответы
Подключается ли официальный пакет MetaTrader5 прямо к любому серверу брокера?
Нет. Он связывается с установленным терминалом MT5; затем нужно проверить счёт и сервер.
Означает ли успешный order_send() исполнение сделки?
Нет. Проверяйте результат запроса и фактические приказы, сделки и позиции; при потерянном ответе не повторяйте вслепую.
Можно ли запустить произвольный Python-скрипт на виртуальном хостинге MetaQuotes?
Справка описывает перенос среды терминала и советников, а не универсальный рабочий стол для внешнего процесса.
Источники и пределы применения
- MetaQuotes — Python Integration
Связь пакета Python с терминалом.
- MetaQuotes — initialize()
Путь терминала, последний счёт и проверка подключения.
- MetaQuotes — order_send()
Структура запроса и результата, идентификатор позиции.
- MetaQuotes — OnTick
Очередь NewTick и отсутствие повторного события во время обработки.
- MetaQuotes — ONNX models
Исполнение модели в MQL5.
- MetaQuotes — Virtual Hosting Migration
Состав среды, переносимой на сервер.
- Python — Expressions
Сравнения float NaN.
- Python — math.isfinite
Проверка конечности числа.
- Python — Floating-Point Arithmetic
Представление 0.1 и пределы точности.
- PyPI — MetaTrader5
Опубликованные файлы Windows x86-64 текущего выпуска.
- GitHub — original ib_insync repository
Архивный статус оригинального репозитория, не оценка всех ответвлений.
Функции MetaQuotes, Python и отдельных API зависят от продукта, счёта, версии и доступных прав. Цены, объёмы и результаты примеров вымышлены; материал не является инвестиционной рекомендацией.