Я не могу, хоть убей, как определить, заполнен ли отложенный ордер, который был отправлен, и у вас есть действующий тикет, на MQL4
http://book.mql4.com/trading/index
Есть ли обратный вызов или скрипт должен как-то постоянно опрашивать?
Я не могу, хоть убей, как определить, заполнен ли отложенный ордер, который был отправлен, и у вас есть действующий тикет, на MQL4
http://book.mql4.com/trading/index
Есть ли обратный вызов или скрипт должен как-то постоянно опрашивать?
Ни экосистема брокера / терминала, ни язык 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
многокритериальных режим оптимизации).
Если у вас есть тикет заказа, вы можете периодически проверять 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.
}
}