chinaddrs 发表于 2024-11-23 19:59:09

小修改同时平仓问题!小问题!

EA开单是马丁 0.01 0.02 0.03 0.04 ...0.1
1,在开多空单时,盈利平仓是从大手数0.1顺序到0.01平仓!
2,平仓代码我已经找出来,在下面!
3,修改代码,盈利平仓时,多单(空单)平仓时是同时平,不是顺序平!
4,是多单(空单)同时平,不是多空单一起同时平!
int CloseOrders(string symbol,
                int mag,
                ENUM_ORDER_TYPES type,
                string com,
                int    slippage = 0,
                colorarrow_color = clrFireBrick,
                int cycles = 2)
{
   ResetLastError();
   int cnt = 0;
   bool Res;
   for(int j = 1; j <= cycles; j++)
   {
      ::RefreshRates();
      bool res = true;
      int total = ::OrdersTotal();
      for(int i = total; i >= 0; i--)
      {
         if(::OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
            if(symbol == NULL || ::OrderSymbol() == symbol)
               if(mag == -1 || ::OrderMagicNumber() == mag)
                  if(com == NULL || com == "" || ::StringFind(::OrderComment(), com) == 0 || ::OrderComment() == com)
                     if(CheckType(OrderType(), type) == true)
                     {
                        if(OrderType() < 2)
                        {
                           Res = ::OrderClose(::OrderTicket(), ::OrderLots(), ::OrderClosePrice(), slippage, arrow_color);
                           if(Res == false)
                           {
                              res = false;
                              if(j == cycles)
                                 ::PrintFormat("%d,Position Closed failed, code =%d", ::OrderTicket(),::GetLastError());
                           }
                           else
                           {
                              cnt++;
                           }
                        }
                        else
                        {
                           Res =::OrderDelete(::OrderTicket(), arrow_color);
                           if(Res == false)
                           {
                              res = false;
                              if(j == cycles)
                                 ::PrintFormat("%d,pending order delete failed, code =%d", ::OrderTicket(),::GetLastError());
                           }
                           else
                           {
                              cnt++;
                           }
                        }
                     }
      }
      if(res == true)
      {
         break;
      }
      else
      {
         ::Sleep(200);
      }
   }
   return(cnt);
}


页: [1]
查看完整版本: 小修改同时平仓问题!小问题!