Удаление ордеров в MQL
1820 | 16
Jan
2015 | Учи матчастьВ ходе изучения языка MQL4 наткнулся на такую проблему, как правильное удаление ордеров. Составив программу, работа эксперта выполнялась, но не совсем правильно. Ордера удалялись через один.
Давайте посмотрим, что же я накалякал.
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
tic=OrderTicket();
if(OrderClose(tic,Lot,Bid,2)==true) Print("ok,"+i);
}
Описание кода:
Цикл начинается с нуля и продолжается до того момента пока условие i<OrdersTotal() соблюдается. OrdersTotal() возвращает общее количество открытых и отложенных ордеров.
Что же в этом коде не так?
А то, что когда удаляется первый ордер (на этом моменте i=1), все ордера смещаются на один влево. Тот, который был вторым становится первым, третий вторым и т.д. Далее (на этом моменте i=2) удаляется ордер №3, который находится во второй ячейке из-за удаления первого и сдвига всех ордеров влево и т.д.
Как должно быть?
А правильно реализовать код нужно так. Запустить цикл с конца. Тогда ордера не будут сдвигаться влево и порядок не нарушится.
Правильный код:
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
tic=OrderTicket();
if(OrderClose(tic,Lot,Bid,2)==true) Print("ok, "+i);
}




