Erro no testador de estratégias (FowardTest)

 

Olá, estou com tendo um problema estranho quando executo otimizações nos meus EA's. Se alguém puder me indicar o caminho para uma (possível) solução eu ficaria muito agradecido.

Após executar a otimização, eu sei que o mt5 realiza o fowardtest nos melhores resultados do backtest. Porém, quando eu seleciono algum dos resultados (na saída do fowardtest) e executo individualmente para verificar como o EA se comporta na janela de gráfico, as estatísticas da execução (Lucro, Drawdown, Número de trades e etc) durante o período de backtest são exatamente as mesmas que da saída do otimizador, entretanto, o comportamento no período de fowardtest é completamente diferente do esperado. 

Para tentar explicar melhor, eu escolho uma configuração que na saída do otimizador me diz que ela deveria ter feito 11 trades, com um profit de R$ 350 e drawdown de 11%, por exemplo. Quando eu executar essa mesma configuração, no mesmo intervalo de tempo, mesmo timeframe, sem mudar nada (eu literalmente clico duas vezes na linha da saída do otimizador para o metatrader repetir aquela configuração específica no testador), o resultado final vai ser completamente diferente; outro número de trades, profit completamente diferente (as vezes o que deveria ser lucro acaba em prejuízo e vice-versa). 

Mas isso só acontece no período referente ao fowardtest, os resultados durante o período que foi feito o backtest "bate" exatamente com os dados pelo otimizador. Esse erro ocorre para praticamente todos os resultados no fowardtest, testei muitos porém, não todos.

Vou dizer já alguns teste que fiz antes de recorrer a este tópico no fórum:

1 - Testei com outros EAs. Dependendo do EA, o erro muda um pouco. Ou seja, nem todos os resultados do fowardtest estão com erro, alguns resultados batem correto quando executo individualmente, porém, todos os EAs que testei apresentaram o mesmo problema, a proporção apenas varia;

2 - Testei em máquinas diferentes. O mesmo problema ocorreu;

3 - Testei com metatraders de corretoras diferentes.  O mesmo problema ocorreu;

4 - Testei em Timeframes difrentes, ativos diferentes (Mini-Índice, Mini-dólar, índice e dólar cheios e etc). Mas o mesmo problema ainda ocorre;

5 - Testei tanto no modo tick a tick, ticks reais, ohlc e preço de abertura. Inclusive costumo sempre utilizar somente preços de abertura, principalmente em testes iniciais, para evitar erros durante a simulação; 

6 - Executei todos os testes com a latência em 0ms ("Sem latência, Execução perfeita" como diz no mt5) e sem nenhuma configuração avançada ( emulação de slippages, margem e comissões);

* A maioria dos robôs que estou testando no momento possuem um número grande de parâmetros para serem otimizados, não sei se isso é a causa do problema mas notei que têm influência. Então, eu criei uma versão do mesmo com dois parâmetros apenas (só para teste) e menos erros ocorreram no otimizador.  Logo, percebi que quanto menos parâmetros eu utilizo, menos erros ocorrem. 

** Outro ponto importe que notei é que se meus parâmetros variarem de 0 a 1000 em passos de 0.0001, por exemplo, os erros serão em maior quantidade do que se eu utilizar passos de 0.01 ou até mesmo 1. Ou seja, quanto maior o passo, menos saídas do fowardtest estarão com erro. 

Eu já venho trabalhando a algum tempo nesses EA's e acredito estar alcançando resultados satisfatórios, porém no estágio de desenvolvimento atual estou bem dependente do teste para frente (fowardtest), para reduzir o efeito do overfitting (os GA's são danados pra fazer isso). Não sei dizer com total certeza se esse problema já estava presente antes, mas o notei e comecei investigar na última semana  (após a ultima atualização do mt5, seria coincidência!?) 

Após essa atualização: https://www.mql5.com/en/forum/350881

Se alguém puder me dar uma ajuda, serei imensamente grato! ;p



