comentario quando encerra a posição

 
Minha operação é controlada por valor financeiro e não por pontos (mini indice). E quando a operação atinge a meta ou o limite de perda a funcao PositionClose é chamada, encerrando a operação. Existe alguma maneira e inserir um comentário quando encerrar a operação de uma maneira que esse comentário apareça no relatório do metatrader quando eu fizer um backtest?
 
Marcel Cardoso:
Minha operação é controlada por valor financeiro e não por pontos (mini indice). E quando a operação atinge a meta ou o limite de perda a funcao PositionClose é chamada, encerrando a operação. Existe alguma maneira e inserir um comentário quando encerrar a operação de uma maneira que esse comentário apareça no relatório do metatrader quando eu fizer um backtest?

Olá Marcel, parece que vc está utilizando a classe CTrade da biblioteca padrão, e neste caso o método PositionClose não permite a inserção de um comentário na ordem. (Engraçado que os outros métodos dão esta opção ao programador).

Existem algumas formas de driblar esta característica da classe:

1º Copiar a CTrade como uma classe sua e editar o que vc deseja nela, como por exemplo, modificar o método PositionClose para permitir enviar um comentário nele. Eu não recomendo muito esta ideia, porque sua classe deixa de ser da biblioteca e você perde eventuais atualizações e esta ideia não é a mais elegante, fugindo um pouco dos bons princípios de programação.

2º Criar uma outra classe que herda a classe CTrade, e nela fazer as modificações necessárias. Como na CTrade é tudo public ou protected, é possível fazer bastante coisa desta forma. Eu faria algo desta forma:

#include <Trade\Trade.mqh>

class CMyTrade: public CTrade
  {
protected:
    bool m_comentarOrdem;
    string m_comentario;

public:
                     CMyTrade(void);
                     ~CMyTrade(void);
   bool              PositionClose(const string symbol,const ulong deviation=ULONG_MAX, string comment="");
   bool              PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX, string comment="");
   virtual bool      OrderSend(const MqlTradeRequest &request,MqlTradeResult &result) override;
  };
  
CMyTrade::CMyTrade(void) : m_comentarOrdem(false),
                           m_comentario(NULL)
  {
  }

bool CMyTrade::PositionClose(const string symbol,const ulong deviation=ULONG_MAX,string comment="")
  {
   if(comment!= NULL)
     {
      m_comentarOrdem = true;
      m_comentario = comment;
     }
   return(CTrade::PositionClose(symbol,deviation));
  }

bool CMyTrade::PositionClose(const ulong ticket,const ulong deviation=ULONG_MAX,string comment="")
  {
   if(comment!= NULL)
     {
      m_comentarOrdem = true;
      m_comentario = comment;
     }
   return(CTrade::PositionClose(ticket,deviation));
  }

bool CMyTrade::OrderSend(const MqlTradeRequest &request,MqlTradeResult &result)
  {
   if(m_comentarOrdem)
     {
      m_request.comment = m_comentario;
      m_comentarOrdem = false;
      m_comentario = NULL;
     }
   return(CTrade::OrderSend(m_request,m_result));
  }             
 
Marcel Cardoso:
Minha operação é controlada por valor financeiro e não por pontos (mini indice). E quando a operação atinge a meta ou o limite de perda a funcao PositionClose é chamada, encerrando a operação. Existe alguma maneira e inserir um comentário quando encerrar a operação de uma maneira que esse comentário apareça no relatório do metatrader quando eu fizer um backtest?
Se for uma conta NETTING, voce pode usar a função PositionOpen da CTrade pra mandar a operação contraria e colocar o comentario desejado sem precisar altera-la.