Caros colegas,
Como que eu faço uma conexão com OnTradeTransaction pra saber que a primeira e a segunda operação foram consecutivamente perdedoras? Eu chamo a função abaixo em OnTick() e ela impede o robô de operar uma eventual terceira vez no dia, que é basicamente o que eu quero, porém dessa forma fica indefinido se estes deals são de gain ou se são de loss. Eu preciso que o meu EA pare de operar após o segundo deal do dia, sendo que tanto o primeiro quanto o segundo devem ser necessariamente perdedores. Tem algum jeito de inserir o DEAL_PROFIT nessa função? Alguma sugestão? Muito obrigado.
. . .
Bom dia!
Veja se essa função ajuda:
//+------------------------------------------------------------------+ //| Limitar o número de trades perdedores consecutivos no dia | //+------------------------------------------------------------------+ bool LimitLossTrade(const int limit) { int consec_loss = 0; datetime time_start = iTime(_Symbol, PERIOD_D1, 0); if(HistorySelect(time_start, TimeCurrent())) { for(int i = HistoryDealsTotal() - 1; i >= 0; i--) { const ulong ticket = HistoryDealGetTicket(i); if(HistoryDealGetString(ticket, DEAL_SYMBOL) == _Symbol && HistoryDealGetInteger(ticket, DEAL_MAGIC) == MAGICNUM) { if(HistoryDealGetDouble(ticket, DEAL_PROFIT) < 0.0) {consec_loss++;} else if(HistoryDealGetDouble(ticket, DEAL_PROFIT) > 0.0) {consec_loss=0;} } if(consec_loss >= limit) {return(true);} } } else { Print("Erro ao recuperar o histórico de operações ..."); } return(false); }
Bom dia!
Veja se essa função ajuda:
Olá, Vinicius. Testei sua função e me parece que o DEAL_PROFIT não funciona fora do escopo de OnTradeTransaction. Será que eu estou errado? Na dúvida pedi para imprimir várias vezes e o DEAL_PROFIT sempre me retornando o número 9, que não sei de onde saiu esse valor. Vou continuar tentando e se eu progredir eu volto a postar aqui. Obrigado pela atenção. Abraço.
Crie um contador de candles com o timeframe diário
Olá, Felipe. Pode me dar um exemplo com algum pedaço de código? Já estou há 2 dias empacado procurando a solução e já vasculhei todo o fórum sem sucesso. Abraço.
Boa noite,
Um deal (transação) corresponde a uma parcela da ordem que está sendo preenchida ( executada ) ... então para obter o resultado de uma posição que acabou de ser encerrada, no OnTradeTransaction() você deve somar o DEAL_PROFIT de todos os deals referentes a essa posição ( DEAL_POSITION_ID ).
Em DEMO as ofertas qtd x preço do book não são enxergadas, ou seja a liquidez não tem limite, uma ordem é totalmente preenchida pelo preço da primeira oferta e consequentemente você tem somente um deal. Em conta REAL a ordem é preenchida (executada) obedecendo as qtds ofertadas em cada linha do book consequentemente você tem vários deals até o preenchimento completo da ordem.
Boa noite,
Um deal (transação) corresponde a uma parcela da ordem que está sendo preenchida ( executada ) ... então para obter o resultado de uma posição que acabou de ser encerrada, no OnTradeTransaction() você deve somar o DEAL_PROFIT de todos os deals referentes a essa posição ( DEAL_POSITION_ID ).
Em DEMO as ofertas qtd x preço do book não são enxergadas, ou seja a liquidez não tem limite, uma ordem é totalmente preenchida pelo preço da primeira oferta e consequentemente você tem somente um deal. Em conta REAL a ordem é preenchida (executada) obedecendo as qtds ofertadas em cada linha do book consequentemente você tem vários deals até o preenchimento completo da ordem.
Então dentro dessa única ação de comprei/vendi ou vice-versa posso ter vários deals dependendo do consumo de liquidez do book, tendo que somar tudo para ver se o resultado foi positivo ou negativo. Obrigado, Rogério. Vou tentar desenvolver essa ideia e aplicar no meu caso.
Olá, Vinicius. Testei sua função e me parece que o DEAL_PROFIT não funciona fora do escopo de OnTradeTransaction. Será que eu estou errado? Na dúvida pedi para imprimir várias vezes e o DEAL_PROFIT sempre me retornando o número 9, que não sei de onde saiu esse valor. Vou continuar tentando e se eu progredir eu volto a postar aqui. Obrigado pela atenção. Abraço.
Olá, Daniel! Você testou a função a partir de OnTick() ? Eu testei aqui em corretora Forex e funcionou normalmente. Você só precisa adicionar a função como uma condição a mais antes de abrir nova posição:
if(!LimitLossTrade(2) && ... )
Olá, Daniel! Você testou a função a partir de OnTick() ? Eu testei aqui em corretora Forex e funcionou normalmente. Você só precisa adicionar a função como uma condição a mais antes de abrir nova posição:
Boa tarde, Vinicius. Agora funcionou! Eu estava esquecendo de usar a negação (!) na chamada dentro de OnTick(). E como já suspeitava o robô melhorou a performance no backtest ao limitar a essas duas operações perdedoras. Só fiquei sem entender porque ele imprime o DEAL_PROFIT como 9, independente se o resultado é negativou ou positivo, mas isso pra mim é irrelevante, só mera questão de curiosidade mesmo, pois funcionalmente está perfeito. Muito obrigado! Abraço.
Boa tarde, Vinicius. Agora funcionou! Eu estava esquecendo de usar a negação (!) na chamada dentro de OnTick(). E como já suspeitava o robô melhorou a performance no backtest ao limitar a essas duas operações perdedoras. Só fiquei sem entender porque ele imprime o DEAL_PROFIT como 9, independente se o resultado é negativou ou positivo, mas isso pra mim é irrelevante, só mera questão de curiosidade mesmo, pois funcionalmente está perfeito. Muito obrigado! Abraço.
Beleza Daniel! Abraço!

- 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
Caros colegas,
Como que eu faço uma conexão com OnTradeTransaction pra saber que a primeira e a segunda operação foram consecutivamente perdedoras? Eu chamo a função abaixo em OnTick() e ela impede o robô de operar uma eventual terceira vez no dia, que é basicamente o que eu quero, porém dessa forma fica indefinido se estes deals são de gain ou se são de loss. Eu preciso que o meu EA pare de operar após o segundo deal do dia, sendo que tanto o primeiro quanto o segundo devem ser necessariamente perdedores. Tem algum jeito de inserir o DEAL_PROFIT nessa função? Alguma sugestão? Muito obrigado.
Em OnTick() eu estou fazendo a chamada da seguinte forma:
(...)
if(firstAndSecondTradeStopped())
{
Compra/Venda
}