... no MQL5.
Não sei a estrutura do seu código, então o código poderia ser otimizado, mas poderia ser algo mais ou menos assim:
void PrintOnLoss(const string& symbol, uint ea_magic) { if(HistorySelect(0,TimeCurrent())==false) return; // seleciona todo o período dentro do histórico de trades int deals_total=HistoryDealsTotal(); // obtém o total de trades do período for(int i = deals_total-1; i >=0; --i) // loop por todo o histórico, desde o trade mais atual, até achar o último trade no símbolo e com o magic number do EA { ulong ticket = HistoryDealGetTicket(i); string tmp_symbol=HistoryDealGetString(ticket,DEAL_SYMBOL); if(tmp_symbol==symbol) { ulong magic = HistoryDealGetInteger(ticket,DEAL_MAGIC); if(magic==ea_magic) { double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT); // obtém o lucro do trade de index i int reason=HistoryDealGetInteger(ticket,DEAL_REASON); // obtém a razão de execução do trade de index i double price=HistoryDealGetDouble(ticket,DEAL_PRICE); // obtém o preço de saída if(profit<0) { Print(">>> Trade encerrado com prejuízo: R$ ", profit, " - preço: ", price); } if(reason==DEAL_REASON_SL) { Print(">>> Trade encerrado com execução no stop loss - preço: ", price); } return; } } } }
Você pode obter tanto o lucro quanto a razão de execução. Veja que é possível que um trade dê loss, mas ainda assim seja executado no take profit (quando você faz trailing stop e o preço de execução do TP é abaixo do preço de entrada numa operação de venda, por exemplo), assim como é possível que o trade dê loss sem execução do TP/SL (fechamento pelo usuário, por exemplo). Aí vai de você qual informação você pretende obter.
Quando você seleciona o histórico, todos os negócios (deals, que consistem basicamente na execução de uma compra ou venda) são obtidos para aquele período, ou seja, todos os trades de entrada e saída da operação. Se você quiser, ainda pode inserir a linha
ENUM_DEAL_ENTRY entry_type = HistoryDealGetInteger(ticket,DEAL_ENTRY);
para identificar se o negócio foi de entrada ou saída. Os negócios de entrada sempre retornam 0 como lucro, enquanto os de saída podem retornar qualquer valor (positivo para lucro ou negativo para prejuízo). É o mais adequado, tendo em vista a possibilidade de sair no breakeven. Não coloquei no exemplo porque normalmente não uso breakeven nos meus EAs, então como sei que não tem a possibilidade de sair no 0, não preciso checar nos meus códigos (mas acho que é bom, até porque você elimina a possibilidade de continuar parte do loop com antecedência, tornando o código mais eficaz).
- 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
Prezados.
Preciso implementa no meu código um "se ocorrer um stop loss" informe o valor do preço de fechamento da ordem.
Alguém poderia indicar alguma artigo ou passar alguma exemplo de código?
Obrigado!