Ошибки выполнения

 
Помогите разобраться пожалуйста:
 
void ClosePose()
{
if(OrdersTotal()==0)
return;
RefreshRates();
for(int i=0;i<OrdersTotal();i++)
 {
  OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
  if(OrderType()==OP_BUY)
   {
    OrderClose(i,OrderLots(),Bid,3);
    Print("lots for the order ",i," is ",OrderLots());
   }
  if(OrderType()==OP_SELL)
  OrderClose(i,OrderLots(),Ask,3);
 }
return;
}
Размер лота выдает 0.1 - как положенно, номер тикета тоже не минусовый.
Но тестер выдает - то ему тикет не такой, то ему лот неправильный. При этом некоторые позы закрывает.......
Я вообще не понимаю поведение тестера - раньше такого не наблюдалось и все работало как следует.

Маааленькая просьба - не писать многозначительных фраз вроде "ой сколько тут ошибок!" а указывать на саму ошибку, как правильно и причину если это возможно
 
Можете смеяться - "поправил" код - написал совершенно странную вещь

OrderClose(i+1,OrderLots(),Bid,3);
Первый ордер закрылся.
Дальше пишет - лот не того размера...

Могу и посмешнее написать
Мне ОрдерЛотз возвращает 0 для открытой позиции...
 
Всё. Приехали...
Сори, забыл. Там надо написать OrderTicket()............................
 
В функцию OrderClose() в первом параметре нужно передать тикет ордера:
OrderClose(OrderTicket(),OrderLots(),Bid,3);
Закрытие позиций нужно произоводить не с начала,а с конца:
for(int i=OrdersTotal()-1;i>0;i--)
{
//........
}
Вот тебе код закрытия всех позиций:
for (int i=OrdersTotal()-1; i>=0; i--) 
  { 
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
    { 
      if(OrderSymbol()==Symbol())
      { 
         order_type=OrderType();
         if(order_type==OP_BUY)
            OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
         else if(order_type==OP_SELL)
            OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow);
      }
    } 
  }
 
Спасибо!