- Encerrar Posição Oposta - Negociação - MetaTrader 5 para Android
- Encerrar Posição Oposta - Negociação - MetaTrader 5 para iPhone
- Abertura e Fechamento de Posições - Negociação - MetaTrader 5 para iPhone
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)); }
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?
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso