English Русский 中文 Español Deutsch 日本語
Teste de expert advisors no terminal do cliente MetaTrader 4: Um olhar para fora

Teste de expert advisors no terminal do cliente MetaTrader 4: Um olhar para fora

MetaTrader 4Testador | 18 fevereiro 2016, 13:48
965 0
Slava
Slava


Para realizar um teste, você precisa abrir a janela "provador", caso ela ainda não tiver sido aberta. Isto pode ser feito de várias formas: vá até "exibir -> testador de estratégias" no menu principal, pressione Ctrl+R, clique sobre "testador de estratégias" na barra de ferramentas, use o menu de contexto do gráfico ao qual o expert está anexado ("expert advisors -> testador de estratégias"), ou pressione F6.

Antes do teste, é preciso selecionar um expert advisor. Ele pode ser selecionado a partir de um menu pop-up ou arrastado com o mouse a partir da janela "navegador" e solto na janela "provador". O símbolo pode ser selecionado da mesma maneira: selecionado no menu pop-up ou arrastado a partir da janela "Market Watch". Pressionar F6 permite a seleção simultânea do expert, do símbolo e do período do gráfico ativo, mas para isto o expert precisa estar anexo ao gráfico ativo.

Também é necessário selecionar um método de modelagem dos dados históricos. Algumas estratégias de transações não dependem dos movimentos dos preços no interior da barra, elas realizam transações em barras já formadas. O surgimento de uma nova barra demonstra que a barra atual já foi completamente formada. O modo de modelagem chamado "apenas preços abertos" é destinado a tais experts. Deve-se notar que, caso os dados da barra atual sejam usados para a tomada de decisões no expert, o teste de tal expert no modo "apenas preços abertos" será inadequado! Como regra, experts que trabalham com a conclusão de barras possuem o seguinte código para verificar se a próxima barra foi iniciada:

static datetime prevtime=0;
...
if(prevtime == Time[0]) return(0);
prevtime = Time[0];

Em todos os outros casos, o modelo "cada tick" deve ser utilizado. Não se recomenda utilizar o modelo "pontos de controle" para testes. Este modelo é destinado à realização de estimativas cruas do expert trabalhando no modo de otimização. Após algoritmos genéticos de otimização terem sido adicionados ao provador de estratégias, a necessidade do uso do modelo de "pontos de controle" deixa de ser relevante. Para que a modelagem do tipo "cada tick" de dados históricos seja adequada, é necessário se ter tantos dados de um minuto disponíveis quanto o possível. Caso não haja dados de um minuto disponíveis, os dados de cinco minutos são usados para a modelagem. Caso eles também não estiverem disponíveis, os dados de quinze minutos são usados, etc. Respectivamente, a qualidade da modelagem diminuirá.

Quando se clica no botão "iniciar", primeiramente a sequência de teste será gerada para a alteração do preço que será armazenado em cache no arquivo com extensão FXT. Todos os arquivos FXT são armazenados no diretório <client_terminal_dir>\tester\history e tem nomes do tipo SSSSSSPP_M.fxt, sendo que:

  • SSSSSS - é o símbolo sendo testado;
  • PP - é o valor em minutos do período do símbolo testado;
  • M - é o modelo de teste (0 - "cada tick", 1 - "pontos de controle", 2 - "apenas preços abertos").

No cabeçalho do arquivo FXT são escritas as configurações atuais do símbolo e da conta atual. O terminal do cliente recebe essas configurações automaticamente do servidor de negociação. Portanto, o funcionamento do servido real será simulado durante o teste: cálculos de chamadas de margem, renovações, impostos, etc. Caso não haja conexão no momento, as últimas configurações conhecidas serão usadas em relação ao servidor de negociação mais recente ao qual o terminal do cliente foi conectado. Um arquivo FXT é formado novamente toda vez que o botão "iniciar" é pressionado. Surge a questão: Por que usar este arquivo se ele é criado novamente toda vez? Em primeiro lugar, pode haver tantos dados de tick que simplesmente não seria possível inseri-los na memória RAM computador. Portanto, é necessária uma forma de armazenamento externo para transferir os dados em partes, o que é especialmente importante para fins de otimização. Em segundo lugar, nós podemos verificar que tipo de sequência foi gerada pelo provador. O arquivo pode ser aberto de forma independente para que se veja como o desenvolvimento das barras de preço é modelado.


Por que então recalcular dados já existentes?

  • Em primeiro lugar, dados podem ficar alguns dias desatualizados, e existe a necessidade de se realizar testes em relação aos dados históricos mais recentes.
  • Em segundo lugar, em muitos casos, durante a geração inicial de dados do tipo "cada tick", não é possível baixar todos os dados dos cronogramas menores a partir do servidor até o momento da geração da sequência de teste. A questão é que o envio de dados é assíncrono, pois o servidor não notifica o cliente sobre o fato de que a transmissão de todos os dados solicitados foi realizada. Mas nós podemos estar certos de que todos os dados solicitados são recebidos dentro de 1 ou 2 minutos.
  • Em terceiro lugar, e este é o ponto mais importante, um usuário pode ter contas com diferentes corretores. E diferentes corretores não fornecem apenas condições de transação diferentes (lembre-se, por favor, que o cabeçalho do arquivo FXT contém informações muito importantes relativas à simulação do trabalho do servidor de negociação), mas também um volume e uma qualidade de dados históricos diferentes. Neste caso, após alternar para outra conta durante o teste, é altamente recomendável recalcular os dados.
  • Em quarto lugar, em muitos casos há dados desalinhados de diferentes cronogramas vindos de diferentes fontes disponíveis no terminal do cliente. O problema se tornou bastante sério após o terminal do cliente ter recebido a função de fazer o download de grandes quantidades do histórico relativo aos pares cambiais básicos. Muitos traders trabalhando com corretores reais fizeram o download de dados do servidor MetaQuotes. Este é um ponto muito importante que influencia a qualidade da modelagem. Para chamar atenção a este problema, o provador considera erros de desalinhamento de dados em relação a cronogramas diferentes Que tipo de erro é esse?

Deve-se explicar como uma sequência de teste é formada caso datas "de" e "para" forem usadas (a caixa correspondente de "data de uso" deve estar marcada). Uma sequência de teste não inicia a partir da data "de". Antes de iniciar a geração de ticks, o provador coloca cerca de 4 mil barras de não modelagem prontas no início da sequência. Caso haja menos barras iniciais, todas as barras do início do histórico são usadas, mas não menos do que 100. Assim, caso os dados "de" sejam colocados muito próximos ao início de todo o histórico, a geração do tick pode iniciar após a data especificada. Nós precisamos fornecer ao menos 100 barras antes do início do teste. As barras iniciais na sequência são necessárias para que o expert advisor seja capaz de contar indicadores com base em dados anteriores de modo correto (isso é especialmente importante em relação a médias móveis). Abaixo temos um exemplo de uma sequência gerada de evolução de barra em ticks modelados com a data inicial configurada como "2002.08.01":


A modelagem é concluída quando a data "para" é alcançada. Os dados de preço começando a partir de 0:00 da data de fim não participam do teste e nem entram na sequência gerada. Se dados especificados estiverem fora do alcance do histórico, ou caso a opção "data de uso" estiver desativada, todo o histórico (exceto os primeiros 100 pares) será envolvido na geração. A configuração da quantidade máxima de barras no gráfico não significa nada em relação à modelagem: todo o histórico é armazenado no disco a ser usado.

Caso se perceba, durante a formação da sequência de teste, que há menos dados históricos do que 100 barras, uma mensagem de "gerador de teste: dados deficientes" aparecerá no diário do provador, e o provador não será inicializado. Também é possível que não haja nenhum dado, o que ocorre quando o intervalo de datas é especificado incorretamente. A mensagem "gerador de teste: nenhum dado histórico" aparecerá no diário do provador. Neste tipo de caso, a quantidade necessária de de dados históricos deve ser fornecida. Para fornecê-la, deve-se abrir o gráfico correspondente e enviar os dados manualmente, usando o botão "PageUp", e então ativar a função "recalcular" e reiniciar o provador.

Antes de inicializar o provador, é preciso especificar as entradas do expert a ser testado. Deve-se prestar especial atenção à moeda de depósito. Por exemplo, se uma conta do tipo micex for aberta, o teste do expert em GAZP não irá obter resultados se RUB (esse símbolo pode ser inserido manualmente apesar do fato de não estar na lista pop-up) não for especificado como a moeda de depósito.


A aba "entradas" só será visível caso variáveis externas forem declaradas. Conjuntos diferentes de valores de entrada podem ser salvos em arquivos de conjunto sob nomes diferentes (botão "salvar") e usados no futuro (botão "carregar").


Clicar no botão "modificar expert advisor" irá chamar o MetaEditor, onde o expert sendo testado será aberto para edição. Este botão, assim como outros, fica bloqueado durante a inicialização do provador. Contudo, o MetaEditor ainda assim permite a recompilação do expert, mesmo caso este esteja sendo testado. Na próxima vez em que o provador for inicializado, o expert advisor recompilado será recarregado para o teste automaticamente.

