BackTeste é confiável? O resultado reflete a realidade do robo?

Para adicionar comentários, por favor Faça o login ou registrar
Daniel Andrejczuk
5698
Daniel Andrejczuk  

Senhores,

 

Primeiramente peço desculpas com a quantidade de demandas que nesses últimos dias pois fiquei muito motivado em criar meu primeiro EA.

Nesse momento levei "um balde de água fria na cabeça" e olhe que o projeto esta quase concluído só falta ajustar detalhes.

Ahhh esses detalhes...., que preciso ajustar para o EA operar como projetado.

Em outro post o Sr. Figurelli postou o tópico "Quais suas críticas ao metatrader" https://www.mql5.com/pt/forum/89546 , colaborei e postei sugestões que acho que se existissem seriam bacanas, e defini o meta em uma palavra: espetacular.

Avançando mais devido ao efetivo uso do meta com programação, nesse momento estou indignado com o software, pois em algumas situações ELE NÃO FAZ O QUE DEVERIA FAZER.

Por exemplo em um post sem resposta aqui no fórum (https://www.mql5.com/pt/forum/90693) variáveis que deveriam retornar informações no backtest não retornam, acabei mudando o EA para contornar isso. Ok, achei que poderia ser em função do horário ou algo assim, contornei fazendo de outra forma.

Agora no meio do código, no meio do dia do pregão, preciso saber o volume de uma posição aberta (e estava posicionado), PositionGetDouble(POSITION_VOLUME), retorna zero ao invés da quantidade. É o segundo recurso que descobri que não funciona no back.

Esse GIGANTE DETALHE implica que a confiabilidade do backtest é zero. Como já escutei muito reclamarem que o resultado backtest do robo é "A" e na conta real é "B", imaginava que a divergencia era que não tinha todo historico de negoiação ou algo assim no banco de dados da pessoa, só que já mudei de opinião  E QUERIA QUE ME FIZESSEM VOLTAR A TRAZ e voltar a acreditar e ser otimista.

Diante disse coloco algumas questões?

i) na opinião de quem tem experiência, qual é a confiabilidade do backtest ? posso estar pisando na bola programando errado, é possível, mais como que em conta real da certo?

ii) esta documentado em algum lugar o que mais não funciona em backtest (funções, recursos, etc...) 

iii) para tirar a prova real poderia fazer um teste, se o robô rodar 1 dia em uma conta real, no dia seguinte usar o mesmo robô em backtest nesse dia tem que dar o mesmo resultado?

iv) se o EA no backtest não roda igual a realidade, o que fazer? 

At.

Daniel 

Depurar dados históricos (ERRO DE RETORNO DE VALORES)
Depurar dados históricos (ERRO DE RETORNO DE VALORES)
  • www.mql5.com
