我需要从 comment获取订单的级别信息, 当用EA平掉一个订单的一部分仓位后,该订单的持仓部分的comment会消失

 
我需要从 comment获取订单的级别信息, 当用EA平掉一个订单的一部分仓位后,该订单的持仓部分的comment会消失,只能在历史订单中看到原有的 comment。如何避免?
 
universework:
我需要从 comment获取订单的级别信息, 当用EA平掉一个订单的一部分仓位后,该订单的持仓部分的comment会消失,只能在历史订单中看到原有的 comment。如何避免?

平仓之前先获取订单的comment,赋给request.comment即可.

 
Ziheng Zhuang #:

平仓之前先获取订单的comment,赋给request.comment即可.

试了下,comment装不进去。

 

 当用EA平掉一个订单的一部分仓位后,该订单的持仓部分的comment会消失,只能在历史订单中看到原有的 comment,下面是历史订单。如何避免?


 
universework #:

试了下,comment装不进去。

你应该先把要平仓的单子选中,再调用PositionGetString(...)

 
Ziheng Zhuang #:

你应该先把要平仓的单子选中,再调用PositionGetString(...)

选中了,但没有实现。问题似乎是标准程序库提供的PositionClosePartial( ... )函数没法与 PositionGetString(...)构建联系

 

虽然获得了单子的注释,但是request你根本就没有用.

你需要重写标准库的PositionClosePartial成员函数,或者你自己写个独立的部分平仓函数.

 

简单点吧,你把标准库Trade.mqh中部分平仓成员函数中增加一条语句:m_request.comment = PositionGetString(POSITION_COMMENT); 

如下:

bool CTrade::PositionClosePartial(const ulong ticket,const double volume,const ulong deviation)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- for hedging mode only
   if(!IsHedging())
      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;
      m_request.price=SymbolInfoDouble(symbol,SYMBOL_BID);
     }
   else
     {
      //--- prepare request for close SELL position
      m_request.type =ORDER_TYPE_BUY;
      m_request.price=SymbolInfoDouble(symbol,SYMBOL_ASK);
     }
//--- check volume
   double position_volume=PositionGetDouble(POSITION_VOLUME);
   if(position_volume>volume)
      position_volume=volume;
//--- setting request
   m_request.action   =TRADE_ACTION_DEAL;
   m_request.position =ticket;
   m_request.symbol   =symbol;
   m_request.volume   =position_volume;
   m_request.magic    =m_magic;
   m_request.deviation=(deviation==ULONG_MAX) ? m_deviation : deviation;
   m_request.comment = PositionGetString(POSITION_COMMENT); //增加这条语句
//--- close position
   return(OrderSend(m_request,m_result));
  }
 
Ziheng Zhuang #:

简单点吧,你把标准库Trade.mqh中部分平仓成员函数中增加一条语句:m_request.comment = PositionGetString(POSITION_COMMENT); 

如下:

大佬万寿无疆