Vale lembrar que enquanto o expert estiver sendo testado, ele não pode ser recarregado. Suponhamos que você não tenha perdido tempo, e tenha alterado o código fonte do expert e feito a sua recompilação durante o teste. O teste é concluído, e você clica no botão "iniciar" novamente, esperando testar o expert advisor modificado. Mas não, o arquivo executável baixado anteriormente será testado novamente. Para recarregar a nova versão do expert, você deve clicar no botão "parar" ou esperar até que o teste esteja completo. Apenas após isso você poderá começar a recompilar o seu expert advisor no MetaEditor.

Após o teste ser finalizado, você pode abrir o gráfico exibindo setas de operações de negociação e indicadores usados durante o teste. Contudo, há um problema, pois aqueles indicadores usados durante o teste serão exibidos nas cores padrão. Por exemplo, caso médias móveis com diferentes períodos de cálculo da média tiverem sido usadas, elas todas aparecerão em vermelho, o que não é muito conveniente, é claro. As cores podem ser alteradas manualmente, mas há uma outra solução para o problema. Se um modelo chamado, digamos, <nome_do_expert>.tpl (por exemplo, média_móvel.tpl), com indicadores anexados, for criado de antemão, este modelo será usado quando o gráfico a ser testado for aberto.. Se nenhum modelo estiver disponível, o modelo tester.tpl será usado.

Há outro detalhe aqui. Caso um gráfico de teste seja aberto da maneira descrita acima, os dados históricos atuais serão carregados nele. Se a sequência de teste tiver sido obtida recentemente, não há problemas. Mas e se os dados usados tiverem vindo de outra fonte de dados? Felizmente, começando com o terminal do cliente MetaTrader 4 versão 196, o provador de estratégias suporta a chamada visualização de teste de estratégias.



Caso a "visualização" seja marcada, um gráfico de "depuração" será aberto automaticamente durante a inicialização do servidor usando o modelo <nome_do_expert>.tpl ou tester.tpl. O estado atual da sequência de teste é exibido no gráfico. A alteração da taxa de visualização é feita através do controle deslizante. Se ele for movido para a esquerda, a taxa ficará mais lenta. O movimento para a direita irá, de modo correspondente, torná-la mais rápida. Para fazer uma pausa, pode-se pressionar o botão "||" ou a tecla "pause" no teclado. Para continuar o teste após a pausa, é necessário pressionar ">>" ou, novamente, a tecla "pause". Quando o teste está pausado, pode-se pressionar a tecla F12 para obter uma visualização manual passo-a-passo. A exibição pode ser acelerada através do uso do botão "+", desacelerada com o botão "-", pausada com o botão "||" e retomada após uma pausa com o botão ">>". É possível especificar uma data e clicar sobre "pular para". Neste caso, o diagrama não será redesenhado até que o provador chegue à data especificada, o que essencialmente acelera o processo. Após o término do teste (quando ele for completado ou quando for parado através do uso do botão "parar"), o estado dos dados históricos no momento da parada será exibido no diagrama.

Durante a visualização do diagrama de teste, um clique duplo sobre uma de suas seções realiza a alternância para a aba "resultados" e a seleção da posição correspondente. Caso o diagrama de teste tenha sido aberto (marcação em "visualização" ou clique sobre "abrir diagrama"), um clique duplo sobre uma posição na aba "resultados" irá mover o diagrama para a data correspondente.

Para otimizar uma estratégia de transações, é preciso tomar ao menos duas medidas. Marcar "otimização" na aba "configurações" e configurar os valores inicial e final, além do valor de incremento de mudança para parâmetros otimizados nas propriedades do expert na aba "entradas".


Desse modo, caso um expert não possua nenhuma entrada, ele não pode ser otimizado. O processo de otimização pode ser intensificado pela configuração de limites de otimização.


Assim que o limite correspondente for alcançado, o provador interrompe a passagem e inicia uma nova, com o próximo conjunto de entradas. Além disso, a passagem interrompida por conta do limite é considerada mal sucedida e não é listada entre os resultados. Passagens com lucros negativos também são consideradas mal sucedidas. Para incluir passagens mal sucedidas na lista de resultados de otimização, é necessário desmarcar a opção "pular resultados inúteis" no menu de contexto da aba "resultados de otimização".

O fato de resultados mal sucedidos não serem listados por padrão é uma razão muito frequente de afirmações como "o otimizador de estratégias não funciona". Neste caso, a mensagem "NNN resultados foram descartados por serem insignificantes" aparecerá no diário.