New MetaTrader 5 platform build 2615: Fundamental analysis and complex criteria in the Strategy Tester
New MetaTrader 5 platform build 2615: Fundamental analysis and complex criteria in the Strategy Tester
  • 2020.09.10
  • www.mql5.com
The updated version of the MetaTrader 5 platform will be released on Thursday, September 17, 2020...
 
psScofield:

Olá, estou com tendo um problema estranho quando executo otimizações nos meus EA's. Se alguém puder me indicar o caminho para uma (possível) solução eu ficaria muito agradecido.

Após executar a otimização, eu sei que o mt5 realiza o fowardtest nos melhores resultados do backtest. Porém, quando eu seleciono algum dos resultados (na saída do fowardtest) e executo individualmente para verificar como o EA se comporta na janela de gráfico, as estatísticas da execução (Lucro, Drawdown, Número de trades e etc) durante o período de backtest são exatamente as mesmas que da saída do otimizador, entretanto, o comportamento no período de fowardtest é completamente diferente do esperado. 

Para tentar explicar melhor, eu escolho uma configuração que na saída do otimizador me diz que ela deveria ter feito 11 trades, com um profit de R$ 350 e drawdown de 11%, por exemplo. Quando eu executar essa mesma configuração, no mesmo intervalo de tempo, mesmo timeframe, sem mudar nada (eu literalmente clico duas vezes na linha da saída do otimizador para o metatrader repetir aquela configuração específica no testador), o resultado final vai ser completamente diferente; outro número de trades, profit completamente diferente (as vezes o que deveria ser lucro acaba em prejuízo e vice-versa). 

Mas isso só acontece no período referente ao fowardtest, os resultados durante o período que foi feito o backtest "bate" exatamente com os dados pelo otimizador. Esse erro ocorre para praticamente todos os resultados no fowardtest, testei muitos porém, não todos.

Vou dizer já alguns teste que fiz antes de recorrer a este tópico no fórum:

1 - Testei com outros EAs. Dependendo do EA, o erro muda um pouco. Ou seja, nem todos os resultados do fowardtest estão com erro, alguns resultados batem correto quando executo individualmente, porém, todos os EAs que testei apresentaram o mesmo problema, a proporção apenas varia;

2 - Testei em máquinas diferentes. O mesmo problema ocorreu;

3 - Testei com metatraders de corretoras diferentes.  O mesmo problema ocorreu;

4 - Testei em Timeframes difrentes, ativos diferentes (Mini-Índice, Mini-dólar, índice e dólar cheios e etc). Mas o mesmo problema ainda ocorre;

5 - Testei tanto no modo tick a tick, ticks reais, ohlc e preço de abertura. Inclusive costumo sempre utilizar somente preços de abertura, principalmente em testes iniciais, para evitar erros durante a simulação; 

6 - Executei todos os testes com a latência em 0ms ("Sem latência, Execução perfeita" como diz no mt5) e sem nenhuma configuração avançada ( emulação de slippages, margem e comissões);

* A maioria dos robôs que estou testando no momento possuem um número grande de parâmetros para serem otimizados, não sei se isso é a causa do problema mas notei que têm influência. Então, eu criei uma versão do mesmo com dois parâmetros apenas (só para teste) e menos erros ocorreram no otimizador.  Logo, percebi que quanto menos parâmetros eu utilizo, menos erros ocorrem. 

** Outro ponto importe que notei é que se meus parâmetros variarem de 0 a 1000 em passos de 0.0001, por exemplo, os erros serão em maior quantidade do que se eu utilizar passos de 0.01 ou até mesmo 1. Ou seja, quanto maior o passo, menos saídas do fowardtest estarão com erro. 

Eu já venho trabalhando a algum tempo nesses EA's e acredito estar alcançando resultados satisfatórios, porém no estágio de desenvolvimento atual estou bem dependente do teste para frente (fowardtest), para reduzir o efeito do overfitting (os GA's são danados pra fazer isso). Não sei dizer com total certeza se esse problema já estava presente antes, mas o notei e comecei investigar na última semana  (após a ultima atualização do mt5, seria coincidência!?) 