Senhores, Pesquiso algumas informações que utilizo no EA como SymbolInfoDouble( Symbol() ,SYMBOL_SESSION_OPEN) ou SymbolInfoDouble(_Symbol, SYMBOL...
Daniel Andrejczuk
5698
Daniel Andrejczuk  
Nota: estou usando a versão atualizada do meta.
Otavio Konmin Clemente
270
Otavio Konmin Clemente  
Daniel Andrejczuk:
Nota: estou usando a versão atualizada do meta.

Daniel,

Existe várias limitações no Backtest. Essa parte da documentação apresenta algumas delas: https://www.mql5.com/pt/docs/runtime/testing

Agora se sua estratégia depende de funções que não rodam no Backtest, quem sabe colocar direto numa conta demo?

Mas atenção que a conta demo também tem as suas limitações em relação ao mundo real.

Abs e boa sorte,

Otávio 

Documentação sobre MQL5: Programas MQL5 / Testando Estratégias de Negociação
Documentação sobre MQL5: Programas MQL5 / Testando Estratégias de Negociação
  • www.mql5.com
Programas MQL5 / Testando Estratégias de Negociação - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
Daniel Andrejczuk
5698
Daniel Andrejczuk  

Otávio, boa noite!

O problema da conta demo que você só pode testar durante o horário do pregão, dai se sua estratégia tem na média 1 operação por dia, imagine você ter que esperar tudo isso para ver se o EA ira operar como a expectativa da sua programação, se não da certo dai você tem que esperar mais alguns dias para ver se ajustou o problema.

Ja o back-test deveria ser instantâneo, permitindo você avaliar o EA e fazer o ajuste necessário de imediato.

Abraço,

Daniel 

Otavio Konmin Clemente
270
Otavio Konmin Clemente  
Daniel Andrejczuk:

Otávio, boa noite!

O problema da conta demo que você só pode testar durante o horário do pregão, dai se sua estratégia tem na média 1 operação por dia, imagine você ter que esperar tudo isso para ver se o EA ira operar como a expectativa da sua programação, se não da certo dai você tem que esperar mais alguns dias para ver se ajustou o problema.

Ja o back-test deveria ser instantâneo, permitindo você avaliar o EA e fazer o ajuste necessário de imediato.

Abraço,

Daniel 

Entendo... mas se vc não consegui usar a função que precisa no backtest... o q fazer? Ou não usar a função ou não fazer backtest. Se quiser me enviar o código posso tentar te ajudar. Abs
Edgar Lima Uggioni
262
Edgar Lima Uggioni  

O ideial é testar na conta demo. No back teste ocorre algumas limitações.

Por vezes o backtest é lucrativo e em real-time não apresentar a mesma performance. 

Como o amigo de cima disse é bom estar ciente que é uma simulação apenas.

Juliano Cimirro
23
Juliano Cimirro  

Olá, bom dia. Não entendo nada de programação, mas tenho bastante experiência com o uso de robôs, tanto em backtests, quanto na conta produção. Em essência, posso afirmar, com bastante convicção, o seguinte:

 

1) Robôs mais dinâmicos (que operam scalper e usam indicadores rápidos) trazem resultados muito, muito distintos do backtest. Isso ocorre porque o backtest considera tempos perfeitos, preços perfeitos, liquidez infinita e capital ilimitado. Na prática, existem inúmeros atrasos e imprecisões nos sinais e existe spread de entrada e de saída (se ela for a mercado e não por ordem limit). O robô acaba entrando num preço ligeiramente diferente, o que muda o nível do preço alvo, ou, ainda, ele acaba pegando um sinal diferente e compra onde o backtest mostrou que ele venderia... A partir daí, todas as demais operações serão evidentemente diferentes. E a soma dos spreads altera o resultado financeiro. Entretanto, isso não desmerece completamente o backtest de robôs dinâmicos, pois ele serve para provar um conceito. Uso uma configuração no meu robô de scalper que, pelo backtest, dá cerca de 75% de acerto - e é exatamente essa a taxa de acerto na conta produção! Só que as operações e os resultados financeiros são bem diferentes do backtest...

 

2) Com robôs que usam indicadores mais lentos, o backtest é bastante confiável, assim como o resultado financeiro, nesse caso, evidentemente, para operação com alvos maiores. Numa operação de 300 pontos no índice, por exemplo, um spread de 10 pontos não fará uma grande diferença. Já numa operação de scalper, 10 pontos podem representar 20% de diferença... O meu robô de alvo faz operações praticamente idênticas ao backtest, salvo quando ocorrem movimentações muito rápidas e expressivas dos preços, mas isso é inevitável.

 

Abraço! 

Daniel Andrejczuk
5698
Daniel Andrejczuk  

Juliano, 

 

Obrigado pela colaboração, seu comentário foi muito importante.

 

Abraço,

 

Daniel 

Rogerio Figurelli
Moderador
58591
Rogerio Figurelli  

Olá Daniel, segue minha visão, escrita (abaixo) no tópico referido.

Obs: por favor esquece o Sr. na frente do meu nome nos teus tópicos, senão vou ficar mais jurássico ainda ;-)

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Quais suas críticas ao MetaTrader?

Rogerio Figurelli, 2016.07.10 04:52

Olá Daniel, ótimas contribuições!

Talvez o backtesting e otimização no MT5, com tantas evoluções que teve ao longo do tempo, tenha se tornado menos confiável, o que seria um paradoxo e tanto.

Seja como for, na minha opinião, eles servem apenas para validação dos aspectos funcionais e comportamentais do sistema operacional, seja a plataforma de algoritmos que for.

Comento isso porque muitas vezes vejo os algotraders dedicarem horas e horas em backtesting, na busca do Setup dos sonhos.

Mas, nesse sentido, a confiabilidade de ajuste e de Setup deve começar mesmo com os testes em conta demonstração, apesar de também serem imprecisos e falhos, em relação ao market data.

E, para chegar em precisão ou na verdade do mercado (se é que isso é possível), só serão confiáveis mesmos, em tese, os testes em conta real.

Melhores cumprimentos,

Rogério Figurelli 


Paulo Matos Oliveira
7
Paulo Matos Oliveira  

Daniel, boa noite!

Vou ver se consigo te ajudar aqui tecnicamente nas suas questões:

i) na opinião de quem tem experiência, qual é a confiabilidade do backtest ? posso estar pisando na bola programando errado, é possível, mais como que em conta real da certo?

A primeira pergunta o pessoal já respondeu, vamos para a segunda....
Para buscar o volume de uma posição utilizo e funciona com o backtest os seguintes comandos:

CPositionInfo.Select(_Symbol); // Aqui vc seleciona o papel _Symbol = papel atual do gráfico ;
CPositionInfo.Volume(); //Depois de selecionado vc pega o volume;

O comando PositionGetDouble(POSITION_VOLUME), funciona da mesma forma.... primeiro precisamos selecionar o papel com PositionSelect(_Symbol), não testei em backtest, mas se já esta selecionando antes de buscar as informações tente da forma que passei acima;

iii) para tirar a prova real poderia fazer um teste, se o robô rodar 1 dia em uma conta real, no dia seguinte usar o mesmo robô em backtest nesse dia tem que dar o mesmo resultado?

Difícil vc obter o mesmo resultado, mesmo executando em 2 contas reais da mesma corretora o mesmo robô, tenho essa rodando hoje e praticamente todos os dias uma diferença entre 5 a 10% entre 1 e outro.
Tenho robôs que em 1 semana de resultado real fizeram 5k e executando via backtest no mesmo período faz -1k.

Daniel Andrejczuk
5698
Daniel Andrejczuk  
Paulo Matos Oliveira:

Daniel, boa noite!

Vou ver se consigo te ajudar aqui tecnicamente nas suas questões:

i) na opinião de quem tem experiência, qual é a confiabilidade do backtest ? posso estar pisando na bola programando errado, é possível, mais como que em conta real da certo?

A primeira pergunta o pessoal já respondeu, vamos para a segunda....
Para buscar o volume de uma posição utilizo e funciona com o backtest os seguintes comandos:

CPositionInfo.Select(_Symbol); // Aqui vc seleciona o papel _Symbol = papel atual do gráfico ;
CPositionInfo.Volume(); //Depois de selecionado vc pega o volume;

O comando PositionGetDouble(POSITION_VOLUME), funciona da mesma forma.... primeiro precisamos selecionar o papel com PositionSelect(_Symbol), não testei em backtest, mas se já esta selecionando antes de buscar as informações tente da forma que passei acima;

iii) para tirar a prova real poderia fazer um teste, se o robô rodar 1 dia em uma conta real, no dia seguinte usar o mesmo robô em backtest nesse dia tem que dar o mesmo resultado?

Difícil vc obter o mesmo resultado, mesmo executando em 2 contas reais da mesma corretora o mesmo robô, tenho essa rodando hoje e praticamente todos os dias uma diferença entre 5 a 10% entre 1 e outro.
Tenho robôs que em 1 semana de resultado real fizeram 5k e executando via backtest no mesmo período faz -1k.


Paolo, excelente ajuda ! 

12
Para adicionar comentários, por favor Faça o login ou registrar