Para intensificar o processo de otimização, foi implementado o armazenamento de resultados em cache. Se, na passagem de otimização repetida, o provador encontrar em cache um resultado que corresponda com o conjunto de entradas atual, o resultado encontrado será usado sem a execução do expert. Assim, a otimização pode ser interrompida, pois a próxima inicialização da otimização do expert com as mesmas entradas permitirá o recebimento, a partir do cache, de resultados previamente calculados e a continuidade dos cálculos da passagem interrompida do provador. Caso os dados do teste tiverem sido alterados, o expert tiver sido recompilado, ou bibliotecas usadas pelo expert tiverem sido substituídas, o cache do expert será zerado e todos os cálculos serão realizados novamente.

O provador não pode controlar mudanças em bibliotecas de nível 2 ou maior (ou seja, bibliotecas chamadas de outras bibliotecas)! É por isso que, em casos do tipo, é necessário zerar o cache manualmente, por exemplo, recompilando o expert. Os arquivos contendo dados armazenados em cache são armazenados no diretório tester\caches.

O armazenamento em cache de resultados de otimização ajuda também quando se ativa um algoritmo genético. O algoritmo genético de otimização pode ser ativado nas propriedades do expert na aba "teste".


Os parâmetros do algoritmo genético são definidos automaticamente.

  • O tamanho da população depende da quantidade de todas as combinações possíveis de parâmetros, e pode ter valores de 64 a 256.
  • A quantidade mínima de gerações depende do tamanho da população, e pode ter valores de 15 a 31.
  • Assim, a quantidade mínima de passagens do otimizador genético está na faixa de 960 a 7936.
  • A probabilidade de cruzamento é igual a 100%. Genes são cruzados aleatoriamente, sendo que um indivíduo não pode cruzar consigo mesmo.
  • A probabilidade de mutação é igual a 10%.
  • A probabilidade de inversão é igual a 10%.
  • A otimização genética é encerrada se o patrimônio genético não tiver melhorado durante o curso de vida de 10 gerações, considerando que a quantidade mínima de gerações foi formada.

O diário de teste fica localizado no diretório \logs. Os seus arquivos tem extensão .log. Um arquivo log separado corresponde a cada dia individual. Os logs do provador são deletados automaticamente dentro de 5 dias. Se a opção "limpar todos os diários" for selecionada no menu de contexto da aba "diário", o conteúdo atual desta aba será deletado, e todos os arquivos log serão removidos.

Dado que a saída em massa de dados é possível no diário durante testes, pode ser que a informação não chegue toda à aba "diário", mas ela certamente chegará a um arquivo log. Durante a otimização, não é fornecida nenhuma saída no diário.

Após o término do teste, a memória RAM que já não está sendo utilizada pelo provador pode ser esvaziada. Para fazer isso, basta fechar a janela "provador" usando o menu principal ou Ctrl+R, ou clicando sobre "provador de estratégias" na barra de ferramentas.

Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/1417

Dez erros básicos cometidos por novatos em transações comerciais Dez erros básicos cometidos por novatos em transações comerciais
Há dez erros básicos cometidos por novatos em transações comerciais: realizar transações durante a abertura do mercado, ter pressa excessiva de obter lucros, adicionar lotes a uma posição desvantajosa, fechar posições começando pela melhor delas, vingança, as posições mais preferíveis, realizar transações partindo do princípio de "comprado para sempre", fechar uma posição estratégica lucrativa no primeiro dia, fechar uma posição quando é alertado a abrir uma posição oposta, dúvidas.
Segredos do terminal do cliente MetaTrader 4: Sistema de alerta Segredos do terminal do cliente MetaTrader 4: Sistema de alerta
Como estar ciente do que acontece no terminal e na sua conta sem estar permanente olhando para o monitor. Eventos do sistema; eventos personalizados; onda e arquivos executáveis​​; mensagens eletrônicas; configuração do acesso ao servidor SMTP; publicações; configuração do acesso ao servidor FTP.
Estratégias de negociação Estratégias de negociação
Todas as categorias de classificação de estratégias de negociação são inteiramente arbitrárias. A classificação abaixo tem como objetivo enfatizar as diferenças básicas entre abordagens possíveis de negociação.
Segredos do terminal do cliente MetaTrader 4 Segredos do terminal do cliente MetaTrader 4
21 dicas para facilitar a sua vida: Recursos escondidos do terminal do cliente MetaTrader 4 Tela cheia; teclas de atalho; barra de navegação rápida; minimização de janelas; favoritos; redução do tráfego; desabilitação de notícias; conjuntos de símbolos; Market Watch (observação do mercado); modelos para testes e gráficos independentes; perfis; mira; régua eletrônica; paginação do gráfico em função de barras; histórico da conta no gráfico; tipos de pedidos pendentes; modificação de StopLoss e TakeProfit; desfazer deleção; impressão de gráfico.