Backtest: Ordem de stop loss não é "executada" mesmo o preço atingindo o valor definido como stop loss

 

Estou implementando uma estratégia simples, compra com a média ascendente e vende caso o candle feche abaixo da média. Então quando eu executo o backtest com a modelagem "Cada tick", ele executa da forma como é o esperado, imagem das operações que eu espero que o EA execute em anexo (mt5_cada_tick.PNG).


Porém se eu executo o mesmo backtest com a modelagem "Cada tick é baseado em um tick real" ele simplesmente não executa a ordem de stop loss. (Ver anexo mt5_tick_real.PNG)


Eu imaginei em um primeiro momento que por algum motivo teria pulado o stoploss, mas eu verifiquei os candles desse período de meia hora e com certeza esse stop deveria ter sido executado, além de outro detalhe que é o fato que essa ordem foi de fato executada no "fim do pregão", porém a ordem já havia sido enviada as 15h.


Alguém faz alguma ideia do que isso possa ser? Estou utilizando o contrato WIN$D, moeda em BRL.


Não encontrei outro caso de alguém que tenha passado por isso, desconfio que talvez seja os dados da corretora, acham que pode influenciar?

Princípios básicos dos testes no MetaTrader 5
Princípios básicos dos testes no MetaTrader 5
  • www.mql5.com
A ideia da negociação automatizada é atraente devido ao fato de que o robô de negociação pode trabalhar por 24 horas por dia, sete dias por semana. O robô não se cansa, não fica em dúvida ou assustado, é totalmente livre de quaisquer problemas psicológicos. É o suficiente para claramente formalizar as regras de negociação e implementá-las nos...
Arquivos anexados:
 

Estou com esse mesmo problema. Creio que seja dados de impossível acesso das corretoras.

Na conta Demo, funciona perfeitamente. Porém na conta real nada de acontecer. 

Queria que abrisse e fechasse a casa tick/pip que eu colocasse a ordem de stop Loss.


Se souber de algo desse tipo, por favor me informe. E se eu souber te aviso.

 
Samuel Tavares:

Queria que abrisse e fechasse a casa tick/pip que eu colocasse a ordem de stop Loss.

tick e pip são coisas distintas 

 
marcelolx:

Estou implementando uma estratégia simples, compra com a média ascendente e vende caso o candle feche abaixo da média. Então quando eu executo o backtest com a modelagem "Cada tick", ele executa da forma como é o esperado, imagem das operações que eu espero que o EA execute em anexo (mt5_cada_tick.PNG).


Porém se eu executo o mesmo backtest com a modelagem "Cada tick é baseado em um tick real" ele simplesmente não executa a ordem de stop loss. (Ver anexo mt5_tick_real.PNG)


Eu imaginei em um primeiro momento que por algum motivo teria pulado o stoploss, mas eu verifiquei os candles desse período de meia hora e com certeza esse stop deveria ter sido executado, além de outro detalhe que é o fato que essa ordem foi de fato executada no "fim do pregão", porém a ordem já havia sido enviada as 15h.


Alguém faz alguma ideia do que isso possa ser? Estou utilizando o contrato WIN$D, moeda em BRL.


Não encontrei outro caso de alguém que tenha passado por isso, desconfio que talvez seja os dados da corretora, acham que pode influenciar?

Estou com um problema parecido No modo de ticks reais. Coloco o stop, por exemplo, a 50 pontos no mi índice e quando o preço passa o stop, o prejuízo não bate com o valor pelo qual programei de stop loss. Já ate coloquei para rodar bem lentamente no momento que o preço ia pegar o stop, ele estava lá com 50 pontos certinho marcado na tela, mas quando aciona o stop em vez de dar um prejuízo de 10 reais, da um prejuízo de 3. ou seja, é como se o meu stop estivesse a 15 pontos. 

Já desabilitei todas as funções de negociação que possivelmente pudessem estar sendo acionadas para fechar a operação, mas mesmo assim não resolveu.


O mesmo erro acontece com o takeprofit. Coloco a 120 pontos no mini índice, o valor da ordem aparece na tela certinho com o valor de 120 pontos, mas quando é executado no backtest de ticks reais, não pega o valor cheio. As vezes da 90 pontos e as vezes 80 pontos.

Até agora não entendi o motivo de estar acontecendo isso.

 
Lucas:

Estou com um problema parecido No modo de ticks reais. Coloco o stop, por exemplo, a 50 pontos no mi índice e quando o preço passa o stop, o prejuízo não bate com o valor pelo qual programei de stop loss. Já ate coloquei para rodar bem lentamente no momento que o preço ia pegar o stop, ele estava lá com 50 pontos certinho marcado na tela, mas quando aciona o stop em vez de dar um prejuízo de 10 reais, da um prejuízo de 3. ou seja, é como se o meu stop estivesse a 15 pontos. 

Já desabilitei todas as funções de negociação que possivelmente pudessem estar sendo acionadas para fechar a operação, mas mesmo assim não resolveu.


O mesmo erro acontece com o takeprofit. Coloco a 120 pontos no mini índice, o valor da ordem aparece na tela certinho com o valor de 120 pontos, mas quando é executado no backtest de ticks reais, não pega o valor cheio. As vezes da 90 pontos e as vezes 80 pontos.

Até agora não entendi o motivo de estar acontecendo isso.

Não existe Valor Cheio no SL e TP do MT5. Leia a documentação. Os métodos de SL e TP do MT5 são Ordens à Mercado, e, o backtest do MT5 NÃO respeita fila no Book...
 
Flavio Jarabeck:
 Os métodos de SL e TP do MT5 são Ordens à Mercado

não sabia disso, pensei que colocando ordem pendente ( TRADE_ACTION_PENDING ) resolveria meu problema. Então quer dizer que mesmo assim e, colocado buy/sell limit, as ordens de SL e TP serão a mercado? Não faz muito sentido


quando eu falo em valor cheio, estou me referindo a pegar a quantidade de pontos exata pelo qual especifiquei como ganho ou, no caso de loss, como perda.


e, com certeza não respeita fila no book :-)

 
Lucas:

não sabia disso, pensei que colocando ordem pendente ( TRADE_ACTION_PENDING ) resolveria meu problema. Então quer dizer que mesmo assim e, colocado buy/sell limit, as ordens de SL e TP serão a mercado? Não faz muito sentido.

- Faz sentido. É um mecanismo seguro de execução de Ordens. Se quiser TP exato, use Ordens Limitadas. para SL eu prefiro que seja à mercado, pois é o último recurso de uma posição perdedora. Usar Ordens Limitadas para SL pode ser perigoso. Mas, depende do mercado, ativo e liquidez.


quando eu falo em valor cheio, estou me referindo a pegar a quantidade de pontos exata pelo qual especifiquei como ganho ou, no caso de loss, como perda.

- sim, entendi. SL e TP quase sempre não irão te dar isso. Mesmo com um mercado super-líquido. Tudo depende das condições do mercado naquele exato momento do disparo do SL/TP.

;)

 

Eu enfrento esse problema há vários anos.  

Nunca consegui corrigir 100%, sempre que eu rodo backtest nos meus EAs acontece essas distorções, principalmente se tento rodar varios meses ou anos pelo single test (teste único), pois sempre vai existir um dia ou outro com problema.

Eu acredito que isso acontece por falhas nos dados fornecidos pelas corretoras.

Em determinados momentos do histórico, os valores do bid/ask são perdidos ou perdem a sincronia com as barras de 1 minuto. Então o MT5 entende que existe esse "gap" entre os preços, porém não existiu no mercado "ao vivo".


Os moderadores do forum costumam dar respostas padrão tipo: "Isso é normal do mercado", porém eu já fiz diversos testes e comparações, na maioria das vezes não foi distorção do mercado e sim na qualidade dos dados fornecidos pelas corretoras mesmo.


Uma forma que eu tento contornar esse problema é rodar o backtest em corretoras diferentes e depois comparar o resultado das operações. Infelizmente é muito mais trabalhoso, mas se você quiser se aproximar da realidade eu acredito ser a melhor maneira.


Acredito que os desenvolvedores do MT5 poderiam aperfeiçoar a leitura desses dados no backtest e quando o programa identificar esse tipo de distorção, tomaria a decisão mais próxima da realidade. Já tive alguns casos que o backtest deu diferença de quase mil pontos na saída da operação.

Enfim, enquanto isso continuamos dando nosso jeito, é aquele ditado: "quen não tem cão, caça com gato!" Rsrsrs

 
Guilherme Mendonca:

Eu enfrento esse problema há vários anos.  

Nunca consegui corrigir 100%, sempre que eu rodo backtest nos meus EAs acontece essas distorções, principalmente se tento rodar varios meses ou anos pelo single test (teste único), pois sempre vai existir um dia ou outro com problema.

Eu acredito que isso acontece por falhas nos dados fornecidos pelas corretoras.

Em determinados momentos do histórico, os valores do bid/ask são perdidos ou perdem a sincronia com as barras de 1 minuto. Então o MT5 entende que existe esse "gap" entre os preços, porém não existiu no mercado "ao vivo".


Os moderadores do forum costumam dar respostas padrão tipo: "Isso é normal do mercado", porém eu já fiz diversos testes e comparações, na maioria das vezes não foi distorção do mercado e sim na qualidade dos dados fornecidos pelas corretoras mesmo.


Uma forma que eu tento contornar esse problema é rodar o backtest em corretoras diferentes e depois comparar o resultado das operações. Infelizmente é muito mais trabalhoso, mas se você quiser se aproximar da realidade eu acredito ser a melhor maneira.


Acredito que os desenvolvedores do MT5 poderiam aperfeiçoar a leitura desses dados no backtest e quando o programa identificar esse tipo de distorção, tomaria a decisão mais próxima da realidade. Já tive alguns casos que o backtest deu diferença de quase mil pontos na saída da operação.

Enfim, enquanto isso continuamos dando nosso jeito, é aquele ditado: "quen não tem cão, caça com gato!" Rsrsrs

Eu procuro sempre utilizar os candles fechados na criação dos setups, isso devido as corretoras não possuírem um histórico de ticks grande (salvam metade do dia anterior somente). Por isso busco sempre estratégias compatíveis com OHLC pela sua maior veracidade com o histórico disponível. 


Outra situação que identifiquei que acontece, é a necessidade de encerrar as ordens antes do encerramento do pregão. Isso porque em muitos casos o pessoal acaba não considerando que o Backtest carrega a posição aberta para o próximo dia, e devido aos gaps de abertura, isso dá um resultado bem divergente.

É importante considerar uma latência quando utilizar uma estratégia que usa ticks, isso pelo impacto da fila do Book. O que diverge bastante quando executado no ambiente real e isso infelizmente o backtest não consegue te indicar. 

Razão: