MetaTrader 5 Strategy Tester: bugs, bugs, sugestões para melhorias

 

O testador de estratégia MetaTrader 5 está atualmente passando por uma profunda revisão pela equipe do MQ. Apesar de muito trabalho ter sido feito nos últimos dois anos (graças à equipa da MetaQuotes), este testador levanta muitas questões. Infelizmente, as mudanças mais recentes estão mais focadas na aparência visual do testador, para que os iniciantes possam trabalhar com ele mais facilmente, enquanto os mecanismos do seu trabalho ainda causam perguntas de usuários mais experientes.

Proponho dedicar este tópico à crítica construtiva do testador do MetaTrader 5, e transformá-lo em um lugar onde você possa chegar aos desenvolvedores.

Todas as declarações/discussões/críticas/críticas devem ser suportadas com argumentos claros e resultados reprodutíveis. A discussão deve concentrar-se na execução e nos mecanismos de preços. Os desejos de folhos, ícones e cavalos esféricos no vácuo (quero todos os núcleos para carregar, quero multi-tarefas para uma única corrida, etc.) não são bem-vindos, embora não sejam proibidos.

Então, vamos.


MetaTrader 5 tester salta a execução de ordens de limite

1. Dados os ticks personalizados como um array MqlTisk em um arquivo binário (anexado ao post).

2. Os dados personalizados são processados por um script especial e são carregados no histórico da ferramenta. O script também está anexado à mensagem.

3) Um Expert Advisor é lançado no gráfico resultante e realiza negócios de acordo com sua lógica. O Expert Advisor trabalha no modo de carrapatos reais.

4. No momento de 00:11:05:085, uma ordem de limite foi colocada ao preço de 10422.5. O preço atual no momento da colocação é 10422.0.

5. Na hora 00:11:06.179 o último preço ocorreu a 10424,0. De acordo com as regras de preços de câmbio, a ordem SellLimit deve ser executada ao preço de 10422,5, mas isso não acontece. A ordem limite parece estar no ar, mostrando uma rendição completa: os negócios acontecem com outra pessoa oferecendo um preço pior do que o nosso!

6. Mas os milagres começam a desenrolar-se. O preço inverte e cai de 1024,0 para 10419. Ou seja, o nível limite de venda de encomendas está a penetrar de cima para baixo. No entanto, a ordem limite também paira no ar.

Infelizmente, não encontrei nenhum registo que mostre o que se passa. Há um sentimento de que os registos dos testadores estão simplesmente desligados e a impressão não funciona. A saída para o registro do testador está desligada:

De qualquer forma, parece ser outro problema que não existia antes.

Neste contexto gravei um vídeo no qual posso ver claramente o que acontece (o mais interessante começa a partir de cerca de 30 segundos. Na parte superior da tela a hora atual é exata ao milissegundo):



O vídeo mostra claramente que o alcance da barra penetra no nível da ordem limite, mas nenhuma execução ocorre.

Há outras perguntas para o testador. Mas por agora acho que é necessário lidar com isso.

Arquivos anexados:
 

O MetaTrader 5 Tester não constrói correctamente as barras

Este é o símbolo personalizado do post anterior (mesmos dados). Asbarras são desenhadas ao preço Last, que é especificado nas definições do símbolo.

À esquerda estão as barras desenhadas no provador. À direita, podem-se ver as barras iniciais.

Pode-se ver que os gráficos não coincidem completamente. Há algumas porcarias no da esquerda.

S.w. Pensava que tinha sido construído por Bid, mas olha para a lista de ofertas - acontece que tais preços nem sequer estavam em Bid ou em Last ou Ask. Vou anexar o feed do negócio em forma de texto abaixo.

Arquivos anexados:
deribit_csv.zip  735 kb
 

Que número de construção está a usar?

Tempo muito estranho no diário de bordo 0000.00.00 00:00:00.000

Que sistema operativo tem?

Os ficheiros com uma extensão de registo são guardados na pasta de dados do testador?

 

1. Não deu o ficheiro "deribit1.out.bin". No arquivo anexo "deribit1.out".

2. Não deu configurações personalizadas de caracteres

 
Eu construo barras por Bid. A execução dos Limites por Bid/Ask tem lugar. Tudo funciona (2093 para ser exacto, não verifiquei mais) correctamente.
 
Vasiliy Sokolov:

Uma boa função que está a ignorar

MqlTick tiks[];

if (FileLoad("deribit1.out.bin", ticks))
{
// ....
 
Slava:

1. Não deu o ficheiro "deribit1.out.bin". No arquivo anexo "deribit1.out".

2. Não deu a configuração personalizada de caracteres

Perdoem-me.

Arquivos anexados:
 
fxsaber:

Uma boa característica que estás a ignorar.

É bom saber.

 
Slava:

Que número de construção está a usar?

Tempo muito estranho no diário de bordo 0000.00.00 00:00:00.000

Que sistema operativo tem?

Os ficheiros com uma extensão de registo são guardados na pasta de dados do testador?

A construção é a mais recente. 2136. Utilizo sempre o mais recente.

Windows 7 SP1

Os registos são guardados. Os registos aparecem no registo do testador de estratégias. Mas nada aparece no registo do visualizador no testador de estratégia.


 
Vasiliy Sokolov:

Perdoem-me.

Obrigado. (risos) Nós encarregamo-nos disso.

 

A sugestão principal é, sem dúvida, a de automatizar os testes.

Faça uma optimização de caminhar para a frente ou algo do género. Os testes devem ser efectuados em vários períodos e instrumentos.

E se não quiser fazer isso, então deixe que as pessoas que não têm uma licenciatura em engenharia de programação (ou uma licenciatura?) o façam com ferramentas MQL.

Para o fazer precisamos da possibilidade de ler e escrever (Get__ \Set__) o início e o fim do período de teste, o início do período de avanço e a possibilidade de reiniciar o testador com um novo período de teste.

Além disso, as instalações de processamento de estruturas disponíveis não funcionam correctamente. Já se escreveu o suficiente sobre isto aqui.

Outro bug: Ao reiniciar o testador com o período de avanço activado e os parâmetros anteriores, este fica pendurado. Temos de alterar instâncias, prazos, instrumentos ou recompilar o Expert Advisor.

A última construção disponível ao público é ainda 2085.

Razão: