Cierre de orden por posición contraria

 

Buenas a todos, he escrito estas líneas que me funcionan en backtest pero no al operar en cuenta demo ya que confunde los símbolos y me cierra órdenes automáticamente después de abrirlas. La idea es que al producirse una señal contraria de un símbolo (SName) se cierre la primera (PositionsTotal()>1).

      //----------------------------------------- OrderClose loop ---!
      double ClosePrice=0;
      for(int i=0;i<PositionsTotal();i++){
         ulong iTicket=PositionGetTicket(i);
         if(PositionSelectByTicket(iTicket)&&
         PositionGetString(POSITION_SYMBOL)==SName){
            if(PositionsTotal()>1){
               if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY){ClosePrice=Bid;}
               if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL){ClosePrice=Ask;}
               if(!trade.PositionClose(iTicket,ULONG_MAX)){
                  Print("PositionClose error ",trade.ResultRetcode());
                  return;
                  }
               }
            }
         }
Razón de la queja: