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

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

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

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

2 ответа

Решение

Нет.

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

Да.

Можно выбрать либо опросить dbPool записей в MT4/Terminal довольно тупо, как цикл

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 -подобная сумка (массив) номеров записей (используется как указатели) и связанные с ними атрибуты Порядка, которые могут опосредовать как прямой доступ / модификацию (без предварительного dbPoolOrderSelect()).

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

Если у вас есть заказ билетов, то вы можете периодически проверять OrderType(), Это изменится с BUY_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.
  }
}
Другие вопросы по тегам