Не пойму где ошибка.

 

Доброго здоровья всем!

Проблема вот в чем... В своем советнике я хочу в определенное время закрыть все открытые ордера. Делаю это вот так:

    TotalOrderCount = OrdersTotal();
    Print("Найдено ", TotalOrderCount," открытых ордеров.");
    for(i = 0; i < TotalOrderCount; i++)
    {
      Print("i = ", i);
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  //Выбираем ордер
      {
       Print("Первую ступень прошли...");
       if(OrderSymbol()==Symbol())  //Проверка на то, что пара наша       {
        Print("Вторую ступень прошли...");
        if(OrderMagicNumber()== MagicNumber) //MagicNumber тоже должен быть наш
        {
         Print("Третью ступень прошли...");
         if(OrderType()==OP_BUY || OrderType()==OP_SELL) //Только маркет-ордера, отложенники не трогаем
         {
           Print("Четвертую ступень прошли...");
           if(CloseOrder()) //вызываю свою функцию закрытия ордера(рабочая стопудово)
           {
             Print("Ордер закрыт...");
             Sleep(5000); // Пауза 5 сек.
           }
           else
             Print("Ошибка!!! Ордер не закрыт...");
         }
        }
       }
      }
      else
      {
        Print("Произошла ошибка в функции OrderSelect(), код ошибки = ",GetLastError()); 
      }
    }

В результате получаю вот такой лог...

16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Найдено 6 открытых ордеров.
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: I = 0
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Первую ступень прошли...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Вторую ступень прошли...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Третью ступень прошли...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Четвертую ступень прошли...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: close #76 sell 0.03 GBPUSD at 1.9698 tp: 1.9688 at price 1.9734
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Ордер закрыт...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: I = 1
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Первую ступень прошли...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Вторую ступень прошли...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Третью ступень прошли...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Четвертую ступень прошли...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: close #78 sell 0.03 GBPUSD at 1.9716 tp: 1.9706 at price 1.9734
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Ордер закрыт...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: I = 2
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Первую ступень прошли...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Вторую ступень прошли...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Третью ступень прошли...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Четвертую ступень прошли...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: close #92 buy 0.03 GBPUSD at 1.9738 tp: 1.9748 at price 1.9730
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Ордер закрыт...
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: I = 3
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Произошла ошибка в функции OrderSelect(), код ошибки = 0
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: I = 4
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Произошла ошибка в функции OrderSelect(), код ошибки = 0
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: I = 5
16:44:43 2008.01.08 23:58 ir02 GBPUSD,H1: Произошла ошибка в функции OrderSelect(), код ошибки = 0

Иногда один ордер не закрывает, иногда два, а тут даже три...

И в чем проблема никак не пойму. Прошу помощи...

 
Сделай обратный перебор.
 

Например в этой ситуации у тебя 6 открытых ордеров- закроет только 3.  А почему?

Да потому что ты ордер выбыраеш по позиции, а значит если ти например уже закрыл 3 ордера, то в цыкле пытется выбрать следуйщий

ордер с номером позиции 3 (червертый ордер), которого уже не существует. Надеюсь понятно обяснил.

 
Спасибо. Все понял. Проверил - работает... :)