Appearance
Документация плагина 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.
Установка
В MetaTrader 5 откройте
File > Open Data Folder.Скопируйте
TMPro.mq5в:textMQL5\ExpertsСкопируйте
SignalR.Client.Connector.Robust.V5.patched.dllв:textMQL5\LibrariesОткройте MetaEditor и скомпилируйте
TMPro.mq5.В MetaTrader 5 откройте
Tools > Options > Expert Advisors.Включите
Allow DLL imports.Добавьте
TMProна график и включите Algo Trading.
Входные параметры
| Параметр | По умолчанию | Назначение |
|---|---|---|
UseRemoteSource | true | Включает удаленный источник Trading Monitor Pro через SignalR. |
UseLocalSource | false | Включает локальный источник через Named Pipe. |
InpSignalRUrl | https://tradingmonitor.pro | URL удаленного SignalR-сервера. |
InpSessionToken | пусто | Session token. Пустое значение позволяет connector использовать Credential Manager. |
InpInstanceId | пусто | Необязательный ID экземпляра терминала для маршрутизации сигналов. |
InpVolumeMultiplier | 1.0 | Умножает quantity для order.submit и position.reduce. |
InpPipePath | \\.\pipe\MT5SignalPipe | Путь локального Named Pipe. |
InpTimerMS | 10 | Интервал опроса таймера в миллисекундах. |
Должен быть включен хотя бы один источник. Если 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
pauseresumeinfo
pause блокирует новые команды входа. resume восстанавливает выполнение. info показывает MetaTrader message box с декодированным текстом и/или OHLC значениями.
order
submit
Текущее live-исполнение поддерживает:
marketlimitstop
stop_limit входит в общую схему, но текущий MT5 dispatcher логирует его как unsupported_live_execution_type.
Обязательные поля сигнала:
instrumentside:buyилиsellexecutionTypequantity
EA проверяет торговые разрешения счета, терминала и MQL, выбирает символ, отклоняет disabled или close-only символы, нормализует объем по лимитам и шагу символа, а цены - по размеру тика.
position
closereduceprotectclose_allflatten_now
position.protect изменяет SL/TP текущей позиции. Защита в тиках считается от POSITION_PRICE_OPEN. position.flatten_now удаляет pending-ордера по указанному символу и закрывает позицию по этому символу.
risk
block_instrumentallow_instrumentflatten_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.mdNinjaTrader8/signal_examples.jsonNinjaTrader8.SingleDll/TMPro.NT8.DirectClient/TMProDirectClient.cs