Boa tarde, sou iniciante em MQL, estou desenvolvendo um EA que lança ordem conforme a ordem anterior, se ela atingiu TP ou SL, qual a melhor forma de fazer isso?
esse código está errado? debuguei para saber o valor de dealReason e só tenho o retorno de : DEAL_REASON_CLIENT
ai resolvi trabalhar com o lucro/prejuízo, mas ainda não obtive sucesso. Alguma sugestão?
[]'s
Oi, como vai?
Eu vou te ajudar, porém precisamos clarificar a questão.
Deseja o retorno do motivo do fechamento ou o resultadoFinanceiro da operação?
Olá,
bem está faltando o comando abaixo. Antes de varrer o histórico de posições é necessário obtê-lo.
bool HistorySelect( |
Uma solução mais otimizada é usar o evento OnTradeTrasnsaction(), segue um modelo para usar.
void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { ulong deal_magic=0; ENUM_DEAL_TYPE deal_type; ENUM_DEAL_ENTRY deal_entry; ENUM_DEAL_REASON deal_reason; double deal_profit=0; if(trans.type==TRADE_TRANSACTION_DEAL_ADD && trans.symbol==_Symbol) { if(HistoryDealSelect(trans.deal)) { deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC); deal_entry=(ENUM_DEAL_ENTRY) HistoryDealGetInteger(trans.deal,DEAL_ENTRY); deal_reason=(ENUM_DEAL_REASON) HistoryDealGetInteger(trans.deal,DEAL_REASON); if(deal_magic==inpMagicNumber) { if(deal_entry!=DEAL_ENTRY_IN) { if((ENUM_DEAL_REASON) deal_reason==DEAL_REASON_TP || (ENUM_DEAL_REASON) deal_reason==DEAL_REASON_SL) deal_profit=HistoryDealGetDouble(trans.deal,DEAL_PROFIT); } if((ENUM_DEAL_ENTRY)deal_entry==DEAL_ENTRY_IN) { // --- } } } } }
Oi, como vai?
Eu vou te ajudar, porém precisamos clarificar a questão.
Deseja o retorno do motivo do fechamento ou o resultadoFinanceiro da operação?
gostaria que fosse identificado se a operação foi fechada em SL ou TP para prosseguir com a estratégia.
Olá,
bem está faltando o comando abaixo. Antes de varrer o histórico de posições é necessário obtê-lo.
bool HistorySelect( |
Uma solução mais otimizada é usar o evento OnTradeTrasnsaction(), segue um modelo para usar.
e para garantir apenas sobre a última ordem ? também é necessário fazer o HistorySelect? eu queria apenas saber se a última ordem foi TP ou SL que fez ela parar.
Evandro,
eu já te respondi é só ler. Se ainda tem duvida leia a documentação do MQL5 referente ao comando.
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- 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
esse código está errado? debuguei para saber o valor de dealReason e só tenho o retorno de : DEAL_REASON_CLIENT
ai resolvi trabalhar com o lucro/prejuízo, mas ainda não obtive sucesso. Alguma sugestão?
[]'s