MT5 分方向平仓问题

 

一个加仓EA,设定一个条件给予订单出场,出场的方式有多种,有分方向出场,有不论方向全部出场,如何这种目地,下面是代码层

void orderclose(int type)

{

   for (int i=PositionsTotal()-1;i>=0;i--)
    {
     if(PositionSelectByTicket(PositionGetTicket(i)))
        if(PositionGetSymbol(POSITION_SYMBOL) == Symbol() && PositionGetString(POSITION_COMMENT) == EXPERT_COMMENT && PositionGetInteger(POSITION_MAGIC) == EXPERT_MAGIC)
           if(PositionGetInteger(POSITION_TYPE) == type || type == -100)
            {
              MqlTradeRequest   reqst =  {};
              MqlTradeResult    reslt =  {};
              reqst.action            =  TRADE_ACTION_DEAL;
              reqst.position          =  PositionGetTicket(i);
              reqst.symbol            =  PositionGetSymbol(POSITION_SYMBOL);
              reqst.volume            =  PositionGetDouble(POSITION_VOLUME);
              reqst.magic             =  EXPERT_MAGIC;
              reqst.comment           =  EXPERT_COMMENT;
              reqst.deviation         =  10 * SymbolInfoDouble(Symbol(),SYMBOL_POINT);               
              if(type == POSITION_TYPE_BUY)
               {
                 reqst.type           = ORDER_TYPE_SELL;
                 reqst.price          =  SymbolInfoDouble(Symbol(),SYMBOL_BID);
               }
              if(type == POSITION_TYPE_SELL)
               {
                 reqst.type           = ORDER_TYPE_BUY;
                 reqst.price          =  SymbolInfoDouble(Symbol(),SYMBOL_ASK);
               } 
              if(type == -100)
               {
                 if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
                  {
                    reqst.type           = ORDER_TYPE_SELL;
                    reqst.price          =  SymbolInfoDouble(Symbol(),SYMBOL_BID);                    
                  }
                 if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
                  {
                    reqst.type           = ORDER_TYPE_BUY;
                    reqst.price          =  SymbolInfoDouble(Symbol(),SYMBOL_ASK);
                  }                 
               }
              if(OrderSend(reqst,reslt) == 1)
               {
                 Print("平仓委托发出,单号:",PositionGetTicket(i));
                 ZeroMemory(reqst);
                 ZeroMemory(reslt);
               }
            }
           else if(PositionGetInteger(POSITION_TYPE) != type && type != -100)
            {
              i=i-1;
            }
     }

 }

虽然看着感觉没问题,但是运行起来不行

 
逻辑是,比如要平多头,ORDERCLOSE(POSITION_TYPE_BUY); 这时循环判断顺序上的订单是不是当前EA加载运行开仓的,然后确定方向是否是需要平仓的方向,再平仓,但目前是触发后续是没平仓的,换另一种写法就是有时平仓正确,有时又会全部平仓
 
以上是订单情况
附加的文件:
tj1.PNG  15 kb
3t2.PNG  41 kb