WIN$N e WDO$N muito lentos no testador de estratégia para históricos longos? Segue Uma possível solução simples.

 

Pessoal,

Muitos aqui já devem ter enfrentado esse problema ao testar a estratégia do WIN$N e WDO$N (ou @) em períodos muito longos. Tive conhecimento que isso depende de corretora para corretora, mas, no meu caso, corretora Clear, esse é um problema real e frustrante... Leva horas e até muitas madrugadas para encontrar um setup de parâmetros que seja adequado e já cheguei a culpar o meu código achando que tinha algo errado.

Cheguei a publicar tópicos aqui e ninguém conseguiu esclarecer. Os poucos que responderam de forma solícita atribuiram a culpa ao meu código e outros já sugeriram eu criarar um Símbolo customizado. Ações que eu já tentei e que eu asseguro que não são as razões para o problema.

Foi então que eu testei, sem querer, a opção "Somente Abertura de Preços"... eu já sabia dessa opção, mas nunca tentei porque o meu EA está configurado para operar Fechamento de Preços. Pois bem, testei sem querer e então foi que eu descobri que ele fica muito rápido, tão rápido quanto testar ativos Forex.

Os resultados diferem um pouco da alternativa "Cada Tick". Se pensarmos bem, a diferença tem que ser pequena mesmo, pois a abertura do candle atual tem que ser próxima do fechamento do candle anterior (exceto quando há gaps). É um pequeno "prejuízo" que eu aceito diante da velocidade que eu obtive usando a opção "Somente Abertura de Preços". Ficou tão rápido que agora eu faço testes com históricos de 2016 em diante sem problemas. Depois de configurados os meus parâmetros, eu testo novamente com "Cada Tick" para ver se está aderente. Normalmente fica sim.

Logicamente, isso depende do histórico que a corretora disponibiliza para o MT5. No meu caso, e de muitos outros aqui, a Clear disponibiliza de tal forma que fica extremamente lento para "Cada Tick".

Talvez isso não se aplique a você, mas vale a pena o teste!

Boa sorte e bons trades!

(se você testou, publica aqui o seu Sucesso ou Insucesso. Vamos ajudar ao próximo).

Princípios básicos dos testes no MetaTrader 5
Princípios básicos dos testes no MetaTrader 5
  • www.mql5.com
Quais são as diferenças entre os três modos de teste no MetaTrader 5 e o que deve ser especialmente buscado? Como o teste de um EA, negociando simultaneamente em múltiplos instrumentos, acontece? Quando e como os valores dos indicadores são calculados durante o teste e como os eventos são manuseados? Como sincronizar as barras a partir de diferentes instrumentos durante o teste no modo "apenas preços abertos"? Este artigo tem como objetivo fornecer respostas a estas e muitas outras questões.
 
Alexandre Sousa Bezerra:

Foi então que eu testei, sem querer, a opção "Somente Abertura de Preços"...

A escolha do tipo de dado para um Backtest ou Otimização depende exclusivamente do modelo de operação do EA. Assim como é aprarentemente ilógico usar "Ticks Reais"para testar estratégias de Swing, também é usar OHLC para Scalpers.

Ter o conhecimento completo desses modos é imperativo para não se descartar estratégias boas, testadas erradamente, e/ou insistir em estratégias ruins pela falsa impressão de um OHLC.

https://www.metatrader5.com/en/terminal/help/algotrading/tick_generation

Real and Generated Ticks - Algorithmic Trading, Trading Robots - MetaTrader 5 Help
Real and Generated Ticks - Algorithmic Trading, Trading Robots - MetaTrader 5 Help
  • www.metatrader5.com
Ticks are required for testing and optimizing Expert Advisors, because they use tick data for operation. Testing can be performed on real ticks...
 
Flavio Jarabeck #:

A escolha do tipo de dado para um Backtest ou Otimização depende exclusivamente do modelo de operação do EA. Assim como é aprarentemente ilógico usar "Ticks Reais"para testar estratégias de Swing, também é usar OHLC para Scalpers.

Ter o conhecimento completo desses modos é imperativo para não se descartar estratégias boas, testadas erradamente, e/ou insistir em estratégias ruins pela falsa impressão de um OHLC.

https://www.metatrader5.com/en/terminal/help/algotrading/tick_generation

Sem dúvidas, concordo plenamente. Por isso que considerei "Somente Abertura de Preços" para acelerar a otimização. Ao final, sempre rodo com "Ticks Reais" para ter certeza de que os parâmetros estão adequados. No meu caso especificamente, como meu código trabalha fechamentos de candles, acaba que fica próximo porque os fechamentos dos candles anteriores tendem a ser próximos dos preços de abertura dos candles atuais. Lógico que há diferenças, principalmente com gaps elevados, mas tende a ficar próximo.

De qualquer forma, reforço que vale apenas como teste. E faço das suas palavras as minhas.

Abs

 

Depende da estratégia que voce esta testando.

Se for estratégias com operações curtas de day trade, provavelmente vai dar muita diferença com a modelagem "cada tick".

Se for operações com stops mais longos, a diferença será pequena.

 
Guilherme Mendonca #:

Depende da estratégia que voce esta testando.

Se for estratégias com operações curtas de day trade, provavelmente vai dar muita diferença com a modelagem "cada tick".

Se for operações com stops mais longos, a diferença será pequena.

Você tem toda razão! QUem estiver lendo esses posts, atente-se ao comentário do Guilherme acima.

Abs.

 

Boa noite!

Eu não consigo fazer o backtest com as sérias contínuas WIN$N ou WDO$N.

Alguém consegue me ajudar?

Agradeço.

 
geovi #:

Boa noite!

Eu não consigo fazer o backtest com as sérias contínuas WIN$N ou WDO$N.

Alguém consegue me ajudar?

Agradeço.

Bom dia geovi, vc pode nos dar mais detalhes? O que aparece ou não aparece e deveria aparecer?

Abraco

 
Alexandre Sousa Bezerra:

Pessoal,

Muitos aqui já devem ter enfrentado esse problema ao testar a estratégia do WIN$N e WDO$N (ou @) em períodos muito longos. Tive conhecimento que isso depende de corretora para corretora, mas, no meu caso, corretora Clear, esse é um problema real e frustrante... Leva horas e até muitas madrugadas para encontrar um setup de parâmetros que seja adequado e já cheguei a culpar o meu código achando que tinha algo errado.

Cheguei a publicar tópicos aqui e ninguém conseguiu esclarecer. Os poucos que responderam de forma solícita atribuiram a culpa ao meu código e outros já sugeriram eu criarar um Símbolo customizado. Ações que eu já tentei e que eu asseguro que não são as razões para o problema.

Foi então que eu testei, sem querer, a opção "Somente Abertura de Preços"... eu já sabia dessa opção, mas nunca tentei porque o meu EA está configurado para operar Fechamento de Preços. Pois bem, testei sem querer e então foi que eu descobri que ele fica muito rápido, tão rápido quanto testar ativos Forex.

Os resultados diferem um pouco da alternativa "Cada Tick". Se pensarmos bem, a diferença tem que ser pequena mesmo, pois a abertura do candle atual tem que ser próxima do fechamento do candle anterior (exceto quando há gaps). É um pequeno "prejuízo" que eu aceito diante da velocidade que eu obtive usando a opção "Somente Abertura de Preços". Ficou tão rápido que agora eu faço testes com históricos de 2016 em diante sem problemas. Depois de configurados os meus parâmetros, eu testo novamente com "Cada Tick" para ver se está aderente. Normalmente fica sim.

Logicamente, isso depende do histórico que a corretora disponibiliza para o MT5. No meu caso, e de muitos outros aqui, a Clear disponibiliza de tal forma que fica extremamente lento para "Cada Tick".

Talvez isso não se aplique a você, mas vale a pena o teste!

Boa sorte e bons trades!

(se você testou, publica aqui o seu Sucesso ou Insucesso. Vamos ajudar ao próximo).

Ola Alexandre, estou tendo problemas similares, mas o que mais me instiga no assunto é que em Forex eh 24x5 (ou seja, muito mais historico) e roda mais rapido com mesmo setup, exatamente mesmo setup acredita? Estou quase acreditando que tem alguma coisa relacionada ao historico da B3 ser diferente do Forex. Como opero Scalper passar para OHLC me parece imprudente, irei testar se da alguma diferença mas eu costumo testar a cada tick. Para cada Tick em B3 eh quase parado o andamento do meu expert já em Forex é muito mais rapido. 

Estou tambem passando a acreditar que como tem menos Ticks em forex (supondo que tenha menos) pode ser que se minha rotina de cada Tick for lenta, tendo mais ticks demoraria muito mais. 

