Как узнать, заполнены ли вы в 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
-подобная сумка (массив) номеров записей (используется как указатели) и связанные с ними атрибуты Порядка, которые могут опосредовать как прямой доступ / модификацию (без предварительного dbPool
OrderSelect()
).
Техническое обслуживание в реальном времени, использование такого огромного пакета документов было протестировано как выполнимое для HFT низкой интенсивности с сотнями тысяч активных заказов (что было бы нецелесообразно, чтобы обрабатываться с помощью dbPool
OrderSelect()/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.
}
}