Волноблог мы в контакте мы в youtube
Удаление ордеров в MQL

Удаление ордеров в MQL

1682 | 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);
}
Комментировать

Войти