Skip to content

Документация плагина MetaTrader 5

Этот документ описывает текущий Expert Advisor TMPro.mq5 для MetaTrader 5. EA получает сигналы Trading Monitor Pro из удаленного SignalR connector или из локального Named Pipe, разбирает нормализованный KV-формат и выполняет поддерживаемые торговые команды через торговый API MT5.

Исходник, использованный для документа:

text
C:\Users\jshapen\AppData\Roaming\MetaQuotes\Terminal\F762D69EEEA9B4430D7F17C82167C844\MQL5\Experts\TMPro.mq5

Состав пакета

MT5-пакет должен содержать:

  • TMPro.mq5 в каталоге MQL5\Experts;
  • скомпилированный TMPro.ex5 после сборки в MetaEditor;
  • SignalR.Client.Connector.Robust.V5.patched.dll в каталоге MQL5\Libraries.

EA импортирует Trade/Trade.mqh, SignalR connector DLL и kernel32.dll для опционального локального источника через Named Pipe.

Требования

  • MetaTrader 5 64-bit на Windows.
  • Разрешенные DLL imports в MetaTrader 5 и в настройках EA.
  • Включенный Algo Trading.
  • Действующий session token Trading Monitor Pro для удаленного режима.
  • Сетевой доступ к https://tradingmonitor.pro или настроенному SignalR-серверу.
  • Символы брокера, совпадающие со значениями входящего instrument.

Установка

  1. В MetaTrader 5 откройте File > Open Data Folder.

  2. Скопируйте TMPro.mq5 в:

    text
    MQL5\Experts
  3. Скопируйте SignalR.Client.Connector.Robust.V5.patched.dll в:

    text
    MQL5\Libraries
  4. Откройте MetaEditor и скомпилируйте TMPro.mq5.

  5. В MetaTrader 5 откройте Tools > Options > Expert Advisors.

  6. Включите Allow DLL imports.

  7. Добавьте TMPro на график и включите Algo Trading.

Входные параметры

ПараметрПо умолчаниюНазначение
UseRemoteSourcetrueВключает удаленный источник Trading Monitor Pro через SignalR.
UseLocalSourcefalseВключает локальный источник через Named Pipe.
InpSignalRUrlhttps://tradingmonitor.proURL удаленного SignalR-сервера.
InpSessionTokenпустоSession token. Пустое значение позволяет connector использовать Credential Manager.
InpInstanceIdпустоНеобязательный ID экземпляра терминала для маршрутизации сигналов.
InpVolumeMultiplier1.0Умножает quantity для order.submit и position.reduce.
InpPipePath\\.\pipe\MT5SignalPipeПуть локального Named Pipe.
InpTimerMS10Интервал опроса таймера в миллисекундах.

Должен быть включен хотя бы один источник. Если UseRemoteSource и UseLocalSource одновременно равны false, инициализация завершится ошибкой.

Контракт DLL import

TMPro.mq5 импортирует следующие функции:

mql5
#import "SignalR.Client.Connector.Robust.V5.patched.dll"
bool InitFull(string url, string sessionToken, string clientType, string machineId, string clientInstanceId, string mode);
void Deinit();
void Disconnect();
bool IsConnected();
int  GetConnectorStateCode();
void GetConnectorMetrics(string &buffer, int bufferSize);
bool GetNextSignal(string &buffer, int bufferSize);
void GetSignalRError(string &buffer, int bufferSize);
void GetSignalRStatus(string &buffer, int bufferSize);
#import

Удаленная инициализация выполняется так:

mql5
InitFull(InpSignalRUrl, InpSessionToken, "MetaTrader", "", InpInstanceId, "Local");

В OnDeinit EA вызывает Disconnect() и Deinit().

Рабочий цикл

При запуске EA инициализирует выбранные источники, синхронизирует внутренние состояния инструментов с терминалом и запускает EventSetMillisecondTimer(InpTimerMS).

На каждом тике таймера он:

  • опрашивает состояние, статус, метрики и ошибки connector;
  • забирает удаленные сигналы через GetNextSignal;
  • опрашивает локальный Named Pipe, если он включен;
  • разбирает KV-сигналы через TryParseKvSignal;
  • отклоняет истекшие, повторные, нецелевые по платформе и нецелевые по instance сигналы;
  • отправляет принятые команды в dispatcher;
  • удаляет старые записи дедупликации через один час.

Формат сигнала

Удаленный connector возвращает EA нормализованные KV-строки, например:

text
v=1|signalId=mt5-order-001|ts=1777000000000|ttlMs=300000|expiresAt=1777000300000|platform=mt5|instanceId=mt5-terminal-01|type=order|cmd=submit|instrument=EURUSD|side=buy|executionType=market|quantity=0.10|stopLossTicks=100|takeProfitTicks=150

Серверная JSON-схема остается публичным API-контрактом, но TMPro.mq5 обрабатывает нормализованное KV-представление. Информационный текст приходит как infoB64; OHLC значения приходят как ohlcO, ohlcH, ohlcL и ohlcC.

Маршрутизация сигналов

EA принимает сигнал, если:

  • v равно 1;
  • platform адресован MT5: mt5, any или список через запятую, содержащий одно из этих значений;
  • instanceId пустой или точно совпадает с InpInstanceId;
  • expiresAt пустой или еще не наступил;
  • signalId не обрабатывался в течение последнего часа.

Поддерживаемые команды

system

  • pause
  • resume
  • info

pause блокирует новые команды входа. resume восстанавливает выполнение. info показывает MetaTrader message box с декодированным текстом и/или OHLC значениями.

order

  • submit

Текущее live-исполнение поддерживает:

  • market
  • limit
  • stop

stop_limit входит в общую схему, но текущий MT5 dispatcher логирует его как unsupported_live_execution_type.

Обязательные поля сигнала:

  • instrument
  • side: buy или sell
  • executionType
  • quantity

EA проверяет торговые разрешения счета, терминала и MQL, выбирает символ, отклоняет disabled или close-only символы, нормализует объем по лимитам и шагу символа, а цены - по размеру тика.

position

  • close
  • reduce
  • protect
  • close_all
  • flatten_now

position.protect изменяет SL/TP текущей позиции. Защита в тиках считается от POSITION_PRICE_OPEN. position.flatten_now удаляет pending-ордера по указанному символу и закрывает позицию по этому символу.

risk

  • block_instrument
  • allow_instrument
  • flatten_now

risk.block_instrument запрещает новые входы по символу. risk.flatten_now переводит EA в состояние pause, удаляет все pending-ордера и закрывает все позиции.

Правила защиты

  • stopLoss и takeProfit задаются как абсолютные цены.
  • stopLossTicks и takeProfitTicks задаются как расстояние в тиках символа.
  • Абсолютные цены имеют приоритет над расстояниями в тиках.
  • Для market-ордеров защита в тиках применяется после появления позиции.
  • Для limit и stop ордеров SL/TP рассчитываются от цены входа.

Диагностика

  • Если EA не инициализируется, убедитесь, что включен хотя бы один источник.
  • Если connector не запускается, проверьте SignalR.Client.Connector.Robust.V5.patched.dll в MQL5\Libraries, разрешение DLL imports, InpSignalRUrl, InpSessionToken и блокировку скачанных файлов Windows.
  • Если удаленные сигналы не приходят, проверьте platform, instanceId, состояние connector, серверную маршрутизацию и лог Experts.
  • Если локальные сигналы не приходят, проверьте InpPipePath и процесс, который пишет в Named Pipe.
  • Если сделки отклоняются, проверьте Algo Trading, торговые разрешения счета, название символа, режим торговли символа, лимиты лота, шаг объема, размер тика и состояние торговой сессии брокера.
  • Если при тестировании игнорируются повторные сигналы, измените signalId или дождитесь истечения часового окна дедупликации.

Связанные файлы

  • NinjaTrader8/signal_schema.ru.md
  • NinjaTrader8/signal_examples.json
  • NinjaTrader8.SingleDll/TMPro.NT8.DirectClient/TMProDirectClient.cs

Released under the MIT License.