Após essa atualização: https://www.mql5.com/en/forum/350881

Se alguém puder me dar uma ajuda, serei imensamente grato! ;p



psSofield,

Vou te responder e sem usar termos técnicos porque senão entraríamos numa discussão infinita.

Basicamente o backtest hoje em dia serve mais para o Desenvolvedor do Robô e cada vez menos para Investidor que vai usar o robô. O que quero dizer é que: Se você Desenvolveu o robô e quer testar o código se está executando exatamente o que você queria no tempo certo, na configuração certa, neste caso o Backtest é fundamental e perfeito. Ele mostra exatamente o que o robô está fazendo.  Por outro lado se você quiser ver se seu robô vai te dar lucro/prejuízo na conta real baseado nos testes do Backtest. A resposta é que provavelmente você não vai alcançar um resultado confiável, porque além da qualidade dos históricos estarem mais degradados (culpa das corretoras), no Backtest também não é considerado algumas variáveis técnicas que só são possíveis apurar em conta Produtiva. E ainda, por fim, eu particularmente acho o Backtest complexo de definir a forma correta de utilização, confesso que quando eu fui ler o "manual" do backtest achei algo irreal para um leigo, fiquei imaginando como um Investidor que entenda pouco da área técnica iria conseguir entender tamanha complexidade.

Eu mesmo muitas vezes na dúvida utilizo o backtest como todas as possibilidades de testes possíveis porque o resultado é tão irreal que fico duvidando de mim mesmo se estou utilizando ele corretamente. Exemplo prático. Exatamente agora pouco estava fechamando meu mês de setembro/2020 porque já bati meta hoje então meu mês fechou. No backtest "disse" que eu teria até ontem fechado o mês em -R$ 1.712,00 (-85% de perda) num capital líquido de 2.000 reais e meu robô não utiliza martingale! isso num único contrato. É de se assustar não?.   Dai apurando o real, ou seja, o que ocorreu na minha conta Produtiva proporcionalmente ao mesmo capital e também a 1 contrato eu fechei +R$ 320,00 positivos líquido (+16%). 

Então esse tipo de coisa só me faz pensar uma das duas coisas:  Ou eu sou muito muito muito ruim e não consegui até hoje utilizar o backtest, ou então, para o MEU caso, o backtest não me atende para apurar expectativas de resultados positivos/negativos em conta produtiva.

Mas também considere os aspectos técnicos e leve isso em consideração ao testar seu robô:  Exemplo, caso ele seja de indices. WIN por exemplo, se você tiver um setup de 10 pontos ele vai te dar um resultado magnifico em reais. Mas por conhecimento técnico já sabemos que em conta produtiva será algo negativo, pois no "varejo" em baixa frequência e pequenos valores é impossível alcançar valores positivos com 10 pontos no WIN, pois somente o spread do preço ou a diferença entre o bid e ask já vai te fazer perder num TP tão curto, bem como as corretoras geralmente não aceitam TP abaixo de 20 pontos em relação a abertura de Posição.

Para contornar isso eu uso uma métrica minha, não é cientificamente ou matematicamente garantia de assertividade, mas me ajuda. Eu divido o valor POSITIVO que deu em Reais pela quantidade de operações realizadas. Se o rateio deu menos de R$ 6,00 reais geralmente eu já descarto. Mas como disse não é preciso esse cálculo, pois neste mesmo exemplo se eu tivesse analisando meu próprio EA dando -1712 reais negativos eu já descartaria logo por ser um resultado final negativo.

 
Ruy Christian Hoffmann:

psSofield,

Vou te responder e sem usar termos técnicos porque senão entraríamos numa discussão infinita.

