Appearance
MetaTrader 5
Этот раздел описывает plugin TMPro для MetaTrader 5. В документации он рассматривается как одна пользовательская сущность: plugin устанавливается в MetaTrader 5, подключается к аккаунту TradingMonitor.Pro, принимает сигналы и выполняет поддерживаемые торговые команды.
Перед началом
Подготовьте:
- MetaTrader 5 64-bit на Windows;
- активный аккаунт
TradingMonitor.Pro; session tokenиз личного кабинета;- включенный
Algo Trading; - разрешение
Allow DLL importsв MetaTrader 5 и настройках plugin; - plugin package
TMPro, полученный вместе с поставкой продукта.
Для первого запуска используйте demo account или dry-run. Live execution включайте только после проверки приема сигналов и журнала MetaTrader 5.
Установка plugin
- В MetaTrader 5 откройте
File > Open Data Folder. - Установите
TMProиз поставки продукта способом, указанным для вашего пакета. - Если поставка содержит файл expert, поместите его в:
text
MQL5\Experts- Если поставка содержит обязательную runtime library, поместите ее в:
text
MQL5\Libraries- Откройте MetaEditor и скомпилируйте
TMPro, если поставка требует компиляции. - В MetaTrader 5 откройте
Tools > Options > Expert Advisors. - Включите
Allow DLL imports. - Добавьте
TMProна нужный chart. - Включите
Algo Trading, если вы проверяете demo/live execution.
После установки TMPro должен появиться в списке Expert Advisors.
Настройки plugin
| Настройка | Назначение |
|---|---|
Connection URL / InpSignalRUrl | Адрес подключения TradingMonitor.Pro. Обычно используется значение по умолчанию https://tradingmonitor.pro. |
Session Token / InpSessionToken | Token из личного кабинета. |
Instance ID / InpInstanceId | Необязательный идентификатор конкретного терминала. |
Volume Multiplier / InpVolumeMultiplier | Множитель объема для order.submit и position.reduce. |
Timer / InpTimerMS | Частота проверки входящих сигналов. Обычно оставляют значение по умолчанию. |
Execution mode | Режим проверки или реального исполнения, если он доступен в вашей поставке plugin. |
Не меняйте advanced settings, если они не нужны для вашей установки или не рекомендованы support.
Для Public API plugin автоматически регистрирует account identity в формате:
text
<ACCOUNT_LOGIN>@<ACCOUNT_SERVER>Например: 12345678@Broker-Demo. Пустой Instance ID допустим и обозначает default logical MT5 instance.
Подключение
- Добавьте
TMProна chart. - Укажите
Session Token. - Укажите
Instance ID, если хотите принимать команды только для конкретного терминала. - Оставьте
Connection URLпо умолчанию, если вам не выдали другое значение. - Проверьте
Volume Multiplier. - Убедитесь, что
Allow DLL importsразрешен. - Убедитесь, что
Algo Tradingвключен, если вы тестируете demo/live execution. - Проверьте journal/log MetaTrader 5.
Plugin должен показать status подключения или понятную причину ошибки.
Маршрутизация сигналов
TMPro принимает команды, которые относятся к вашему аккаунту и подходят по routing.
Для отправки команды в MetaTrader 5 используйте в desktop app значение:
json
"platform": "mt5"Также можно использовать:
json
"platform": "any"Если указан instanceId, он должен совпадать с настройкой Instance ID в plugin. Если instanceId пустой, команда может быть принята любым подходящим экземпляром plugin в рамках аккаунта.
Поддерживаемые команды
system
pauseresumeinfo
system.pause временно блокирует новые команды входа. system.resume возвращает plugin в рабочее состояние. system.info используется для информационных сообщений.
order
submit
Для live order.submit поддерживаются:
market;limit;stop.
Текущая версия MT5 plugin не исполняет stop_limit live и возвращает tracked rejection unsupported_execution_type. Используйте market, limit или stop.
Обычно используются поля:
instrument;side:buyилиsell;executionType;quantity;limitPrice, если используетсяlimit;stopPrice, если используетсяstop;stopLoss/takeProfitили tick-based protection.
Итоговый объем рассчитывается как quantity * Volume Multiplier и затем нормализуется по ограничениям symbol/broker.
position
Поддерживаемые действия:
close;reduce;protect;close_all;flatten_now.
position.protect обновляет SL/TP текущей позиции. Если защита задана в тиках, цены рассчитываются относительно цены открытия позиции.
risk
Поддерживаемые действия:
block_instrument;allow_instrument;flatten_now.
risk.block_instrument запрещает новые входы по symbol. risk.flatten_now используется для аварийного закрытия.
Полный каталог запросов, различия с NinjaTrader 8 и примеры curl, C# и Python: Справочник торговых команд.
Public API, recovery и terminal events
Текущая версия MT5 plugin поддерживает тот же tracked Public API contract, что и NinjaTrader 8:
ReceiveTrackedSignalи подтверждённые terminal/broker statuses;- точную отмену pending entry order по сохранённому ticket;
RecoverTrackedOrdersпосле перезапуска или reconnect;terminal-events-v1дляorder_update,execution_updateиposition_update;- подтверждение
position.close,position.reduce,position.protect,position.close_allиrisk.flatten_nowтолько после фактического изменения terminal state.
Correlation API-ордера сохраняется в Common Files MT5. Recovery ищет только переданный exact ticket среди активных ордеров и history; plugin не выбирает похожий ордер и не выполняет отмену наугад.
Terminal events читаются через Public API SSE с scope events:read. Выбирайте source из GET /api/v1/terminal-events/sources и используйте точную комбинацию:
text
platform=mt5 + instanceId + accountNameВ rawText передаются тип торговой транзакции, tickets, symbol, order/deal state, volume, prices, SL/TP, request ID, broker retcode и comment. Position events используют tracking=unknown; API-correlated order/deal events содержат requestId, executionId и orderRef.
Lifecycle позиции
MT5 plugin с capability position-lifecycle-v1 публикует изменения жизненного цикла позиции напрямую в SignalR Hub method:
text
PublishPositionLifecycleЭто отдельный канал от ReceiveTrackedSignal: HTTP/API ACK на order.submit подтверждает прием команды, а lifecycle ACK подтверждает, что Backend принял событие состояния позиции.
Порядок событий и корреляция
Сначала Backend должен получить первоначальный order.submit и создать correlation record. Для этого entry-команда и все последующие события используют одну и ту же пару:
text
lifecycleKey + entrySignalIdsignalId/eventId — это идентификатор конкретной доставки или события. Он может меняться. Он не заменяет lifecycleKey и entrySignalId.
Ожидаемый сценарий:
text
order.submit
-> Backend создаёт lifecycle correlation
position.opened
-> ACK: success=true, status=OK, state=active
position.closed
-> ACK: success=true, status=OK, state=closedПоддерживаются события position.opened, position.closed, order.cancelled и order.expired. Backend требует positionRef для position.opened и position.closed; текущий MT5 connector для единообразия также передаёт непустые positionRef, side и quantity в событиях отмены/истечения.
Lifecycle payload
Обязательные поля события:
| Поле | Значение для MT5 |
|---|---|
eventId | Уникальный ID события, до 128 символов |
eventType | Один из поддерживаемых типов выше |
platform | mt5 |
terminalInstanceId | Точное значение Instance ID текущего plugin |
accountName | Имя/идентификатор счёта, согласованный при регистрации terminal |
instrument | Точное broker-specific имя symbol |
positionRef | Ticket/стабильная ссылка на position; текущий MT5 connector передаёт её для каждого события |
entrySignalId | Тот же ID первоначального entry |
lifecycleKey | Тот же ключ всей операции |
sequence | Монотонный номер события внутри lifecycle |
timestamp | Unix milliseconds |
Текущий MT5 connector также валидирует непустые side (buy/sell), положительные quantity, sequence и timestamp до вызова Hub. Backend дополнительно проверяет пользователя, terminal instance, platform, account и instrument. Если position.opened относится к entry-команде с dynamic protection и отправлен до регистрации ожидаемой корреляции, ACK будет success=false, status=NotFound. События position.opened для обычных ордеров без dynamic protection MainApp игнорирует в контексте dynamic protection.
Обработка ACK
MT5 connector должен проверять прежде всего success и status; поле state можно использовать для логирования, но оно не заменяет success.
success=true:OK,Duplicate,StaleSequence,TerminalState— событие принято или безопасно проигнорировано как повторное/устаревшее;success=false:NotFound,EntrySignalMismatch,TerminalInstanceMismatch,PlatformMismatch,AccountMismatch,InstrumentMismatch,UnauthorizedTerminal,InvalidPayload,Disabled— исправьте корреляцию, регистрацию или конфигурацию; повторять такой же payload бессмысленно.
При обрыве соединения событие можно повторить с тем же eventId: Backend дедуплицирует уже обработанное событие и вернёт Duplicate.
Обычные и API-сигналы на одном symbol
MT5 plugin не выполняет автоматический арбитраж противоположных сигналов. Обычные remote-сигналы и Public API-сигналы проходят через одну очередь, но остаются независимыми командами. Очередь задаёт порядок обработки, однако не делает разворот атомарным и не отменяет встречный pending-ордер.
Статус API execution filled относится только к соответствующему tracked order:
- на netting account встречный исполненный объём может уменьшить, закрыть или развернуть одну общую symbol position;
- на hedging account встречный market entry может создать отдельную противоположную position вместо закрытия существующей;
- ручные сделки, другие EA, копировщики, SL/TP и broker actions могут независимо изменить итоговое состояние.
Рекомендация
Для одной пары Account + Symbol используйте один управляющий источник: либо Public API, либо обычные сигналы. Не смешивайте их с ручными операциями, другими EA или копировщиками на этой же паре во время автоматического исполнения.
Перед разворотом отмените каждый конфликтующий pending-order и дождитесь подтверждения. На netting account закройте position и убедитесь по актуальному списку MT5 positions, что symbol больше не имеет позиции. На hedging account закрывайте нужные позиции по ticket и не считайте встречный market entry автоматическим закрытием. После этого отправляйте новый entry и устанавливайте новую защиту.
Подробное описание ограничения: Противоположные сигналы и итоговая позиция.
Проверка перед live
Перед включением live execution проверьте:
- plugin
TMProдобавлен на chart и пишет normal status; Session Tokenскопирован из правильного аккаунта;platformв команде равенmt5илиany;Instance IDсовпадает сinstanceId, если он используется;Algo Tradingвключен;Allow DLL importsвключен;- terminal trade permission и account trade permission разрешают торговлю;
- symbol из команды совпадает с названием у broker;
Volume Multiplierдает ожидаемый итоговый объем;- первый тест выполнен на demo или dry-run.
Диагностика
Plugin не запускается: проверьте установку TMPro, compilation errors в MetaEditor, Allow DLL imports и журнал MetaTrader 5.
Нет подключения: проверьте Connection URL, Session Token, доступ к интернету и системное время Windows.
Сигнал приходит в Dashboard, но не принимается plugin: проверьте platform, instanceId, Session Token и journal/log MetaTrader 5.
Команда принята, но не исполняется: проверьте execution mode, Algo Trading, trade permissions, symbol и volume.
Ордер отклоняется MetaTrader 5 или broker: проверьте symbol name, торговую сессию, минимальный lot, lot step, price fields и ограничения account.
stop_limit не исполняется live: используйте market, limit или stop.