Формирование очередей исполнения торговых ордеров в MT5.

30 апреля 2022, 07:44
fxsaber
3
244

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


Переворот.

Для подтверждения сделанной гипотезы был написан такой скрипт.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/blogs/post/745131

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

input int inTP = 5;

void OnStart()
{
  if (OrderSelect(OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, Ask + inTP * _Point, "BUY_Direct"), SELECT_BY_TICKET))
    OrderSend(_Symbol, OP_SELLLIMIT, 0.1, OrderTakeProfit(), 0, OrderTakeProfit(), OrderTakeProfit(), "BUY_Reverse");

  if (OrderSelect(OrderSend(_Symbol, OP_SELL, 0.1, Bid, 0, 0, Bid - inTP * _Point, "SELL_Direct"), SELECT_BY_TICKET))
    OrderSend(_Symbol, OP_BUYLIMIT, 0.1, OrderTakeProfit(), 0, OrderTakeProfit(), OrderTakeProfit(), "SELL_Reverse");
}


Он открывает позицию (Direct-комментарий) с определенным TP. После чего на ценовой уровень TP выставляет лимитный ордер (Reverse-комментарий). 


Результат (на MQ-Demo) такой симуляции стандартного переворота открытой позиции через TP+Limit ниже на скрине.


Одинаковым цветом пометил время срабатывания соответствущих TP и Limit. Хорошо видно, что TP исполняется всегда раньше, чем соответствующий ему лимитный ордер. Именно на это обстоятельство довольно поздно обратил внимание при разборе стейтментов. К каким выводам это привело - речь пойдет ниже.


TP-order.

При акцептировании TP (соответствующая цена дошла до данного ценового уровня) открытой позиции MT5 создает TP-order (полноценный ордер со своим тикетом). Это маркет-ордер (внутри MT5), который далее сразу отправляется на исполнение. На данные шаги, конечно, требуется время.


В частности, на скрине в поле CloseTime можно видеть миллисекунды в скобках. Это сколько времени прошло от создания (не активации (приход тика срабатывания) - там еще больше) TP-order до его исполнения.


Для ускорения/оптимизации платформы, конечно, TP-orders сидят в MT5 отдельными внутренними отсортированными по цене ордерами, пусть и без тикетов. По крайней мере, именно так бы делал.


Очередь.

Как и в Тестере в торговых платформах существуют очереди - последовательные проверки акцепта отложенных ордеров и TP/SL/MO-уровней и соответствующих дальнейших действий после срабатывания.


В MT5 внутреннее правило очередей таково, что при акцепте TP и отложки на одном и том же тике, сначала обрабатывается полностью TP-orders, а только потом - отложки.


Клиенты.

Такое положение вещей с очередями касается всех клиентов брокера.


Например, вы выставили лимитный ордер. А кто-то другой выставил на этот уровень TP открытой позиции. В таком случае ваш лимитный ордер будет ждать активации чужого TP! Т.е. другие клиенты брокера могут напрямую влиять на результат вашей торговли в MT5, поскольку ожидание выливается в несистемные отрицательные проскальзывания и реджекты.


И чем больше клиентов у брокера со схожими торговыми уровнями, тем выше влияние других на вашу торговлю. В частности, имеет огромное влияние на популярное время и место скальпинга.


Обращу внимание, что даже разбиение позиций на несколько с одинаковыми TP приводит к замедлению активации лимитных ордеров. Все согласно приоритету очередей, прописанному внутри MT5 не админами, а разработчиками платформы в самом ее ядре.


Приоритеты.

Может показаться, что Netting-счета на обладают такой проблемой, т.к. тот же переворот позиции там делается удвоенным лимитным ордером. И нет никакого TP. На самом деле Netting-счета - это просто одна из групп счетов на торговом сервере. И среди групп также существует очередь по логичному правилу: чем раньше была создана группа, тем раньше она проверяется на активацию торговых уровней.


Это значит, что если сначала была создана Hedge-группа, а потом Netting-группа, то Netting-лимитники всегда будут отставать от Hedge-лимитников.


Группы счетов.

Групп всегда больше, чем просто Netting/Hedge. Для разных торговых условий (rebate-комиссии и другие варианты.) клиента могут переносить из одной группы в другую. Поэтому может оказаться, что два счета на одном и том же брокере с внешне одинаковыми торговыми условиями могут давать противоположные результаты: прибыль и убыток.


В частности, можно видеть, как на одном счете исполнение идет за 50 мс (см. миллисекунды в скобках), а на другом - 600 мс. Вызывая, например, дикие отрицательные скольжения.


Узкое горлышко.

Это одно из слабых звеньев в архитектуре MT5. Возможно, разработчики что-то поправят для улучшения ситуации. Правило "сначала TP, потом остальное" понятно, т.к. это позволяет значительно уменьшить создание противоположных позиций и более щадяще подойти к использованию маржи, не упираясь иногда в нехватку денег на торговом счете.


Активация на стороне.

В MT5 существует возможность активировать ценовые уровни не через MT5, а сторонним софтом. Это значит, что можно полностью избавиться от всего, что написано выше и зависеть только от особенностей другого софта. В таком случае MT5 превращается в БД и GUI. Использование такой возможности зависит от компетенции и желания брокера.


Исключения.

Видел некоторые ситуации, когда лимитный ордер шел раньше TP-order. С чем связано - не знаю.

Поделитесь с друзьями: