一键平仓 ,平当前图表品种 为什么EA运行只能平一半的持仓而不能全平所有,逻辑哪里有问题,求指导

 
int start()
{
  int signal=0;
  int ticket[200];               
  
  if((OrdersTotal()==0)==true)
  Alert("无可平仓订单");
  
  if(OrdersTotal()>0)
  for(int i=0;i<OrdersTotal();i++)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
   Print("选值错误",GetLastError());
   
   ticket[i]=OrderTicket();
   Print("全部平仓"+ticket[i]);
   }
  
  
  
  
  for(int a=0;a<OrdersTotal();a++)
  {
  if(OrderSelect(ticket[a],SELECT_BY_TICKET)==false)
  Print("选择订单错误",GetLastError());
  if(OrderSymbol()==CurrentSymbol)
  { 
 
  {
  if((OrderType()==OP_BUY))
  if(OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),3,clrNONE)==false)
   Print("多单平仓失败",GetLastError());
   signal=1;
  }
  {
  if((OrderType()==OP_SELL))
  if(OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),3,clrNONE)==false)
   Print("空单平仓失败",GetLastError());
   signal=1;
  }
  {
  if(OrderType()==OP_BUYLIMIT||OrderType()==OP_BUYSTOP||OrderType()==OP_SELLLIMIT||OrderType()==OP_SELLSTOP)
  if(OrderDelete(OrderTicket(),clrNONE)==false)
   Print("挂单取消失败",GetLastError());
   signal=1;
  }
  }
 }
  if(signal==0)
  Alert("当前图表已全部平仓");
  else
  Alert("再平仓一次");
  
  return(0);
}
  
  
 
  
//---
   
  
//+------------------------------------------------------------------+
 
平仓,应该用for(int i=OrdersTotal()-1;i>=0;i--)
 
这个可以
附加的文件:
 
wushuang888:
平仓,应该用for(int i=OrdersTotal()-1;i>=0;i--)
   MqlTick last_tick;
  
   for (int i=OrdersTotal()-1; i>=0; i--)
      {  
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
         if(OrderSymbol()!=Symbol())continue;    
         SymbolInfoTick(Symbol(),last_tick);     
         if ( OrderType() == OP_BUY) 
             SymbolClose = OrderClose(OrderTicket(),OrderLots(), last_tick.bid, 500);         
         if ( OrderType() == OP_SELL)
             SymbolClose = OrderClose(OrderTicket(),OrderLots(), last_tick.ask, 500);             
         RefreshRates();   
      }  
原因: