Вопрос по закрытию встречных позиций

 

Столкнулся с проблемой закрытия ордеров через OrderCloseBy().

вот отрывок кода, который должен был собственно реализовать закрытие сделки:

      buy = 0;
      sell = 0;
      int TicketBuy = 0;
      int TicketSell = 0;
      for(int i=OrdersTotal()-1;i>=0;i--){
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
            if(OrderSymbol()==Symbol()){
               RefreshRates();
               if(OrderType() == OP_BUY){
                  buy ++;
                  TicketBuy = OrderTicket();
               }
               if(OrderType() == OP_SELL){               
                  sell++;
                  TicketSell = OrderTicket();
               }
            }
         }   
      }
    
     if ((buy > 0)&&(sell > 0)){
      Print("TicketSell: ",TicketSell);
      Print("TicketBuy: ",TicketBuy);
      Print("sell: ",sell);
      Print("buy: ",buy);
      if (!OrderCloseBy(TicketBuy, TicketSell))//{(TicketSell < TicketBuy) {//(!OrderCloseBy(TicketBuy, TicketSell))
         OrderCloseBy(TicketBuy, TicketSell); 
     }
     if((buy < 1)&&(sell < 1)){
      if (OrdersTotal() > 0){     
         for(i=OrdersTotal()-1;i>=0;i--){
            if ((OrderType() == OP_SELLLIMIT)||(OrderType() == OP_BUYLIMIT)){
               if (OrderDelete(OrderTicket(), CLR_NONE) == false){
                  Print("Order delete error: ", GetLastError());
               }
            }
         }
      }   
     }

Ситуация заклчается в следующем: при открытии сделки по заданному сигналу, выставляюися дополнительные лимитные ордера для фиксации прибыли. Однако, в тот самый момент когда цена достигает уровня лимитных ордеров они не закрывася как встречные с главным, а торгуются как обычные. В отчете выдает ошибку 3.

Буду признателен, если поскажете как правильно поступить в данной ситуации.

 

OrderSelect() забыли во втором цикле

 
Спасибо, поправил, но OrderCloseBy() все равно не работает (все та же ошибка 3). А там где поправил, лишние ордера удалялись без проблем...