English Русский 中文 Español Deutsch 日本語
preview
Domine e utilize o testador de estratégias MQL5 de forma eficiente

Domine e utilize o testador de estratégias MQL5 de forma eficiente

MetaTrader 5Testador | 28 setembro 2023, 10:11
778 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introdução

Como desenvolvedores MQL5, é imperativo entender e aplicar o testador de estratégias para alcançar resultados otimizados. Esta ferramenta oferece insights cruciais sobre a performance dos programas MQL5 que desenvolvemos, influenciando positivamente os resultados de negociação. Antes de iniciarmos os testes, devemos dominar aspectos fundamentais, como a gestão de erros - afinal, falhas são comuns no processo de desenvolvimento. Além disso, a depuração é vital, pois nos permite interagir com os programas que elaboramos. A ferramenta chave neste contexto é o testador de estratégia, superior em funcionalidades ao MetaTrader 4. Neste artigo, embarcaremos numa jornada instrutiva para aprimorar nossa habilidade no uso do testador de estratégias MQL5, detalhado nos próximos tópicos.

O que preciso mencionar aqui é que é normal que todos os leitores já conheçam a linguagem de programação MQL5 e saibam como codificar seus programas, pois este é um pré-requisito para obter o máximo de benefícios ao ler este artigo. Se você precisa aprender sobre a linguagem primeiro, pode encontrar a documentação MQL5. Além disso, você pode ler meus outros artigos sobre aprendizado dos conceitos básicos de programação MQL5 e como criar sistemas de negociação com base nos indicadores técnicos mais populares, e espero que os ache úteis.

Erros

Neste tópico, exploraremos os erros comuns ao desenvolver, executar e operar programas MQL5. O MQL5 sinaliza esses erros, mas entender o seu significado e localização agiliza o processo de correção.

Ao programar em MQL5, podemos nos deparar com erros de compilação e avisos. Durante a execução do programa MQL5, encontramos os erros em tempo de execução, e ao tentar negociar, surgem os erros associados ao servidor de negociação. Assim, focaremos nos seguintes erros:

  • Erros e avisos de compilação
  • Erros de execução
  • Erros do servidor de negociação

É fundamental saber onde esses erros são exibidos. No ambiente de desenvolvimento MQL5, existe uma janela de ferramentas na parte inferior. Se não estiver visível, é possível ativá-la através dos seguintes métodos:

1- Exibir ==> Ferramentas

Ferramentas

2- Combinação de teclas Ctrl+T

3- Ícone Ferramentas na caixa de ferramentas principal

Ferramentas 2

A janela em si tem a seguinte aparência:

Ferramentas 3

Erros de compilação e avisos:

Quando escrevemos nosso código para um programa específico, é normal cometermos erros, como escrever uma sintaxe incorreta ou ter erros de digitação, por exemplo, o que leva a erros ao compilar o código. Nesta parte, compartilharemos os erros mais populares e comuns desse tipo. A coisa mais importante que você precisa saber é que o programa não pode ser compilado até que os erros sejam eliminados ou resolvidos. Os erros mais comuns desse tipo são:

Ponto e vírgula ausente (semicolon expected error):

Esse erro surge quando omitimos um ponto e vírgula ao final da linha. Em outras palavras, é o resultado de um ponto e vírgula faltante ou da omissão de um colchete esquerdo. O código a seguir é um exemplo desse erro.

Código incorreto:

int a=(2+1)

A mensagem de erro em si é semelhante a esta:

semicolon expected

O código correto é:

int a=(2+1);

Após corrigir o erro e compilar, a janela apresentará o seguinte aspecto:

erro corrigido

Erro de token inesperado (unexpected token error):

Frequentemente nos deparamos com este tipo de erro, geralmente causado por omitir um parêntese direito na última linha do código ou por adicionar um parêntese esquerdo extra na linha atual. A seguir, apresentamos um exemplo deste erro:

Código incorreto:

int a=(2+1;

Mensagem de erro:

Token desnecessário

O código correto é:

int a=(2+1);

Guia de erros após a correção e a compilação:

erro corrigido

Erro de identificador não declarado (undeclared identifier error):

Esse erro surge quando utilizamos uma variável sem tê-la declarado previamente. Toda variável precisa ser declarada antes de ser usada ou receber um valor. Essa declaração implica na escolha do tipo de dados adequado, como inteiro ou string. A seguir, ilustramos esse erro ao empregar uma variável não declarada.

Código incorreto:

a=5;

No código anterior, usamos a variável (a) atribuindo 5 a ela sem declará-la. A mensagem de erro é semelhante a esta:

Identificador não declarado

Conforme podemos ver, a precisão da descrição do erro pode ser muito útil, pois não apenas relata o erro, mas especifica a variável 'a' que é a causa desse erro.

O código correto é:

int a=5;

Erro de parêntese esquerdo desequilibrado (unbalanced left parenthesis error):

O erro ocorre se esquecermos um parêntese ou colocarmos um parêntese extra em algum lugar. Abaixo podemos encontrar um exemplo.

Código incorreto:

   bool a=7;
   if (a=5
   a=5;

No código anterior, percebemos que, ao esquecer o parêntese direito, ocorre o erro de "parêntese esquerdo desequilibrado", além do erro de "algum operador esperado", conforme na seguinte imagem:

Parêntese esquerdo ausente

O código correto é:

   bool a=7;
   if (a=5)
   a=5;
Após a correção do erro, o código é compilado normalmente.


Erro de fim inesperado do programa (unexpected end of program error):

Às vezes, omitimos um colchete de fechamento em nosso código e isso resulta em um erro de fim inesperado do programa. Abaixo podemos encontrar um exemplo.

Código incorreto:

void OnStart()
  {
   bool a=7;
   if (a=5)
   a=5;

A falta do colchete de fechamento resultou em dois erros: fim inesperado do programa e parênteses desbalanceados

unexpected end of program

O código correto é:

void OnStart()
  {
   bool a=7;
   if (a=5)
   a=5;
   }

Após a correção do erro, o código é compilado normalmente.

Erro de expressões em escopo global (expressions are not allowed on a global scope error):

Este erro surge quando deixamos de incluir um colchete esquerdo em um operador composto ou ao posicionar uma declaração ou expressão fora do escopo de uma função determinada. Expressões devem ser utilizadas apenas dentro do escopo de funções. Veja o exemplo a seguir.

Código incorreto:

   int a=(7+5);
   if (a<7)
   
   a=7;
   }

Nós omitimos a abertura (}), o que alterou o escopo e causou o erro "Expressions are not allowed on a global scope". É assim que a mensagem de erro aparece na aba "Erros".

Expressões em nível global não são permitidas


O código correto é:

   int a=(7+5);
   if (a<7)
   {
   a=7;
   }

Após a correção do erro, o código é compilado normalmente.

Erro de contagem de parâmetros (wrong parameters count error):

Esse erro surge quando utilizamos uma função específica e não definimos seus parâmetros de maneira correta, fornecendo muitos ou insuficientes. A seguir, apresentamos um exemplo desse tipo de falha.

Código com erro:

Se criamos a função myVal para retornar um valor inteiro resultante da soma de dois valores inteiros, isso significa que temos dois parâmetros nessa função? Quando chamamos essa função usando parâmetros diferentes desses dois, obteremos o mesmo tipo de erro, como visto no código a seguir.

void OnStart()
  {
   int example=myVal(10);
  }
//+------------------------------------------------------------------+
int myVal(int a, int b)
  {
   return a+b;
  }

Após compilar o código, receberemos um erro:

Erro de contagem de parâmetros

O código correto é:

Precisamos usar os parâmetros especificados da função criada, conforme mostrado abaixo.

void OnStart()
  {
   int example=myVal(10,20);
  }
//+------------------------------------------------------------------+
int myVal(int a, int b)
  {
   return a+b;
  }

Após a correção do erro, o código é compilado normalmente.

Erro de operador ausente (some operator expected error):

Há um operador omitido ou inserido erroneamente. Veja o exemplo a seguir.

Código com erro:

int a= 7 10;

No código, um operador entre dois números foi omitido, o que causa o erro:

Operador ausente

O código correto é:

int a= 7+10;

Após a correção do erro, o código é compilado normalmente.

Os erros citados estão entre os mais frequentes desta categoria, tais como erros de compilação. No entanto, mencionamos que há também avisos de compilação. É essencial entender o que eles representam, pois servem para informar e não são considerados erros. A seguir, apresentamos um exemplo de código com um aviso na aba "Erros".

int a;

Ao compilar o código anterior, receberemos um aviso de que a variável 'a' não foi usada, pois declaramos uma nova variável 'a' mas não a utilizamos ou atribuímos valor a ela.

 warning

Você pode verificar todos os detalhes do MQL5 no seguinte link da documentação para obter mais informações sobre:

Algumas sugestões valiosas para resolver esses erros, caso surjam:

  • Inicie a correção pelo começo, pois isso pode resolver erros subsequentes.
  • Ao clicar duas vezes em uma linha de erro na aba "Errors" da caixa de ferramentas, você será direcionado diretamente à linha de código com o problema.

Agora aprendemos sobre os erros que podemos encontrar na primeira fase ao escrever o código do programa MQL5. Vamos avançar para a segunda fase, que são os erros que ocorrem quando executamos o programa, conhecidos como erros em tempo de execução.

Erros de execução:

Como mencionamos anteriormente, os erros em tempo de execução são os tipos de erros que ocorrem durante a execução de um programa MQL5. Esses erros não impedirão que o código seja compilado sem erros, mas ele não será executado da maneira que precisamos. Podemos encontrar esses erros no registro como mensagens que indicam a causa do erro, bem como a linha que contém o erro no código-fonte.

Como exemplos de tais erros temos:

Código de erro Causa do erro
4007
  Memória insuficiente para realocação de array ou tentativa de redimensionar um array estático
4101   Identificador de gráfico incorreto
4301   Símbolo desconhecido
4754   Ordem não encontrada
5120   Erro interno do banco de dados

Você pode visualizar esses códigos usando a função GetLastError(), adicionando um método de tratamento de erros ao seu programa. Você também pode ver esses erros visualizando a guia "Log" durante o teste ou a guia "Experts" durante a execução do programa no gráfico. Todos os erros de tempo de execução com códigos são apresentados na documentação MQL5 aqui:

https://www.mql5.com/pt/docs/constants/errorswarnings/errorcodes

Preciso mencionar aqui que o programa não encerrará a execução após o erro em tempo de execução, exceto por alguns erros críticos que encerrarão a execução, como o erro de array fora de alcance (array out-of-range).

Erros do servidor de negociação:

Esses tipos de erros ocorrem na fase de execução de uma negociação como parte de uma solicitação de negociação MqlTradeRequest usando a função OrderSend(). Esses erros podem ser vistos na guia "Logs" durante o teste ou na guia "Experts" ao executar um programa em um gráfico. Exemplos de erros:

Código de erro
Causa do erro
10006
  Solicitação negada
10032
  Operação permitida somente para contas reais
10033
  O limite do número de ordens pendentes foi atingido
10034
  O limite do volume de ordens e posições para dado símbolo foi atingido
10041
  A solicitação para ativar uma ordem pendente foi rejeitada, e a própria ordem foi cancelada

Você pode ver todos os códigos desse tipo de erro no link a seguir da documentação MQL5:

https://www.mql5.com/pt/docs/constants/errorswarnings/enum_trade_return_codes

Depuração

O depurador MQL5 pode ser usado para executar o programa criado com base em dados históricos ou atuais. Os botões do depurador na barra de ferramentas do MetaEditor são mostrados abaixo:

 Botões do depurador

1- Iniciar/Retomar a depuração em dados históricos

2- Iniciar/Retomar a depuração em dados reais

3- Pausar a depuração

4- Parar a depuração

Ao iniciar a depuração com base em dados históricos, você começará imediatamente a testar o programa usando o histórico. Ao depurar os dados atuais, o programa é executado no gráfico atual.

Testador de estratégias

Nesta parte ou tópico, aprendemos sobre a ferramenta mais importante e valiosa no MetaTrader 5, que é o Testador de Estratégias com novos recursos que são melhores do que os do testador do MetaTrader 4, como, por exemplo, os testes em várias moedas e outros. Podemos abri-lo de uma das seguintes maneiras:

1- Ao abrir o terminal de negociação do MetaTrader 5, pressione Ctrl+R no teclado.

2- No menu Exibir, escolha Testador de Estratégias.

Testador

Depois disso, encontraremos o Testador de Estratégias na guia Visão Geral

Testador1

Simplesmente, por meio da guia Visão Geral, escolheremos o que precisamos testar e, assim que fizermos isso, a guia será alterada para a guia Configurações com configurações predefinidas com base no que você escolheu para testar.

  • Único - teste de EAs sem visualização.
  • Indicador - teste do indicador.
  • Visualização - teste no modo de visualização. Permite que você veja como o programa responde aos dados de acordo com suas instruções.
  • Teste de estresse atrasado - teste com atrasos.
  • Opções de otimização (completa, genética, otimização progressiva).
  • Varredura de mercado - teste de varredura de mercado.
  • Cálculo matemático - verificação de cálculos matemáticos.

Você também pode ver os resultados dos testes anteriores por meio da última opção Visualizar resultados anteriores. Você também pode pesquisar um teste anterior específico por meio da pesquisa abaixo das opções de teste.

Na guia Configurações, veremos o seguinte:

 Testador2

  •   1. Expert Advisor - selecione o arquivo do programa a ser testado.
  •   2. IDE - abre o código-fonte do programa selecionado.
  •   3. Salvar/carregar determinadas configurações.
  •   4. Símbolo - selecione um símbolo para teste.
  •   5. Selecione um período de tempo para o teste.
  •   6. Características do símbolo selecionado.
  •   7. Intervalo - selecione o período de teste.
  •   8. Selecione um período de teste inicial.
  •   9. Selecione o período de teste final.
  •  10. Forward - selecione a fração necessária do período de otimização a ser alocada para o teste avançado.
  •  11. Selecione uma data de início de teste avançado.
  •  12. Atrasos e 13. Aproxime-se dos dados reais e da execução real.
  •  13. Aproxime-se dos dados reais e da execução real.
  •  13/2. Modelagem - selecione um modelo de teste (a cada tick, etc.).
  •  14. Ative a opção para exibir lucros em pips.
  •  15. Depósito inicial.
  •  16. Selecione a moeda do depósito.
  •  17. Alavancagem.
  •  18. Otimização - use a otimização (falaremos mais sobre isso posteriormente).
  •  19. Ative a opção se você precisar visualizar as negociações ou a execução durante o teste.


Na guia Parâmetros, você pode verificar se o programa em teste tem dados de entrada editáveis.

Quando você clica no botão " Iniciar", o programa passa a ser testado. Se a visualização estiver ativada, veremos um gráfico com guias. Negociação exibe as negociações concluídas, se houver alguma. A guia Histórico mostra ordens fechadas ou canceladas. Transações mostra todas as transações. O Diário exibe mensagens do programa e outras informações de serviço. O trabalho do programa também pode ser monitorado na guia Gráfico do testador de estratégias.

Após a conclusão do teste, todas as estatísticas necessárias são exibidas na guia "Backtest"

Testador3

Tester4

Conforme o programa em teste, os dados na aba "Backtest" podem se assemelhar ou divergir do exemplo anterior.

A função de otimização envolve uma vasta variedade de parâmetros e entradas distintas, examinando as entradas e todas as combinações viáveis para escolher os resultados mais eficazes. O modelo de otimização pode ser definido na aba de configurações.

Testador5

Testador6

Os elementos mais importantes que precisamos verificar após o teste são:

  • Lucro líquido - calcula-se subtraindo a perda bruta do lucro bruto.
  • Rebaixamento - a perda máxima na conta durante a operação.
  • Rentabilidade - relação entre o lucro bruto e o prejuízo bruto.
  • Retorno esperado - lucro ou prejuízo médio da transação.
  • Fator de recuperação - determina a capacidade de uma estratégia testada de se recuperar de perdas.  


Considerações finais

Aprendemos alguns tópicos essenciais sobre uma das ferramentas mais importantes e valiosas que todos nós precisamos dominar ao desenvolver qualquer programa MQL5, que é o processo de teste por meio do Testador de Estratégias do terminal de negociação MetaTrader 5, e aprendemos alguns tópicos relacionados que ajudarão a entender e usar essa ferramenta de forma eficaz. Aprendemos sobre os Erros que enfrentamos ao desenvolver programas MQL5, conforme os tipos desses erros, que são:

  • Erros de compilação e avisos.
  • Erros de execução.
  • Erros do servidor de negociação.

Também analisamos o processo de depuração no depurador integrado e examinamos detalhadamente os principais recursos do testador de estratégias, incluindo seus modos de operação e relatórios de teste.

Espero que você encontre este artigo e suas informações úteis para melhorar seus resultados por meio da realização de testes eficazes e aprimoramento de seus programas MQL5. Se você achar o artigo útil e desejar ler mais artigos meus, pode verificar meus outros artigos, como o compartilhamento de como podemos criar sistemas de negociação com base nos indicadores técnicos mais populares.

Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/12635

Redes neurais de maneira fácil (Parte 44): Explorando habilidades de forma dinâmica Redes neurais de maneira fácil (Parte 44): Explorando habilidades de forma dinâmica
No artigo anterior, apresentamos o método DIAYN, que oferece um algoritmo para aprender uma variedade de habilidades. O uso das habilidades adquiridas pode ser usado para diversas tarefas. Mas essas habilidades podem ser bastante imprevisíveis, o que pode dificultar seu uso. Neste artigo, veremos um algoritmo para ensinar habilidades previsíveis.
Desenvolvendo um sistema de Replay (Parte 28): Projeto Expert Advisor — Classe C_Mouse (II) Desenvolvendo um sistema de Replay (Parte 28): Projeto Expert Advisor — Classe C_Mouse (II)
Quanto de fato os primeiros sistema capazes de fatorar alguma coisa, começaram a ser produzidos. Tudo tinha que ser feito por engenheiros com grande conhecimento, no que estava sendo projetado. Isto nos primórdios da computação, onde se quer existia algum tipo de terminal, para que fosse possível programar algo. Conforme ia se desenvolvendo, e o interesse de que mais pessoas também conseguisse criar algo, começou surgir novas ideias e meios, de programar aquelas máquinas, que antes era feito mudando a posição dos conectores. Assim começamos a ter os primeiros terminais.
Como criar um Canal Donchian personalizado usando o MQL5 Como criar um Canal Donchian personalizado usando o MQL5
Há muitas ferramentas técnicas que podem ser usadas para visualizar o canal do preço. Uma dessas ferramentas é o Canal Donchian. Neste artigo, aprenderemos a criar um Canal Donchian e a usá-lo como um indicador personalizado como parte de um Expert Advisor.
Como criar um indicador personalizado True Strength Index usando MQL5 Como criar um indicador personalizado True Strength Index usando MQL5
Apresento um novo artigo sobre como criar um indicador personalizado. Desta vez, trabalharemos com o True Strength Index (TSI) e criaremos um Expert Advisor com base nele.