ORDER_TYPE_SELL_STOP 模式 平仓 问题

 

EA  设计  考虑  有 仓 位的  情况下 出现  相反信号   ,用          ORDER_TYPE_SELL_STOP 模式  来 平仓 并反向 开仓

 发现 标准库  Trade.mqh  中    CTrade 类   平仓   函数PositionClose    全部  是  m_request.action   =TRADE_ACTION_DEAL  模式   没有  m_request.action   =TRADE_ACTION_PENDING 模式  可以   用来 stop   平仓    ,   于是自己 添加 了一个 函数  用来  作   stop   平仓  

函数如下

bool CTrade::PositionClose_stop(const ulong ticket,const ulong deviation,const double price,ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment="")             
   
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- check position existence
  // if(!PositionSelectByTicket(ticket))
 //     return(false);
   string symbol=PositionGetString(POSITION_SYMBOL);
//--- clean
   ClearStructures();
//--- check filling
   if(!FillingCheck(symbol))
      return(false);
//--- check
   if((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
     {
      //--- prepare request for close BUY position
      m_request.type =ORDER_TYPE_SELL_STOP;
     
     }
   else
     {
      //--- prepare request for close SELL position
      m_request.type =ORDER_TYPE_BUY_STOP;
     
     }
//--- setting request
   m_request.action   =TRADE_ACTION_PENDING;
 //  m_request.position =ticket;
   m_request.position=PositionGetInteger(POSITION_TICKET);
   m_request.symbol   =symbol;
   m_request.volume   =PositionGetDouble(POSITION_VOLUME);
   m_request.magic    =m_magic;
   m_request.deviation=(deviation==ULONG_MAX) ? m_deviation : deviation;
   m_request.stoplimit   =0;
   m_request.price       =price;
   m_request.type_time   =type_time;
   m_request.expiration  =expiration;

回测时 发现 这个平仓 函数从来 就 没有 成功 执行 过  ,问题在哪里 呢  ,难道  MT5   没办法 用      TRADE_ACTION_PENDING 模式平仓 ,     TRADE_ACTION_PENDING 模式      只能    开仓  ?

 

Forum on trading, automated trading systems and testing trading strategies

When you post code please use the CODE button (Alt-S)!

Use the CODE button


原因: