Skip to content

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 ​

  1. В MetaTrader 5 откройте File > Open Data Folder.
  2. Установите TMPro из поставки продукта способом, указанным для вашего пакета.
  3. Если поставка содержит файл expert, поместите его в:
text
MQL5\Experts
  1. Если поставка содержит обязательную runtime library, поместите ее в:
text
MQL5\Libraries
  1. Откройте MetaEditor и скомпилируйте TMPro, если поставка требует компиляции.
  2. В MetaTrader 5 откройте Tools > Options > Expert Advisors.
  3. Включите Allow DLL imports.
  4. Добавьте TMPro на нужный chart.
  5. Включите Algo Trading, если вы проверяете demo/live execution.

После установки TMPro должен появиться в списке Expert Advisors.

Настройки plugin ​

НастройкаНазначение
Connection URL / InpSignalRUrlАдрес подключения TradingMonitor.Pro. Обычно используется значение по умолчанию https://tradingmonitor.pro.
Session Token / InpSessionTokenToken из личного кабинета.
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.

Подключение ​

  1. Добавьте TMPro на chart.
  2. Укажите Session Token.
  3. Укажите Instance ID, если хотите принимать команды только для конкретного терминала.
  4. Оставьте Connection URL по умолчанию, если вам не выдали другое значение.
  5. Проверьте Volume Multiplier.
  6. Убедитесь, что Allow DLL imports разрешен.
  7. Убедитесь, что Algo Trading включен, если вы тестируете demo/live execution.
  8. Проверьте 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 ​

  • pause
  • resume
  • info

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 + entrySignalId

signalId/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Один из поддерживаемых типов выше
platformmt5
terminalInstanceIdТочное значение Instance ID текущего plugin
accountNameИмя/идентификатор счёта, согласованный при регистрации terminal
instrumentТочное broker-specific имя symbol
positionRefTicket/стабильная ссылка на position; текущий MT5 connector передаёт её для каждого события
entrySignalIdТот же ID первоначального entry
lifecycleKeyТот же ключ всей операции
sequenceМонотонный номер события внутри lifecycle
timestampUnix 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.

TradingMonitor.Pro documentation.