O que ainda me deixa na dúvida é, pode ser que tenha mais ticks (mas pelo que sei o historico nao armazena mais ticks) e sim eh uma simulação. O historico do sistema me parece que é apenas minima, máxima, abertura e fechamento dos candles de 1 minuto, o resto é tudo simulacao, ou seja, ele simula o tick oscilando. Vi estudos aqui sobre o assunto, tem um artigo completo aqui de como é feito o codigo. ou seja, levo ainad a crer, de que o culpado nisso tudo é a distancia/volatilidade do movimento, sendo assim a simulacao de cada tick acaba sendo maior (pois a distancia é maior) e entao sendo mais ticks e com isso sendo mais lento. 

Será que estou muito perdido no assunto?

 
Christopher De Siqueira #:

Ola Alexandre, estou tendo problemas similares, mas o que mais me instiga no assunto é que em Forex eh 24x5 (ou seja, muito mais historico) e roda mais rapido com mesmo setup, exatamente mesmo setup acredita? Estou quase acreditando que tem alguma coisa relacionada ao historico da B3 ser diferente do Forex. Como opero Scalper passar para OHLC me parece imprudente, irei testar se da alguma diferença mas eu costumo testar a cada tick. Para cada Tick em B3 eh quase parado o andamento do meu expert já em Forex é muito mais rapido. 

Estou tambem passando a acreditar que como tem menos Ticks em forex (supondo que tenha menos) pode ser que se minha rotina de cada Tick for lenta, tendo mais ticks demoraria muito mais. 

O que ainda me deixa na dúvida é, pode ser que tenha mais ticks (mas pelo que sei o historico nao armazena mais ticks) e sim eh uma simulação. O historico do sistema me parece que é apenas minima, máxima, abertura e fechamento dos candles de 1 minuto, o resto é tudo simulacao, ou seja, ele simula o tick oscilando. Vi estudos aqui sobre o assunto, tem um artigo completo aqui de como é feito o codigo. ou seja, levo ainad a crer, de que o culpado nisso tudo é a distancia/volatilidade do movimento, sendo assim a simulacao de cada tick acaba sendo maior (pois a distancia é maior) e entao sendo mais ticks e com isso sendo mais lento. 

Será que estou muito perdido no assunto?

Em forex tem menos movimentações de preços que são guardadas quando comparadas com o mercado brasileiro. Se olhar no WIN temos quase 5kk de movimentações de preço num unico dia (volume tick), se olhar o mercado de forex EURUSD e tambem o USDJPY peguei para comparar alguns dias, mas nenhum deles chegou perto de 1kk de movimentação ao dia. O mercado de forex exige muito mais valor financeiro para mover o preço então por isso que o forex é mais rapido que o teste no WIN ou WDO. Não é culpa de corretoras.

Sobre a outra coisa que tu disse, eu olhei na documentação e lá diz que a informação do tick é opcional e não que ela não é mais armazenada. No caso de não haver a informação de tick e haver a informação do minuto então é feita a simulação. Se há a informação do tick e não há do minuto, é descartado considerado como erro do historico.

Uma das coisas que tinha pensado que pra mim deixa extremamente lento, mas não tem como desativar aparentemente. Quando fazia teste visual em estrategia de scalper ficava inumeras operações no historico e aqueles objetos que pra mim são inuteis vão pesando o testador de alguma forma. Isso pode tentar ser resolvido salvando um template desativando a exibição do historico, mas como esse template so da certo pro primeiro grafico aberto pra mim se torna inutil ja que analiso mais de um timeframe.

 
Uma coisa que esqueci de comentar, ai em cima. A solução mais simples nesses casos normalmente seria mudar a analise de a cada tick para a cada vela nova. Mas eu entendo que isso nem sempre é possível uma outra solução seria evitar o uso do OnTick e passar a fazer uso do OnTimer, já que nem sempre estamos atras de cada negocio que ocorreu podemos ficar reavaliando o ativo a cada 500ms, por exemplo. Mas acho que isso é opinião pessoal.
 
Boa noite, desenvolvi um EA muito bom para mini índice, quando coloco ele pra operar eu coloco 1 contrato, o problema é que na conta Demo ele só abre um contrato mesmo, porém na conta real de vez em quando ele abre 2 contrato e na configuração só tá pra abrir 1 contrato, alguém pode me ajudar o que estar acontecendo?