Basicamente o backtest hoje em dia serve mais para o Desenvolvedor do Robô e cada vez menos para Investidor que vai usar o robô. O que quero dizer é que: Se você Desenvolveu o robô e quer testar o código se está executando exatamente o que você queria no tempo certo, na configuração certa, neste caso o Backtest é fundamental e perfeito. Ele mostra exatamente o que o robô está fazendo.  Por outro lado se você quiser ver se seu robô vai te dar lucro/prejuízo na conta real baseado nos testes do Backtest. A resposta é que provavelmente você não vai alcançar um resultado confiável, porque além da qualidade dos históricos estarem mais degradados (culpa das corretoras), no Backtest também não é considerado algumas variáveis técnicas que só são possíveis apurar em conta Produtiva. E ainda, por fim, eu particularmente acho o Backtest complexo de definir a forma correta de utilização, confesso que quando eu fui ler o "manual" do backtest achei algo irreal para um leigo, fiquei imaginando como um Investidor que entenda pouco da área técnica iria conseguir entender tamanha complexidade.

Eu mesmo muitas vezes na dúvida utilizo o backtest como todas as possibilidades de testes possíveis porque o resultado é tão irreal que fico duvidando de mim mesmo se estou utilizando ele corretamente. Exemplo prático. Exatamente agora pouco estava fechamando meu mês de setembro/2020 porque já bati meta hoje então meu mês fechou. No backtest "disse" que eu teria até ontem fechado o mês em -R$ 1.712,00 (-85% de perda) num capital líquido de 2.000 reais e meu robô não utiliza martingale! isso num único contrato. É de se assustar não?.   Dai apurando o real, ou seja, o que ocorreu na minha conta Produtiva proporcionalmente ao mesmo capital e também a 1 contrato eu fechei +R$ 320,00 positivos líquido (+16%). 

Então esse tipo de coisa só me faz pensar uma das duas coisas:  Ou eu sou muito muito muito ruim e não consegui até hoje utilizar o backtest, ou então, para o MEU caso, o backtest não me atende para apurar expectativas de resultados positivos/negativos em conta produtiva.

Mas também considere os aspectos técnicos e leve isso em consideração ao testar seu robô:  Exemplo, caso ele seja de indices. WIN por exemplo, se você tiver um setup de 10 pontos ele vai te dar um resultado magnifico em reais. Mas por conhecimento técnico já sabemos que em conta produtiva será algo negativo, pois no "varejo" em baixa frequência e pequenos valores é impossível alcançar valores positivos com 10 pontos no WIN, pois somente o spread do preço ou a diferença entre o bid e ask já vai te fazer perder num TP tão curto, bem como as corretoras geralmente não aceitam TP abaixo de 20 pontos em relação a abertura de Posição.

Para contornar isso eu uso uma métrica minha, não é cientificamente ou matematicamente garantia de assertividade, mas me ajuda. Eu divido o valor POSITIVO que deu em Reais pela quantidade de operações realizadas. Se o rateio deu menos de R$ 6,00 reais geralmente eu já descarto. Mas como disse não é preciso esse cálculo, pois neste mesmo exemplo se eu tivesse analisando meu próprio EA dando -1712 reais negativos eu já descartaria logo por ser um resultado final negativo.


Muito obrigado pela sua ajuda. Eu também já havia constatado através de experimentação algumas dessas conclusões que vc chegou, inclusive essa disparidade entre as simulações e a operação em conta real.

Mas o meu problema no momento é um pouco diferente, vou tentar mostrar alguns dos resultados para ficar mais claro. Eu criei um EA para exemplificar o problema, acredito que a lógica interna dele seja irrelevante como vou mostrar nas imagens. Antes de mais nada, ele opera como um robô de momentum (sempre está com uma posição aberta), sem alvo ou stop, apenas assume uma posição a cada abertura de vela, podendo se manter na posição anterior ou inverter a posição. Sempre com 1 (um) lote, não acumula e nem faz saída/entrada parcial. 

-- Esses são os parâmetros da otimização (figura 01) -- 

-- Esses são os parâmetros do robô (Figura 02)  --   

Repare que na Figura 01, eu coloquei 3 semanas de otimização e uma semana a frente para fowardtest. O Critério de otimização é uma função customizada feita por mim, leva em consideração o lucro, drawdown e o retorno esperado, mas acredito que não tenha nenhuma relação com o problema.

-- Esse foi o resultado da otimização (Figura 03) --   

-- Até aí tudo bem, agora olha a saída do fowardtest (Figura 04)  -- 

Repare que a saída do fowardtest já vem ordenada pelo melhor resultado no fowardtest (segundo o meu critério customizado). Aí eu rodo a simulação individual desse conjunto de parâmetros que obteve o melhor resultado no fowardtest.

-- Esse foi o resultado no fowardtest (Figura 05), no backtest ocorre tudo dentro do esperado. 

Se você reparar nos valores de Lucro, número de trades, payoff, drawdown e tudo mais, está tudo OK! Porém, agora vou lá na tabela de saída do fowardtest e ordenar pelo melhor resultado do backtest como mostra a Figura 06. Repare que o resultado para frente deveria ser negativo, bem ruim. Mas aí então eu simulei com esses parâmetros e olhe na Figura 07 qual foram as estatísticas do EA. Por algum motivo o que a simulação diz que ele fez não "bate" com o que ele fez no mesmo período durante o fowardtest. Nessa Simulação individual ele saiu num lucro R$ 775,00, com payoff de 33,70 e drawdown de 14,31%, enquanto o fowardtest diz que essa configuração teria produzido um prejuízo de R$ 845,00, com payoff de -44,47 e drawdown de 55,61%. E o número de trades também não bate, é como se o EA estivesse com um conjunto de inputs completamente diferentes. 

Eu compreendo que existem muitos motivos que tornam o simulador diferente da operação em conta real, porém, não consigo encontrar uma justificativa lógica para esse problema. Lembrando que esse problema persiste independe da modelagem utilizada (tick a tick, OHLC e etc) e do timeframe. Não faz muito sentido o mesmo robô, operando no mesmo intervalo de tempo, com as mesmas configurações e com tudo mais inalterado, produzir um resultado no otimizador e outro durante a simulação individual, ou faz?

P.S. Perdão por não colocar as imagens no texto, não consegui encontrar uma forma de colocá-las nos lugares certos. Então, estão em anexo e numeradas como indicado no texto. 

Arquivos anexados:
01.png  20 kb
02.png  29 kb
03.png  97 kb
04.png  81 kb
05.png  41 kb
06.png  49 kb
07.png  40 kb
 
psScofield:


Muito obrigado pela sua ajuda. Eu também já havia constatado através de experimentação algumas dessas conclusões que vc chegou, inclusive essa disparidade entre as simulações e a operação em conta real.

Mas o meu problema no momento é um pouco diferente, vou tentar mostrar alguns dos resultados para ficar mais claro. Eu criei um EA para exemplificar o problema, acredito que a lógica interna dele seja irrelevante como vou mostrar nas imagens. Antes de mais nada, ele opera como um robô de momentum (sempre está com uma posição aberta), sem alvo ou stop, apenas assume uma posição a cada abertura de vela, podendo se manter na posição anterior ou inverter a posição. Sempre com 1 (um) lote, não acumula e nem faz saída/entrada parcial. 

-- Esses são os parâmetros da otimização (figura 01) -- 

-- Esses são os parâmetros do robô (Figura 02)  --   

Repare que na Figura 01, eu coloquei 3 semanas de otimização e uma semana a frente para fowardtest. O Critério de otimização é uma função customizada feita por mim, leva em consideração o lucro, drawdown e o retorno esperado, mas acredito que não tenha nenhuma relação com o problema.

-- Esse foi o resultado da otimização (Figura 03) --   

-- Até aí tudo bem, agora olha a saída do fowardtest (Figura 04)  -- 

Repare que a saída do fowardtest já vem ordenada pelo melhor resultado no fowardtest (segundo o meu critério customizado). Aí eu rodo a simulação individual desse conjunto de parâmetros que obteve o melhor resultado no fowardtest.

-- Esse foi o resultado no fowardtest (Figura 05), no backtest ocorre tudo dentro do esperado. 

Se você reparar nos valores de Lucro, número de trades, payoff, drawdown e tudo mais, está tudo OK! Porém, agora vou lá na tabela de saída do fowardtest e ordenar pelo melhor resultado do backtest como mostra a Figura 06. Repare que o resultado para frente deveria ser negativo, bem ruim. Mas aí então eu simulei com esses parâmetros e olhe na Figura 07 qual foram as estatísticas do EA. Por algum motivo o que a simulação diz que ele fez não "bate" com o que ele fez no mesmo período durante o fowardtest. Nessa Simulação individual ele saiu num lucro R$ 775,00, com payoff de 33,70 e drawdown de 14,31%, enquanto o fowardtest diz que essa configuração teria produzido um prejuízo de R$ 845,00, com payoff de -44,47 e drawdown de 55,61%. E o número de trades também não bate, é como se o EA estivesse com um conjunto de inputs completamente diferentes. 

Eu compreendo que existem muitos motivos que tornam o simulador diferente da operação em conta real, porém, não consigo encontrar uma justificativa lógica para esse problema. Lembrando que esse problema persiste independe da modelagem utilizada (tick a tick, OHLC e etc) e do timeframe. Não faz muito sentido o mesmo robô, operando no mesmo intervalo de tempo, com as mesmas configurações e com tudo mais inalterado, produzir um resultado no otimizador e outro durante a simulação individual, ou faz?

P.S. Perdão por não colocar as imagens no texto, não consegui encontrar uma forma de colocá-las nos lugares certos. Então, estão em anexo e numeradas como indicado no texto. 

Por acaso as "novas posições" são abertas antes de "encerrar a anterior"?
Pois tenho um robô que tem 8 setups e tem um problema muito parecido com o seu. Ele o seguinte, exemplo: ele abre a "Posição 1" baseado no "Setup 1" que vai se encerrar no próximo candle. Ao abrir o segundo candle por coincidência configurou o Setup 2 também, e então abre a "Posição 2", Mas a "Posição 1" ainda não foi encerrada, mas vai acontecer alguns segundos depois (HEDGE). 
Este meu robô que também não sei explicar exatamente onde está o problema (se é que existe problema), mas se eu desabilito o Setup1 e deixo só o Setup 2 o resultado do Setup 2 não é igual ao mesmo resultado que seria com o Setup 1 também ativo. Estou falando considerando apenas o Setup 2, separadamente, pois na hora de apurar consigo identificar o que do Setup 1 e do Setup 2. Mas individualmente (desabilitados antes de sua execução) dão resultados diferentes de quando habilitados e individualizados na apuração.
E nada mais muda, nem os pontos negociados, nem seus TP/SL, etc, nada nada.

Neste seu exemplo ai não faço ideia o que pode estar ocorrendo.

 
Ruy Christian Hoffmann:


Olá Ruy,

também tive algo parecido, mas era um bobagem de lógica,  quando um setup dava condição de entrada ou stopava (gain/loss) o programa não prosseguia para o teste do setup seguinte, isto dentro de uma mesma da mesma barra. Então acontecia a mesma coisa que vc disse: Rodando isoladamente cada setup e somando os resultados dava um valor diferente de quando rodava com os dois setups ativos. Como eu disse era um erro de lógica bem simples, no seu caso deve ser um erro mais complicado.

Até breve.

 

psScofield:

Eu compreendo que existem muitos motivos que tornam o simulador diferente da operação em conta real, porém, não consigo encontrar uma justificativa lógica para esse problema. Lembrando que esse problema persiste independe da modelagem utilizada (tick a tick, OHLC e etc) e do timeframe. Não faz muito sentido o mesmo robô, operando no mesmo intervalo de tempo, com as mesmas configurações e com tudo mais inalterado, produzir um resultado no otimizador e outro durante a simulação individual, ou faz?


Olá,

