Как узнать, заполнен ли вы MQL4-ордером?

Я не могу, хоть убей, как определить, заполнен ли отложенный ордер, который был отправлен, и у вас есть действующий тикет, на MQL4

http://book.mql4.com/trading/index

Есть ли обратный вызов или скрипт должен как-то постоянно опрашивать?


person Ivan    schedule 23.08.2015    source источник
comment
привет, вы говорите, что хотите быть уверенным, закрыт отложенный ордер или нет?   -  person Murad    schedule 23.08.2015


Ответы (2)


No.

Ни экосистема брокера / терминала, ни язык MQL4 не обеспечивают обратный вызов, когда Pending Order соответствует рыночной цене и конвертируется в сделку.

да.

Можно выбрать опрос dbPool записей в МТ4 / Терминале довольно глупым способом, как цикл.

int trades_total = OrdersTotal();

for ( int i = 0; i < trades_total; i++ ) {
      OrderSelect( i, SELECT_BY_POS, MODE_TRADES );
      if (       OrderSymbol() == Symbol()
         && OrderMagicNumber() == Magic
         && (      OrderType() == OP_BUYSTOP
            ||     OrderType() == OP_BUY
            )
         ) { ...

или один может создавать / хранить / поддерживать свой собственный DMA -подобный пакет (массив) номеров записей (используемых как нечто вроде указателей) и связанных атрибутов Порядка, которые могут служить посредником оба прямого доступа / модификации (без предварительного dbPool OrderSelect()).

Техническое обслуживание в реальном времени с использованием такого огромного набора записей было протестировано как выполнимое для HFT низкой интенсивности с сотнями тысяч активных заказов (которые были бы непрактичны, если бы их пришлось обрабатывать с помощью инструментов dbPool OrderSelect()/Order*() (тем более Strategy Tester многокритериальных режим оптимизации).

person user3666197    schedule 23.08.2015
comment
Спасибо. Что насчет этого API ForexConnect? Это тоже воняет? - person Ivan; 24.08.2015

Если у вас есть тикет заказа, вы можете периодически проверять OrderType(). Он изменится с КУПИТЬ_STOP (OP_BUYSTOP) на КУПИТЬ (OP_BUY) и т. Д., Тогда вы узнаете, что ваш заказ наполнен.

int myTicket;

void OnTick()
{
  // check for order filled
  OrderSelect(myTicket, SELECT_BY_TICKET);
  int type = OrderType();
  if((type == OP_BUY) || (type == OP_SELL))
  {
    // order is filled, do something here.
  }
  else
  {
    // order is not filled yet. keep waiting.
  }
}
person Tony Manso    schedule 20.10.2015