Testador de estratégia: diferença anormal entre "Cada tick" e "Cada tick é baseado em um tick real"

 

Olá, pessoal!

Estou há alguns dias ajustando meu EA e algo tem me incomodado. A diferença dos testes quando utilizo as duas formas indicadas no tópico são gritantes.

O mesmo EA, mesmo período, mesmos parâmetros, geram um resultado totalmente diferente.

Consegui encontrar leituras sobre os modos de testes e vi que o "Cada tick" seria o mais próximo da realidade. Não encontrei muita coisa sobre o "Cada tick é baseado em um tick real", mas o pouco que li, ele seria ainda mais aproximado da realidade que aquele.

Mas olhando os gráficos abaixo, não consigo ver essa similaridade entre eles.

Alguém poderia, por gentileza, indicar leitura que tente explicar melhor a diferença entre esses dois modos OU tentar explicar a diferença tão extrema notada nas imagens abaixo?

Grato!

Tick baseado em tick real


Cada tick

 
Flávio Henrique:

Olá, pessoal!

Estou há alguns dias ajustando meu EA e algo tem me incomodado. A diferença dos testes quando utilizo as duas formas indicadas no tópico são gritantes.

O mesmo EA, mesmo período, mesmos parâmetros, geram um resultado totalmente diferente.

Consegui encontrar leituras sobre os modos de testes e vi que o "Cada tick" seria o mais próximo da realidade. Não encontrei muita coisa sobre o "Cada tick é baseado em um tick real", mas o pouco que li, ele seria ainda mais aproximado da realidade que aquele.

Mas olhando os gráficos abaixo, não consigo ver essa similaridade entre eles.

Alguém poderia, por gentileza, indicar leitura que tente explicar melhor a diferença entre esses dois modos OU tentar explicar a diferença tão extrema notada nas imagens abaixo?

Grato!

Oi Flavio.

Não sei se sou a pessoa mais adequada pra responder porque não sou usuário do testador de estratégia do MT5 (é que meus algoritmos de trading se baseiam em machine learning e alguns usam informações do livro de ofertas, que não estão presentes nos ticks, de modo que precisei construir meu próprio testador).

Pra você entender o que está acontecendo, o primeiro passo é entender a diferença entre o modo "Cada tick" e o "Cada tick baseado em ticks reais".

O modo "Cada tick baseado em ticks reais", como o próprio nome diz, se baseia nos ticks reais gravados do pregão e por isso é o mais confiável.

Já o modo "Cada tick" não usa os ticks reais. Ele usa ticks gerados artificialmente a partir dos preços de abertura, fechamento, mínima e máxima das velas de 1 minuto.

O algoritmo que gera os ticks artificiais é descrito neste artigo. Como você pode ver no artigo, esse modo gera trajetórias de preço padronizadas no interior das velas.

Para a maioria das estratégias de trading, essa simulação com ticks artificiais do modo "Cada tick" fornece um resultado próximo ao resultado obtido com ticks reais e tem a vantagem de rodar bem mais rápido, já que o número de ticks processados geralmente é bem menor que o real.

Porém, algumas estratégias podem ser mais sensíveis à frenética variação de preço que acontece no interior de cada vela de 1 minuto, que costuma ser bem mais caótica e incerta que as trajetórias bem-comportadas (estilo "ondas de Elliot") que esse algoritmo de geração de ticks artificiais produz. Parece ser o caso da sua estratégia. Ela parece ter um ótimo desempenho naquele pregão idealizado dos ticks artificiais, mas capota no caos do pregão real.

Pra entender realmente as razões da diferença, só examinando o que está acontecendo tick a tick, no caso dos ticks artificiais e no caso dos ticks reais.

Por exemplo, se você estiver usando um "trailing stop" muito curto, pode acontecer de ter um bom desempenho nos ticks artificiais, que têm uma variação padronizada e suave dentro da vela, mas nos ticks reais o seu EA tomar uma séria de "violinadas" devido a um trailing stop-loss curto demais ("violinada" é quando você abre posição na direção certa, mas acaba tendo a posição encerrada prematuramente porque seu stop-loss estava muito próximo ao preço de entrada e o mercado deu um rápido sacolejo na direção contrária antes de ir na direção que você esperava).

Outra coisa que pode acontecer é "overfitting". Por exemplo, se você fizer muitos ajustes sucessivos nos parâmetros e na estratégia do seu EA de modo a maximizar o desempenho dele na simulação com ticks artificiais, você pode "viciá-lo" de modo a ele obter um bom desempenho nos ticks artificiais mas não conseguir generalizar esse mesmo desempenho para os ticks reais.

Finalizando (é sempre melhor saber das más notícias antes de ser surpreendido por elas), mesmo que a estratégia do seu EA esteja tendo um desempenho excepcional no testador de estratégia com ticks reais, ou até mesmo um ótimo desempenho na conta demo, isso ainda não significará que o seu EA terá o mesmo desempenho no mercado real, pois aqui entrarão em cena vários outros fatores, tais como tempo de processamento, latência de rede, tamanho das filas, tempo de execução da ordem, etc.

Resumo: só confie no resultado do testador no modo "baseado em ticks reais". Use os outros modos somente quando estiver com pressa e se contentar com uma simulação "meia-boca".

 

Olá, Patinhas.

Grato pela resposta.

Sobre o método "Cada tick" eu tinha lido o artigo e entendido que as variações entre os valores OHLC eram gerados artificialmente. Fiquei até surpreso por isso, mas...

É sobre o outro método que queria saber mais, pois no artigo há umas 2 frases só.

No modo "tick baseado em tick real" utiliza realmente os ticks gerados pela operadora? Na sequência que ocorreram?

E quanto à qualidade dos ticks da operadora? Alguma estratégia para melhorá-los?

Por exemplo: notei que na Modal, a qualidade é sofrível. Não faço ideia da razão. Na clear, parece ser pior!

Veja, por exemplo, na primeira imagem que há 3 ou 4 picos de ganhos que foram gerados por bids/asks fora do normal. Dá uma canseira encontrar esses ticks "errados" para exclui-los.

A verdade é que, por mais que o teste indique que a estratégia parece ser boa, não tenho a mínima confiança. E deixar rodar o EA live, mesmo em conta demo, vai demorar muito pra eu ter ideia se a estratégia é ou não lucrativa.

Daí a dúvida que tenho no momento: como confiar nos testes?

 

Algumas hipóteses que talvez possam explicar esses "picos de ganho gerados por bids/asks fora do normal":

1) Uso de série histórica inadequada no teste (caso o ativo testado seja um contrato futuro).

Geralmente as corretoras fornecem 6 tipos de série históricas para contratos futuros. Veja detalhes sobre cada uma delas aqui.

2) Pagamento de dividendos ou outros tipos de proventos (caso o ativo testado seja uma ação).

Quando uma ação fica "ex-dividendos", o preço de mercado dela diminui subitamente, compensando o valor pago em dividendos. Se o testador não tiver conhecimento disso, pode contabilizar um lucros ou prejuízos irreais.

3) Leilões.

Os leilões acontecem geralmente na abertura e no fechamento do mercado, mas também podem ser iniciados automaticamente em qualquer momento durante o pregão, sempre que ocorrer uma variação muito rápida no preço de mercado que ultrapasse os limites dos "túneis de negociação".

Durante o leilão, a execução das ordens é suspensa e com isso as ofertas de compra e de venda geralmente se sobrepõem no livro de ofertas, fazendo com que o preço BID (melhor oferta de compra) fique acima do ASK (melhor oferta de venda).

Se o testador de estratégia não souber lidar com leilões, vai interpretar equivocadamente que naquele momento era possível comprar pelo preço ASK e vender pelo preço BID, quando na verdade a negociação está bloqueada e qualquer ordem emitida naquele momento não será executada nem pelo preço ASK nem pelo BID, mas sim pelo preço calculado ao final do leilão. Essa confusão poderia contabilizar lucros altos e irreais nos momentos de leilão, uma vez que durante o leilão é comum o preço BID ficar acima do ASK (às vezes muito acima e durante vários minutos).

Não sei como o testador de estratégia do MT5 lida com os leilões, pois, como falei, não o uso. Tenho dúvidas sobre isso, uma vez que o MT5 foi concebido com foco no Forex, que é um mercado em que não ocorrem leilões e o BID fica sempre abaixo do ASK. Alguém sabe?

No seu caso, pelas datas em que ocorrem os "picos de ganho", não parece ser problema de série histórica e nem de dividendos.

Será que o ativo que você estava negociando estava em leilão quando esses picos de ganho aconteceram? Verifique isso no histórico de ticks. Se o BID estiver acima do ASK naquele momento, então é porque o ativo estava em leilão e o ganho contabilizado pelo testador é falso.

 
Olá, Patinhas. Obrigado pela resposta.
Trader_Patinhas:

Algumas hipóteses que talvez possam explicar esses "picos de ganho gerados por bids/asks fora do normal":

1) Uso de série histórica inadequada no teste (caso o ativo testado seja um contrato futuro).

Geralmente as corretoras fornecem 6 tipos de série históricas para contratos futuros. Veja detalhes sobre cada uma delas aqui.

Ok. Como estou usando o mini índice futuro, testei utilizando o WIN$N e a maioria dos "saldos" sumiram. Obrigado. Eu estava utilizando um índice customizado e importando as barras e ticks do índice "verdadeiro". Assim, poderia fazer testes históricos. Percebi que o resultado do teste é diferente entre o índice personalizado (que possui os ticks/barras do índice real e o WIN$N). O WIN$N é realmente confiável? Nos últimos dias tenho avaliado meu EA durante o pregão ao vivo (mas em conta demo) e os resultados são bem próximos aos dos testes com o índice personalizado.
Trader_Patinhas:

3) Leilões.

Será que o ativo que você estava negociando estava em leilão quando esses picos de ganho aconteceram? Verifique isso no histórico de ticks. Se o BID estiver acima do ASK naquele momento, então é porque o ativo estava em leilão e o ganho contabilizado pelo testador é falso.

Você entende que bastaria testar se o bid estiver acima do ask para evitar uma transação em leilão? Também não faço ideia de como o MT5 trata o leilão. Atualmente estou testando o spread do ativo e evitando negociações se o valor do spread for acima de 30. Ajudou, mas parece não ser o ideal. Muito obrigado!
 
Flávio Henrique:
Você entende que bastaria testar se o bid estiver acima do ask para evitar uma transação em leilão? Também não faço ideia de como o MT5 trata o leilão. Atualmente estou testando o spread do ativo e evitando negociações se o valor do spread for acima de 30. 

Se o seu robô estiver operando exclusivamente com ordens a mercado, nesse caso basta se certificar de que o bid esteja abaixo do ask no momento de enviar a ordem que vc sempre vai evitar sempre o leilão.

Mas se o robô operar com ordens pendentes (ordens com preço-limite), é impossível evitar o leilão, pois ele pode começar a qualquer momento entre vc enviar a ordem e ela ser executada e, se a sua ordem estiver "dentro do dinheiro", ela vai ficar presa até o final do leilão (você não conseguirá mais cancelá-la). Mas, nesse caso, como é ordem com preço-limite, vc pelo menos tem a garantia de que ela não será executada por preço pior que aquele que você configurou como limite, mesmo com o ativo em leilão. 

 

Cara, uma palhaçada este teste Cada tick. Fiquei anos sendo enganado por esse teste que não leva a nada.

Recentemente fiquei sabendo sobre o cada tick baseado em um tick real. Aliás a documentação está desatualizada.

Este novo modo é muito mais próximo da realidade , mas tem o problema que vc falou dos disparates(preços anormais) e consome muita memória, as vezes se perdendo.

Minha sugestão: faça sempre teste nos ticks reais mesmo que sejam poucos dias, principalmente se for fazer daytrade. Os disparates acontecerão para todos os resultados , logo basta ignorá-los.

