Resultado do Backtest e do Live são diferentes!

 

Boa tarde pessoal,

criei um robô que parece funcionar exatamente como esperado no "ao vivo" mas ao tentar rodar um backtest com a mesma data no "Cada tick é baseado em um tick real" os resultados são muito diferentes!

Observações:

1) A qualidade dos dados na página de backtest me informa que a qualidade é 100% (Peguei histórico curto para não haver problemas com valores antigos estarem errados)

2) Estou utilizando o mesmo robô, no mesmo ativo, na mesma janela de tempo que usei no "ao vivo". Mas no Backtest eu não tenho resultados parecidos.

3) Meu robo opera observando todos os ticks imputados, ele não funciona apenas com Abertura ,fechamento ,Máxima e mínima.

4) Minha corretora é a XP Investimentos.


Dúvidas: O que pode estar fazendo os resultados serem diferentes? O Bid/ask não ser calculado no backtest? Algum erro de programação meu que só afeta o backtest? Como é possível que algo assim aconteça? A conclusão pode ser que para esse tipo de operação onde preciso levar o tick by tick em consideração o Backtest não me serve de nada para testar se meus parâmetros são descentes?

Muito obrigado em avanço por qualquer ajuda.

 
Wolfie.br:

Boa tarde pessoal,

criei um robô que parece funcionar exatamente como esperado no "ao vivo" mas ao tentar rodar um backtest com a mesma data no "Cada tick é baseado em um tick real" os resultados são muito diferentes!

Observações:

1) A qualidade dos dados na página de backtest me informa que a qualidade é 100% (Peguei histórico curto para não haver problemas com valores antigos estarem errados)

2) Estou utilizando o mesmo robô, no mesmo ativo, na mesma janela de tempo que usei no "ao vivo". Mas no Backtest eu não tenho resultados parecidos.

3) Meu robo opera observando todos os ticks imputados, ele não funciona apenas com Abertura ,fechamento ,Máxima e mínima.

4) Minha corretora é a XP Investimentos.


Dúvidas: O que pode estar fazendo os resultados serem diferentes? O Bid/ask não ser calculado no backtest? Algum erro de programação meu que só afeta o backtest? Como é possível que algo assim aconteça? A conclusão pode ser que para esse tipo de operação onde preciso levar o tick by tick em consideração o Backtest não me serve de nada para testar se meus parâmetros são descentes?

Muito obrigado em avanço por qualquer ajuda.

Defina: "Ao Vivo" - É em uma Conta REAL, ou DEMO??


Se você comprarar os trades feitos no seu "Ao Vivo" com um Backtest visual desse mesmo período, você mesmo vai saber onde está a diferença...

Lembrando que backtest não respeita Fila no Book de Ofertas...

 

Para backtests, a maior fidelidade é rodar com os candles fechados, pois há uma limitação do histórico de ticks reais (um pouco mais de 1 dia atrás).


Caso queira mesmo testar com os ticks, você precisará carregar externamente o histórico de ticks. O que vi o pessoal fazer é rodar um script em tempo de mercado para coletar esses ticks e informações de book. Para aí sim conseguir um histórico mais fiel para essas estratégias.

 
Wolfie.br:

Boa tarde pessoal,

criei um robô que parece funcionar exatamente como esperado no "ao vivo" mas ao tentar rodar um backtest com a mesma data no "Cada tick é baseado em um tick real" os resultados são muito diferentes!

Observações:

1) A qualidade dos dados na página de backtest me informa que a qualidade é 100% (Peguei histórico curto para não haver problemas com valores antigos estarem errados)

2) Estou utilizando o mesmo robô, no mesmo ativo, na mesma janela de tempo que usei no "ao vivo". Mas no Backtest eu não tenho resultados parecidos.

3) Meu robo opera observando todos os ticks imputados, ele não funciona apenas com Abertura ,fechamento ,Máxima e mínima.

4) Minha corretora é a XP Investimentos.


Dúvidas: O que pode estar fazendo os resultados serem diferentes? O Bid/ask não ser calculado no backtest? Algum erro de programação meu que só afeta o backtest? Como é possível que algo assim aconteça? A conclusão pode ser que para esse tipo de operação onde preciso levar o tick by tick em consideração o Backtest não me serve de nada para testar se meus parâmetros são descentes?

Muito obrigado em avanço por qualquer ajuda.

Eu tive exatamente este mesmo problema, algo que me tirou o sono. Não sei se é o mesmo motivo, mas é exatamente o mesmo problema.

O meu problema estava no indicador que eu havia criado. Algo no código, que ainda não descobri o que era, pois fiz tudo novamente me baseando em um indicador existente, mas tive a certeza que era o indicador.

Aí eu pergunto, você está usando um indicador personalizado?

Estou perguntando, pois não faz sentido ser o indicador e por isso perdi muito tempo procurando o problema no robô. Então, se você está usando um indicador personalizado, provavelmente o problema está nele.

 
Flavio Jarabeck #:

Defina: "Ao Vivo" - É em uma Conta REAL, ou DEMO??


Se você comprarar os trades feitos no seu "Ao Vivo" com um Backtest visual desse mesmo período, você mesmo vai saber onde está a diferença...

Lembrando que backtest não respeita Fila no Book de Ofertas...

Conta DEMO, no caso conta HEDGE.

O backtest não respeita o book, mas isso não deveria fazer os trades performarem pior que o DEMO não?

 
Wolfie.br #:

Conta DEMO, no caso conta HEDGE.

O backtest não respeita o book, mas isso não deveria fazer os trades performarem pior que o DEMO não?

Sim. Podem performar MELHOR ou PIOR.   É Scalping?


E agora, defina "Backtest" - É Backtest Visual, Otimização Lenta, Otimização Genética...?

 
Wolfie.br:

Boa tarde pessoal,

criei um robô que parece funcionar exatamente como esperado no "ao vivo" mas ao tentar rodar um backtest com a mesma data no "Cada tick é baseado em um tick real" os resultados são muito diferentes!

Observações:

1) A qualidade dos dados na página de backtest me informa que a qualidade é 100% (Peguei histórico curto para não haver problemas com valores antigos estarem errados)

2) Estou utilizando o mesmo robô, no mesmo ativo, na mesma janela de tempo que usei no "ao vivo". Mas no Backtest eu não tenho resultados parecidos.

3) Meu robo opera observando todos os ticks imputados, ele não funciona apenas com Abertura ,fechamento ,Máxima e mínima.

4) Minha corretora é a XP Investimentos.


Dúvidas: O que pode estar fazendo os resultados serem diferentes? O Bid/ask não ser calculado no backtest? Algum erro de programação meu que só afeta o backtest? Como é possível que algo assim aconteça? A conclusão pode ser que para esse tipo de operação onde preciso levar o tick by tick em consideração o Backtest não me serve de nada para testar se meus parâmetros são descentes?

Muito obrigado em avanço por qualquer ajuda.

Jamais você conseguirá o mesmo resultado do REAL com Backtest.

No ambiente Real a uma fila de ordens a cada preço e a forma com que a corretora efetua a ordem faz com que os preços de entrada e saida sejam diferentes dos que foram colocados "na pedra". Isso me tirou muito o sono mas nao tem oque ser feito...  até testei desligando o RLP mas nao adiantou.. no meu caso desenvolvi uma carteira onde cada robo faça apenas uma entrada uma vez ao dia... quanto mais entradas seu robo fizer mais diferença com o Backtest vai gerar.

 
Wolfie.br:

Boa tarde pessoal,

criei um robô que parece funcionar exatamente como esperado no "ao vivo" mas ao tentar rodar um backtest com a mesma data no "Cada tick é baseado em um tick real" os resultados são muito diferentes!

Observações:

1) A qualidade dos dados na página de backtest me informa que a qualidade é 100% (Peguei histórico curto para não haver problemas com valores antigos estarem errados)

2) Estou utilizando o mesmo robô, no mesmo ativo, na mesma janela de tempo que usei no "ao vivo". Mas no Backtest eu não tenho resultados parecidos.

3) Meu robo opera observando todos os ticks imputados, ele não funciona apenas com Abertura ,fechamento ,Máxima e mínima.

4) Minha corretora é a XP Investimentos.


Dúvidas: O que pode estar fazendo os resultados serem diferentes? O Bid/ask não ser calculado no backtest? Algum erro de programação meu que só afeta o backtest? Como é possível que algo assim aconteça? A conclusão pode ser que para esse tipo de operação onde preciso levar o tick by tick em consideração o Backtest não me serve de nada para testar se meus parâmetros são descentes?

Muito obrigado em avanço por qualquer ajuda.

Servem sim e faz toda a diferença em suas estratégias.

Algumas coisas podem levar a discrepância nos dados e de fato, será impossível realizar os mesmos valores visto que, quando você estiver ao vivo nem sempre suas ordens estão sendo enviadas no tempo que esta marcando como ping entre você e o servidor.

Próxima vez que estiver "ao vivo" observe o tempo em ms que levam para suas ordens serem de fato aceitas e efetivadas.

Aqui por exemplo tenho um tempo de ping em torno de 38ms no entanto, o tempo de fato gira em torno de 112ms para cima.

Você pode observar isso no log da caixa de ferramentas na aba diário quando seu robô realizar alguma ação. Em alguns momentos terá retornos acima dos 1000ms muito provavelmente.

Realizar ações muito próximas como estratégias baseadas em trailing stop geram esse atraso a mais. 

Mas isso invalida utilizar tick a tick baseado em ticks reais? De maneira alguma, apesar da discrepância você ainda estará mais próximo do real. 

Pode também, para amenizar esses percalços, incluir em seus backtests a latência na janela de configurações, um valor fixo ou variável. Mas dificilmente, é muito improvável que você consiga os mesmos intervalos que ocorrerão durante um pregão. 

Situações como a mencionada anteriormente como, não haver fila, também irão gerar discrepância nos resultados mas, ainda assim é o mais próximo que podemos chegar e, apesar dos pesares, é excepcional termos a disposição essa ferramenta. 

Por fim, um robô tick a tick baseado em ticks reais tem um grande diferencial pois da a possibilidade de incluir atuações no mercado que serão impossíveis àqueles que trabalham apenas como OHLC ou tick a tick (onde os valores são aleatórios dentro da faixa de abertura e fechamento do candle em análise) e também aos que atuam sob apenas abertura. 

Isso torna os demais modos de atuação inferiores? De modo algum e até mesmo atuando em tickes reais há estratégias em que o robô só necessita da abertura, ou da máxima, contudo eu não abro mão de atuar com os ticks reais pois é, para mim o modo mais próximo de encontrar o melhor momento de atuação no mercado. 

No início também fiquei muito receoso, até porque tomei uma bela lavada quando iniciei criando o robô e, sem informação suficiente ainda, depois de fazer testes no modo tick a tick (que julgava ser suficiente) perdi depois de alguns dias o capital que investi. Foi duro mas, isso me levou a me aprofundar no assunto.

Hoje possuo um robô rentável e consistente e sim, os resultados se desencontram, pouco mais se desencontram, então, meu foco nos testes é rebaixamento.

Se há um rebaixamento muito "largo" em uma dada estratégia ela se torna de maior risco, devido a essa variação de valores que conversamos agora, contudo, se ele sair vencedor, depois de testado em mais de um contrato (winz, wing, winj etc), é o suficiente. Ele terá lucro na real. 

Agora, no meu caso, para que isso fosse possível eu precisei dar a devida atenção ao gerenciamento dos riscos que, para mim hoje é o fator mais importante. 

Sucesso por aí.