Skip to content

NinjaTrader 8 ​

Этот раздел описывает индикатор TMPro для NinjaTrader 8. В документации он рассматривается как одна пользовательская сущность: индикатор устанавливается в NinjaTrader 8, подключается к аккаунту TradingMonitor.Pro, принимает сигналы и выполняет поддерживаемые торговые команды.

Перед началом ​

Подготовьте:

  • NinjaTrader 8 на Windows;
  • активный аккаунт TradingMonitor.Pro;
  • session token из личного кабинета;
  • торговый account NinjaTrader, на котором вы хотите тестировать исполнение;
  • файл или пакет индикатора TMPro, полученный вместе с поставкой продукта.

Для первого запуска используйте demo account или выключенное live execution. Это позволяет проверить подключение, routing и формат команд без риска реального исполнения.

Установка индикатора ​

  1. Закройте NinjaTrader 8.
  2. Установите индикатор TMPro из поставки продукта способом, указанным для вашего пакета.
  3. Если поставка содержит исходные файлы индикатора, поместите их в каталог NinjaTrader 8 для custom indicators.
  4. Запустите NinjaTrader 8.
  5. Откройте New > NinjaScript Editor.
  6. Выполните compile.
  7. Добавьте индикатор TMPro на нужный chart.

После установки TMPro должен быть доступен в списке индикаторов NinjaTrader 8.

Настройки индикатора ​

НастройкаНазначение
Account / AccountNameТорговый account NinjaTrader для ордеров и операций с позициями.
Connection URL / SignalR URLАдрес подключения TradingMonitor.Pro. Обычно используется значение по умолчанию https://tradingmonitor.pro.
Session TokenToken из личного кабинета.
Instance IDНеобязательный идентификатор конкретного экземпляра индикатора.
Instrument MappingsСопоставление symbols из сигналов с названиями инструментов NinjaTrader.
Quantity MultiplierМножитель количества контрактов из входящей команды.
Enable ExecutionЕсли выключено, индикатор принимает сигналы и пишет logs, но не выполняет торговые действия.
Verbose LoggingПодробные сообщения для первичной настройки и диагностики.

Пример instrument mapping:

text
ES1!=ES 06-26;NQ1!=NQ 06-26

Используйте mapping, если symbol в сигнале отличается от имени инструмента в NinjaTrader.

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

  1. Откройте chart, на котором добавлен TMPro.
  2. Укажите Session Token.
  3. Укажите Instance ID, если хотите принимать команды только для конкретного терминала или рабочего места.
  4. Выберите Account.
  5. Для первого запуска включите Verbose Logging.
  6. Оставьте Enable Execution выключенным, пока не проверите прием сигналов.
  7. Примените настройки индикатора.

В Output window NinjaTrader индикатор должен показать понятный статус подключения или причину ошибки.

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

TMPro принимает команды, которые относятся к вашему аккаунту и подходят по routing.

Для отправки команды в NinjaTrader 8 используйте в desktop app значение:

json
"platform": "ninjatrader"

Также можно использовать:

json
"platform": "any"

Если указан instanceId, он должен совпадать с настройкой Instance ID в индикаторе. Если instanceId пустой, команда может быть принята любым подходящим экземпляром индикатора в рамках аккаунта.

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

system ​

  • pause
  • resume
  • info

system.pause временно блокирует исполнение новых торговых команд. system.resume возвращает индикатор в рабочее состояние. system.info показывает окно TMPro с текстом payload.info и переданными данными DOHLCV/legacy OHLC.

order ​

  • submit

Для order.submit обычно используются поля:

  • instrument;
  • side: buy или sell;
  • executionType: market, limit, stop или stop_limit;
  • quantity;
  • limitPrice, если используется limit или stop_limit;
  • stopPrice, если используется stop или stop_limit;
  • stopLoss / takeProfit как абсолютные цены;
  • stopLossTicks / takeProfitTicks как расстояния в тиках.

Для tick-based защиты индикатор ждёт появления позиции, рассчитывает цены от фактической Position.AveragePrice через TickSize инструмента и округляет их к допустимому шагу цены. Если одновременно переданы абсолютная цена и расстояние в тиках для одной защиты, используется абсолютная цена. atmStrategyName не входит в гарантированный tracked Public API contract.

Пример:

json
{
  "v": 1,
  "signalId": "nt-order-001",
  "ts": 1777000000000,
  "ttlMs": 300000,
  "platform": "ninjatrader",
  "instanceId": "nt-demo-01",
  "type": "order",
  "cmd": "submit",
  "payload": {
    "instrument": "ES 06-26",
    "side": "buy",
    "executionType": "market",
    "quantity": 1,
    "stopLoss": 6280.25,
    "takeProfit": 6310.25
  }
}

Полный каталог запросов и примеры curl, C# и Python: Справочник торговых команд.

position ​

Поддерживаемые действия:

  • close;
  • reduce;
  • protect;
  • close_all;
  • flatten_now.

Position-команды используются для закрытия, частичного уменьшения или защиты открытых позиций.

risk ​

Поддерживаемые действия:

  • block_instrument;
  • allow_instrument;
  • flatten_now.

Risk-команды используются для локальной блокировки инструмента и аварийного закрытия позиций.

Lifecycle позиции ​

Backend уже поддерживает SignalR Hub method PublishPositionLifecycle и ACK-контракт для position.opened, position.closed, order.cancelled и order.expired. Lifecycle-корреляция строится по стабильной паре:

text
lifecycleKey + entrySignalId

Первоначальный order.submit должен создать эту корреляцию в Backend. Последующие события передают те же lifecycleKey и entrySignalId; новый signalId или eventId допустим и означает только новую доставку/событие.

Минимальный контракт события для NinjaTrader:

ПолеЗначение
eventIdУникальный ID события, до 128 символов
eventTypeposition.opened, position.closed, order.cancelled или order.expired
platformninjatrader
terminalInstanceIdТочное значение Instance ID indicator
accountNameВыбранный account NinjaTrader, например Sim101
instrumentТочное имя инструмента после mapping
positionRefСсылка на position для position.opened/position.closed
entrySignalIdСтабильный ID первоначального entry
lifecycleKeyСтабильный ключ всей операции
sequenceМонотонный номер события
timestampUnix milliseconds

Для position.opened Backend возвращает ACK success=true, status=OK, state=active; для закрытия — success=true, status=OK, state=closed. Indicator проверяет success и status, а state можно использовать для диагностики. Если position.opened относится к entry-команде с dynamic protection и пришёл до регистрации ожидаемой корреляции, Backend вернёт success=false, status=NotFound. События position.opened для обычных ордеров без dynamic protection MainApp игнорирует в контексте dynamic protection.

Текущий NinjaTrader 8 indicator package реализует полный lifecycle pipeline: принимает lifecycle-поля из entry, отслеживает PositionUpdate и ExecutionUpdate, формирует position.opened/position.closed, сохраняет события в локальном outbox и вызывает PublishPositionLifecycle с повторными попытками после reconnect. При успешном ACK событие удаляется из outbox.

В lifecycle payload используется каноническое значение platform: "ninjatrader" (Backend также принимает nt8). В логах indicator ищите feedback sent, а не только PositionUpdate.

Обычные и API-сигналы на одном инструменте ​

TMPro не выполняет автоматический арбитраж противоположных сигналов. Обычные remote-сигналы и Public API-сигналы обрабатываются последовательно, но остаются независимыми командами. Встречный working или pending-ордер автоматически не отменяется.

Статус API execution filled относится к конкретному tracked-ордеру, а не гарантирует итоговое направление net-позиции. Другая заявка может уменьшить, закрыть или развернуть позицию до или после этого исполнения. TMProLocal, ручные заявки, ATM и сторонние стратегии не координируются с очередью remote-индикатора.

Рекомендация

Для одной пары Account + Instrument используйте один управляющий источник: либо Public API, либо обычные сигналы. Не смешивайте их с TMProLocal, ручными заявками или ATM на этой же паре во время автоматического исполнения.

Для разворота сначала отмените конфликтующие pending-ордера и дождитесь подтверждения отмены. Затем закройте текущую позицию, подтвердите Flat по PositionUpdate и только после этого открывайте новую сторону с новой защитой. Текущая версия индикатора не выполняет эту последовательность автоматически.

Подробное описание ограничения: Противоположные сигналы и итоговая позиция.

Проверка перед live ​

Перед включением live execution проверьте:

  • indicator TMPro добавлен на chart и пишет normal status;
  • Session Token скопирован из правильного аккаунта;
  • Account выбран правильно;
  • platform в команде равен ninjatrader или any;
  • Instance ID совпадает с instanceId, если он используется;
  • symbol из команды совпадает с инструментом NinjaTrader или настроен mapping;
  • Quantity Multiplier дает ожидаемый итоговый размер;
  • Enable Execution включается только после проверки на demo или dry-run.

Диагностика ​

Индикатор не появился в списке: выполните compile в NinjaScript Editor и проверьте ошибки компиляции.

Нет подключения: проверьте Connection URL, Session Token, доступ к интернету и системное время Windows.

Сигнал приходит в Dashboard, но не принимается индикатором: проверьте platform, instanceId, Session Token и logs NinjaTrader.

Команда принята, но не исполняется: проверьте Enable Execution, выбранный Account, права account, symbol mapping и размер позиции.

Ордер отклоняется NinjaTrader: проверьте instrument name, торговую сессию, quantity, price fields и ограничения broker/account.

TradingMonitor.Pro documentation.