Проверьте код.(очень простой советник)

 
Почему то иногда не закрывает и не открывает ордер по реверсу,в тестере все нормально,а по факту иногда не работает,приходится в ручную закрывать / открывать,если тут есть программисты ,которые могут посмотреть есть ли ошибка в CloseRevers , советник на пересечении 2х машек,может есть нормальный - рабочий?
Файлы:
 
void CLOSEORDER(int ord)
{
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==123)
         {
            if (OrderType()==OP_BUY && ord==OP_BUY)
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
            if (OrderType()==OP_SELL && ord==OP_SELL)
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);
         }
      }   
   }
}

//вот это не правильно, нужно делать перебор ордеров с конца
void CLOSEORDER(int ord)
{
   for (int i=OrdersTotal()-1; i>=0; i--)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==123)
         {
            if (OrderType()==OP_BUY && ord==OP_BUY)
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
            if (OrderType()==OP_SELL && ord==OP_SELL)
               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,CLR_NONE);
         }
      }   
   }
}
в целом без обработки ошибок советник написан некорректно. Хотя бы для приличия полистали бы базу готовых советников и поглядели бы, как делают другие программисты.
Причина обращения: