MQL для чайников, программирование на MQL4, MQL5
12 Янв
Посмотрите мой код:
for(int i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
OrderClose(...);
Почему при его выполнении закрываются не все ордера, а через один?
Дело в том, что при закрытии ордера Форекс в Metatrader 4 или удалении отложенного ордера Buy Stop или Sell Stop - позиция оставшихся смещается.
Представим, что у нас есть 3 ордера Forex. Их позиции изначально: 0, 1, 2. При закрытии ордера в позиции 0 следующие ордера будут иметь позиции 0,1. Цикл же этого не учитывает и при следующем проходе будет попытка закрыть ордер в позиции 1. Поэтому более правильным вариантом на MQL будет следующий:
for(int i=OrdersTotal() −1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
OrderClose(...);