1) Eu sugiro você ler na documentação como os TICKS do testador de estratégia são gerados.  Depois de ler, você vai entender que a lógica do testador vai gerar  TICKS em barra de um minuto obedecendo a uma trajetória de ordenação OHLC ou OLHC, a trajetória que ele cria é um modelo ideal que não tem nada a ver com a "trajetória" errática do mundo REAL. Só mais um comentário, uma barra de 1 minuto pode ter um RANGE de qualquer tamanho e é justamente nas barras de RANGE grande que ocorre a grande diferença.

2) Agora vamos para a qualidade dos dados. Se você leu a documentação você sabe que o gerador de ticks usa a como base a barra de um minuto OHLC  + dados de quantidade para gerar os TICKS e a sua trajetória. Pois bem, essa  base de dados de barras de 1 min é fornecida pela corretora e raramente  tem erro. O que o testador não sabe são os dias que são feriados e então ele informa uma qualidade menor que 100%.

    Agora, para o BT com TICKS REAIS,   como os TICKS são reais e não gerados então deveríamos ter o mesmo resultado do que aconteceu em REAL  com o que acontece em DEMO mas não é bem assim, a divergência as vezes é grande, por que a qualidade dos TICKS REAIS que a corretora fornece é péssima.

Espero ter ajudado.

Até breve.

 
Rogerio Giannetti Torres:

Olá,

1) Eu sugiro você ler na documentação como os TICKS do testador de estratégia são gerados.  Depois de ler, você vai entender que a lógica do testador vai gerar  TICKS em barra de um minuto obedecendo a uma trajetória de ordenação OHLC ou OLHC, a trajetória que ele cria é um modelo ideal que não tem nada a ver com a "trajetória" errática do mundo REAL. Só mais um comentário, uma barra de 1 minuto pode ter um RANGE de qualquer tamanho e é justamente nas barras de RANGE grande que ocorre a grande diferença.

2) Agora vamos para a qualidade dos dados. Se você leu a documentação você sabe que o gerador de ticks usa a como base a barra de um minuto OHLC  + dados de quantidade para gerar os TICKS e a sua trajetória. Pois bem, essa  base de dados de barras de 1 min é fornecida pela corretora e raramente  tem erro. O que o testador não sabe são os dias que são feriados e então ele informa uma qualidade menor que 100%.

    Agora, para o BT com TICKS REAIS,   como os TICKS são reais e não gerados então deveríamos ter o mesmo resultado do que aconteceu em REAL  com o que acontece em DEMO mas não é bem assim, a divergência as vezes é grande, por que a qualidade dos TICKS REAIS que a corretora fornece é péssima.

Espero ter ajudado.

Até breve.

obrigado pela ajuda Rogerio, 

Eu compreendo os pontos que você levantou, já li a documentação, vários artigos e algumas discussões aqui no fórum a respeito. Pensando justamente em evitar problemas gerados pelas diferenças nas várias modelagens disponíveis no mt5 e também os problemas gerados pelos erros nos históricos das corretoras, eu implementei esse robô (e venho fazendo assim a algum tempo) utilizando apenas o preço de abertura, as ordens abertas/fechadas apenas na abertura dos candles. Sei que isso não evita certas divergências entre a simulação e a operação em conta real, pois em conta real existem outros aspectos  (latência, liquidez e etc) que o mt5 não consegue simular de forma adequada ainda. Porém, ao menos nos meus robôs, consegue minimizar bastante as divergências entre simulação, demo e real. 

Agora, o que eu não consigo entender é como um robô, com um determinado conjunto de inputs, consegue produzir um certo comportamento no otimizador e quando simulado (com as mesmas condições) individualmente produzir resultados completamente diferentes. Se essa disparidade ocorresse entre a simulação e a operação em tempo real (ou até mesmo a demo), eu poderia até aceitar que a origem seja nas diferenças entre o mercado simulado e o real. Por hora, ainda não tenho a menor ideia da origem do problema. 

 
Ruy Christian Hoffmann:

Por acaso as "novas posições" são abertas antes de "encerrar a anterior"?
Pois tenho um robô que tem 8 setups e tem um problema muito parecido com o seu. Ele o seguinte, exemplo: ele abre a "Posição 1" baseado no "Setup 1" que vai se encerrar no próximo candle. Ao abrir o segundo candle por coincidência configurou o Setup 2 também, e então abre a "Posição 2", Mas a "Posição 1" ainda não foi encerrada, mas vai acontecer alguns segundos depois (HEDGE). 
Este meu robô que também não sei explicar exatamente onde está o problema (se é que existe problema), mas se eu desabilito o Setup1 e deixo só o Setup 2 o resultado do Setup 2 não é igual ao mesmo resultado que seria com o Setup 1 também ativo. Estou falando considerando apenas o Setup 2, separadamente, pois na hora de apurar consigo identificar o que do Setup 1 e do Setup 2. Mas individualmente (desabilitados antes de sua execução) dão resultados diferentes de quando habilitados e individualizados na apuração.
E nada mais muda, nem os pontos negociados, nem seus TP/SL, etc, nada nada.

Neste seu exemplo ai não faço ideia o que pode estar ocorrendo.


Obrigado novamente, Ruy


Respondendo a sua questão, as novas posições são abertas apenas após as anteriores serem fechadas. Já passei por um problema semelhante em outro robô que estava desenvolvendo. E além disso, neste robô em questão existe apenas um setup, que toma as únicas decisões sobre abertura ou fechamento de posições, então não poderia ocorrer esse tipo de erro. 

 
psScofield:

obrigado pela ajuda Rogerio, 

Eu compreendo os pontos que você levantou, já li a documentação, vários artigos e algumas discussões aqui no fórum a respeito. Pensando justamente em evitar problemas gerados pelas diferenças nas várias modelagens disponíveis no mt5 e também os problemas gerados pelos erros nos históricos das corretoras, eu implementei esse robô (e venho fazendo assim a algum tempo) utilizando apenas o preço de abertura, as ordens abertas/fechadas apenas na abertura dos candles. Sei que isso não evita certas divergências entre a simulação e a operação em conta real, pois em conta real existem outros aspectos  (latência, liquidez e etc) que o mt5 não consegue simular de forma adequada ainda. Porém, ao menos nos meus robôs, consegue minimizar bastante as divergências entre simulação, demo e real. 

Agora, o que eu não consigo entender é como um robô, com um determinado conjunto de inputs, consegue produzir um certo comportamento no otimizador e quando simulado (com as mesmas condições) individualmente produzir resultados completamente diferentes. Se essa disparidade ocorresse entre a simulação e a operação em tempo real (ou até mesmo a demo), eu poderia até aceitar que a origem seja nas diferenças entre o mercado simulado e o real. Por hora, ainda não tenho a menor ideia da origem do problema. 

psScofield conseguiu achar alguma solução para isso? Estou passando pelo mesmo problema
 
Diogo Souza:
psScofield conseguiu achar alguma solução para isso? Estou passando pelo mesmo problema

Infelizmente, ainda não, e por hora abandonei o otimizador de estratégias. Não encontrei uma explicação para esse problema e a única forma de minimizar o problema que encontrei (e até comentei quando iniciei esse tópico) foi utilizar o menor número de parâmetros e com o menor intervalo de valores possíveis nesses parâmetros. Como não obtive muitas respostas aqui no fórum achei melhor abandonar no momento essa forma de criar e testar estratégias. 

 

Eis aqui (  https://www.mql5.com/pt/forum/416156#comment_39299878 ) um teste que realizei detalhado demonstrando que, talvez o problema esteja nos dados que estão utilizando para testar ou a forma como estão entendendo o teste. 

Espero que resolvam o problema/dúvida de vocês e possam dar continuidade a seus projetos. 

Sucesso por aí. 

Teste Para Frente não funciona
Teste Para Frente não funciona
  • 2022.05.04
  • www.mql5.com
Olá, Há alguns anos que o teste para frente parou de funcionar adequadamente...
Razão: