为什么我这个一键平仓不能一次平掉所有的单子

 
void OnStart()
  {
   for(int i=0;i<OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
            {
               if(OrderType()==OP_BUY)
                  {
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,Blue);
                  }
               if(OrderType()==OP_SELL)
                  {
                     OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue);
                  }
               if((OrderType()==OP_BUYSTOP) || (OrderType()==OP_BUYLIMIT) || (OrderType()==OP_SELLLIMIT) || (OrderType()==OP_SELLSTOP))
                  {
                     OrderDelete(OrderTicket());
                  }
             }
       }
  
        
   }
 

1.容許的滑點太小 平不到執行指令的價格

2. OrderClose(.....)   後面接著執行 i=OrdersTotal(); 確保平倉失敗時循環次數不會減少

 
 for(int i=0;i<OrdersTotal();i++)换成 for(int i=OrdersTotal()-1;i>=0;i--)   因为0#订单被平了后,已经不在持仓列表,持仓列表中又形成了新的0#
 
Lin Luo:
 for(int i=0;i<OrdersTotal();i++)换成 for(int i=OrdersTotal()-1;i>=0;i--)   因为0#订单被平了后,已经不在持仓列表,持仓列表中又形成了新的0#

应该是这个原因。

 
void OnStart()
  {
   for(int i=0;i<OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
            {
               if(OrderType()==OP_BUY)
                  {
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,Blue);
                  }
               if(OrderType()==OP_SELL)
                  {
                     OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue);
                  }
               if((OrderType()==OP_BUYSTOP) || (OrderType()==OP_BUYLIMIT) || (OrderType()==OP_SELLLIMIT) || (OrderType()==OP_SELLSTOP))
                  {
                     OrderDelete(OrderTicket());
                  }
             }
       }
  
        
   }
 
哥,BUY是Bid ,SELL是Ask