Acompanhe o delay da sua corretora e replique nos testes. Aqui são aproximadamente 40 ms.

Se não for fazer daytrade, pode fazer os testes pelo cada tick.

É por isso que muita gente fala que robô é fria.

Quem ganha é só a corretora , quem faz os robôs e o MT5.

Sinceramente.

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...
 

Tem um outro problema também, no backtest do tick real, a primeira execução funciona. Depois, os resultados não batem mais.

Notem que apesar do resultado ser de 45mil para 10 contratos , quando é executado aparece essa coisa aí.

 
potmoney:

Tem um outro problema também, no backtest do tick real, a primeira execução funciona. Depois, os resultados não batem mais.

Notem que apesar do resultado ser de 45mil para 10 contratos , quando é executado aparece essa coisa aí.

Eu só uso Backtest pra testar, de modo imbecil total, uma ideia, depois, conta-Demo e/ou conta Real, com 1 contrato de mini. Muito Mumbo-Jumbo pra depois dar tudo errado na vida Real...

Mas, é apenas minha opinião...

;)

 
Flavio Jarabeck:

Eu só uso Backtest pra testar, de modo imbecil total, uma ideia, depois, conta-Demo e/ou conta Real, com 1 contrato de mini. Muito Mumbo-Jumbo pra depois dar tudo errado na vida Real...

Mas, é apenas minha opinião...

;)

É mais ou menos por aí.


Executei o teste novamente e achei um erro no programa. O que não justifica o erro apresentado nos testes anteriores.

Os novos valores ficaram bem aquém do esperado , mas se tiver um ganho parecido pra frente , tá de bom tamanho.

O teste pra frente para o dia 30/04 foi bom.



Arquivos anexados:
teste.jpg  34 kb
 
Flávio Henrique:

Olá, pessoal!

Estou há alguns dias ajustando meu EA e algo tem me incomodado. A diferença dos testes quando utilizo as duas formas indicadas no tópico são gritantes.

O mesmo EA, mesmo período, mesmos parâmetros, geram um resultado totalmente diferente.

Consegui encontrar leituras sobre os modos de testes e vi que o "Cada tick" seria o mais próximo da realidade. Não encontrei muita coisa sobre o "Cada tick é baseado em um tick real", mas o pouco que li, ele seria ainda mais aproximado da realidade que aquele.

Mas olhando os gráficos abaixo, não consigo ver essa similaridade entre eles.

Alguém poderia, por gentileza, indicar leitura que tente explicar melhor a diferença entre esses dois modos OU tentar explicar a diferença tão extrema notada nas imagens abaixo?

Grato!



Amigo, eu tive o mesmo problema, o Robô era MUITO lucrativo no "CADA TICK" (indice usando o WIN$N série contínua) e quando usava o "cada tick baseado em tick real" dava prejuizo, e no real/demo também dava prejuízo, descobri o problema, por alguma razão o backtest "CADA TICK" as compras a mercado são feitas de forma errada (as compras a mercado estão sendo feitas equivocadamente pelo BID ...e as vendas a mercado estão sendo feitas pelo ASK) ...ou seja comprador comprando a mercado de comprador  e vendedor vendendo a mercado para vendedor, totalmente errado, E ESTRANHAMENTE, quando você usa "cada tick baseado em um tick real" ele pega certinho, compra a mercado pelo ASK  e venda a mercado pelo BID...   ....Meu robô fazia 50 operações por dia, isso dava uma diferença de 10 pontos por operação em média, causando uma diferença de 500 pontos .... o que era suficiente pra destruir qualquer estratégia.... depois que eu descobri isso eu abandonei o backtest cada tick e só uso "cada tick baseado em tick real" ... no MERCADO LIVRE tem um rapaz chamado victor que vende ticks reais do indice desde 2019 ...pra quem interessar ... Com os ticks reais, consegui ajustar o robô corretamente para ficar lucrativo e  enfim por no real ... Imagino que muita gente abandonou BOAS ESTRATÉGIAS por este bug do backtest ... (testei com conta da xp e clear)
Razão: