Início Negociação Sistemática Postagem

Visualizando Resultados de Otimização em Tempo Real no MetaTrader 5

Anexo
914.zip (13.48 KB, Baixar 0 vezes)

O MetaTrader 5, através do seu Testador de Estratégias, permite que você obtenha parâmetros estatísticos de um sistema de trading após cada rodada de teste.

Esses parâmetros podem ser acessados utilizando a função TesterStatistics(), que é chamada dentro das funções OnTester() e OnDeinit().

Com a introdução de funções para trabalhar com resultados de otimização (FrameFirst(), FrameFilter(), FrameNext(), FrameInputs() e FrameAdd()), os traders agora conseguem realizar otimizações visuais. Os dados necessários podem ser processados e exibidos durante a otimização do Expert Advisor ou na resolução de problemas matemáticos.

Neste artigo, vamos explorar os detalhes de um exemplo de visualização dos resultados de testes de um Expert Advisor durante a otimização, conforme descrito no artigo "Visualizando uma Estratégia no Testador do MetaTrader 5".


1. Visualização da Dinâmica do Saldo Durante a Otimização

1.1. Baixando os Arquivos

O Expert Advisor Moving Averages_With_Frames.mq5 deve ser copiado para a pasta terminal_data_folder\MQL5\Experts.

Os seguintes arquivos são necessários para o funcionamento do Expert Advisor:

  1. FrameGenerator.mqh - Classe CFrameGenerator para exibir os resultados da otimização;
  2. SpecialChart.mqh - Classe CSpecialChart para desenhar vários gráficos de saldo;
  3. SimpleTable.mqh - Classe CSimpleTable, uma tabela simples com duas colunas;
  4. ColorProgressBar.mqh - Classe CColorProgressBar para uma barra de progresso com duas cores.

Esses arquivos devem ser copiados para a pasta terminal_data_folder\MQL5\Include.

Programas da Biblioteca de Códigos podem ser baixados automaticamente via o terminal MetaTrader 5 (aba CodeBase na janela "Toolbox"). Para isso, selecione "Baixar". Todos os códigos serão baixados e armazenados em suas respectivas pastas.

Fig. 1. Downloading CodeBase programs via MetaTrader 5 terminal

Fig. 1. Baixando programas da CodeBase via terminal MetaTrader 5


1.2. Testando o Expert Advisor

O Expert Advisor Moving Averages_With_Frames.mq5 deve ser iniciado no Testador de Estratégias.

Configurações do teste:

Configurações de teste do Moving Averages_With_Frames.mq5

Fig. 2. Configurações de teste do Moving Averages_With_Frames.mq5

Opções de otimização:

Parâmetros de otimização do Moving Averages_With_Frames.mq5

Fig. 3. Parâmetros de otimização do Moving Averages_With_Frames.mq5


Durante a otimização, o Expert Advisor exibe a dinâmica do saldo e dados estatísticos da rodada de otimização:

Fig. 4. Moving Averages_With_Frames.mq5 otimização

Fig. 4. Moving Averages_With_Frames.mq5 otimização

Processo de otimização:




1.3. Princípio de Operação do Expert Advisor

O Expert Advisor Moving Averages_With_Frames.mq5 foi criado com base no Moving Averages.mq5 que está incluído no pacote padrão do terminal MetaTrader 5 (MQL5\Experts\Examples\Moving Average).

O seguinte código foi adicionado para a visualização dos resultados:

//--- conectando o código para trabalhar com resultados de otimização
#include <FrameGenerator.mqh>
//--- gerador de frames
CFrameGenerator fg;
//+------------------------------------------------------------------+
//| Função Tester                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//--- insira sua função de cálculo do critério de otimização aqui
   double TesterCritetia=MathAbs(TesterStatistics(STAT_SHARPE_RATIO)*TesterStatistics(STAT_PROFIT));
   TesterCritetia=TesterStatistics(STAT_PROFIT)>0?TesterCritetia:(-TesterCritetia);
//--- invocando após cada teste e submetendo o critério de otimização como um parâmetro
   fg.OnTester(TesterCritetia);
//---
   return(TesterCritetia);
  }
//+------------------------------------------------------------------+
//| Função TesterInit                                              |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//--- preparando o gráfico para exibir várias linhas de saldo
   fg.OnTesterInit(3); // parâmetro define o número de linhas de saldo no gráfico
  }
//+------------------------------------------------------------------+
//| Função TesterPass                                              |
//+------------------------------------------------------------------+
void OnTesterPass()
  {
//--- manipulando os resultados do teste obtidos e exibindo gráficos
   fg.OnTesterPass();
  }
//+------------------------------------------------------------------+
//| Função TesterDeinit                                            |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
//--- fim da otimização
   fg.OnTesterDeinit();
  }
//+------------------------------------------------------------------+
//| Manipulação de eventos do gráfico                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- inicia a exibição de frames após o fim da otimização ao clicar no cabeçalho
   fg.OnChartEvent(id,lparam,dparam,sparam,100); // 100 é uma pausa em ms entre as capturas
  }
//+------------------------------------------------------------------+

Esse código pode ser usado da mesma forma em qualquer Expert Advisor.

A classe CFrameGenerator é utilizada para trabalhar com resultados de otimização. Ela contém métodos para gerenciar os eventos do Testador de Estratégias (OnTester(), OnTesterInit(), OnTesterPass(), OnTesterDeinit()) e o método para eventos do gráfico (OnChartEvent()). Os objetos gráficos utilizados são preparados no método OnTesterInit() da classe CFrameGenerator.

O método OnTester() da classe CFrameGenerator é invocado em um agente de teste após cada rodada de teste. Esse método fornece o cálculo da dinâmica da curva de saldo com base nos resultados de trading. O gráfico da curva de saldo é um array unidimensional, cuja extensão depende do número de operações realizadas.

Em seguida, a função TesterStatistics() é utilizada para solicitar dados estatísticos (lucro líquido, fator de lucro, fator de recuperação, número de trades, número de operações, porcentagem máxima de drawdown, valor do critério de otimização personalizado) e um frame (array de dados da rodada de teste, neste caso) é gerado e enviado ao terminal (do agente de teste) utilizando a função FrameAdd().

Os frames são recebidos e gerenciados no método OnTesterPass() da classe CFrameGenerator. A operação de leitura dos frames é realizada pela função FrameNext(). A solicitação dos parâmetros de entrada do Expert Advisor, para os quais o frame foi gerado, é realizada utilizando a função FrameInputs().

Após obter os dados, eles são exibidos e atualizados utilizando os métodos das classes CSimpleTable, CColorProgressBar e CSpecialChart.

É importante notar que a execução das funções de manipulação do OnTester() é feita no agente de teste após o término de outra rodada de otimização atual. Isso permite o uso das capacidades da Rede Cloud MQL5 para realizar cálculos matemáticos complexos. Para isso, coloque a parte de cálculo no manipulador de eventos OnTester.

O exemplo de uso da otimização para acelerar cálculos matemáticos (transformação wavelet contínua da função de Weierstrass) é mostrado no tópico "Gerenciando processos de otimização em tempo real e transferindo grandes dados dos agentes para o MetaTrader 5".


2. Exemplos de Trabalho com as Classes CSimpleTable, CColorProgressBar e CSpecialChart

Os scripts Test_SimpleTable.mq5 e Test_CSpecialChart.mq5 anexados contêm exemplos de trabalho com as classes CSimpleTable, CColorProgressBar e CSpecialChart. Eles devem ser copiados para a pasta terminal_data_folder\MQL5\Scripts.

Fig. 5. Resultado da execução do script Test_SimpleTable.mq5

Fig. 5. Resultado da execução do script Test_SimpleTable.mq5

Fig. 6. Resultado da execução do script Test_CSpecialChart.mq5

Fig. 6. Resultado da execução do script Test_CSpecialChart.mq5


Publicações relacionadas

Comentário (0)