Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Facebook!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Experts

Visualização dos resultados de otimização em tempo real - expert para MetaTrader 5

Visualizações:
2903
Avaliação:
(48)
Publicado:
2014.01.15 09:07
Atualizado:
2016.11.22 07:33
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

O MetaTrader 5 Strategy Tester permite obter parâmetros estatísticos de um sistema de negociação depois de cada passagem de testes.

Os parâmetros estatísticos podem ser obtidos usando a função TesterStatistics(), a qual é 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 operadores são agora capazes de executar otimizações visuais. Os dados podem agora ser processados ​​e exibidos durante uma otimização de Expert Advisor ou na resolução de problemas matemáticos.

Nós vamos considerar aqui os detalhes de uma visualização dos resultados dos testes de um Expert Advisor durante a sua otimização, descrito no artigo "Visualize uma Estratégia no MetaTrader 5 Tester".


1. A visualização da dinâmica de equilíbrio durante uma otimização

1.1. Baixando Arquivos

O Expert Advisor Moving_Averages_With_Frames.mq5 deverá ser copiado na pasta terminal_data_folder\MQL5\Experts.

Os seguintes arquivos são usados ​​na correta operação do Expert Advisor:
  1. FrameGenerator.mqh - classe CFrameGenerator para a exibição de resultados da otimização;
  2. SpecialChart.mqh - classe CSpecialChart para desenhar vários gráficos de saldo;
  3. SimpleTable.mqh - classe CSimpleTable é uma simples tabela com duas colunas;
  4. ColorProgressBar.mqh - classe CСolorProgressBar é uma barra de progresso que usa duas cores.

Eles devem ser copiados para terminal_data_folder\MQL5\Include.

Programas de código-base podem ser baixados automaticamente via terminais MetaTrader 5 (guia CodeBase da janela "Toolbox"). Para fazer isso, selecione "Download". Todos os códigos serão baixados e colocados em suas respectivas pastas.

Fig. 1. Baixando programas CodeBase via terminais MetaTrader 5

Fig. 1. Baixando programas CodeBase via terminais MetaTrader 5


1.2. Testando o Expert Advisor

O Expert Advisor Moving_Averages_With_Frames.mq5 deve ser iniciado no Strategy Tester.

Configurações de teste:

Configurações de teste de Moving_Averages_With_Frames.mq5

Fig. 2. Configurações de teste de Moving_Averages_With_Frames.mq5

Opções de otimização:

Configurações de otimização de Moving_Averages_With_Frames.mq5

Fig. 3. Configurações de teste de Moving_Averages_With_Frames.mq5


Durante a otimização, o Expert Advisor mostra a dinâmica do saldo e a passagem de otimização dos dados estatísticos:

Fig. 4. Otimização de Moving_Averages_With_Frames.mq5

Fig. 4. Otimização de Moving_Averages_With_Frames.mq5

Processo de otimização:




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

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

O código a seguir foi adicionado para a visualização resultados:
//--- connecting the code for working with optimization results
#include <FrameGenerator.mqh>
//--- frames generator
CFrameGenerator fg;
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//--- insert your optimization criterion calculation function here
   double TesterCritetia=MathAbs(TesterStatistics(STAT_SHARPE_RATIO)*TesterStatistics(STAT_PROFIT));
   TesterCritetia=TesterStatistics(STAT_PROFIT)>0?TesterCritetia:(-TesterCritetia);
//--- invoking after each test and submitting optimization criterion as a parameter
   fg.OnTester(TesterCritetia);
//---
   return(TesterCritetia);
  }
//+------------------------------------------------------------------+
//| TesterInit function                                              |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//--- preparing the chart for displaying several balance lines
   fg.OnTesterInit(3); // parameter sets the number of balance lines on the chart
  }
//+------------------------------------------------------------------+
//| TesterPass function                                              |
//+------------------------------------------------------------------+
void OnTesterPass()
  {
//--- handling obtained test results and displaying graphics
   fg.OnTesterPass();
  }
//+------------------------------------------------------------------+
//| TesterDeinit function                                            |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
//--- optimization end
   fg.OnTesterDeinit();
  }
//+------------------------------------------------------------------+
//|  Chart events handling                                           |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- launches frames display after the optimization end when clicking on the header
   fg.OnChartEvent(id,lparam,dparam,sparam,100); // 100 is a pause in ms between the shots
  }
//+------------------------------------------------------------------+

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

A classe CFrameGenerator é usada para trabalhar com resultados de otimização. A classe contém métodos para se lidar com os eventos do Strategy Tester (OnTester(), OnTesterInit(), OnTesterPass(), OnTesterDeinit()) e para os eventos gráficos (OnChartEvent()). Os objetos gráficos utilizados ​​são preparados no método OnTesterInit() da classe CFrameGenerator.

O método OnTester() da classe CFrameGenerator é chamado em um agente de teste após cada passagem de teste. Este método fornece o cálculo da dinâmica da curva do saldo com base nos resultados de negociação. O gráfico da curva de saldo é uma matriz unidimensional, da qual o comprimento depende do número de operações realizadas.

Então, a função TesterStatistics() é utilizada para solicitar dados estatísticos (lucro líquido, fator de lucro, fator de recuperação, número de negociações, número de ofertas, máximo percentual de drawdown, valor de critérios de otimização personalizada) e um quadro (matriz de dados de teste, no nosso caso) é gerado, que é enviada para o terminal (a partir do agente de teste) utilizando a função FrameAdd().

Os quadros são recebidos e processados ​​no método OnTesterPass() da classe CFrameGenerator. A operação para ler os quadros é realizada pela função FrameNext(). Os pedidos de parâmetros de entrada do Expert Advisor, para o qual foi gerado o quadro, são realizados utilizando a função FrameInputs().

Depois de obter os dados, eles são exibidos e atualizados usando os métodos das classes CSimpleTable, CColorProgressBar e CSpecialChart.

Deve notar-se que a execução das funções OnTester() são realizadas no agente de teste após outro passo de otimização ser finalizado. Isso permite o uso da capacidades da rede distribuída MQL5 Cloud Network para se realizar cálculos matemáticos complexos. Para se fazer isso, coloque uma parte do cálculo no manipulador de eventos OnTester.

Um exemplo do uso da otimização para se acelerar cálculos matemáticos (transformação wavelet contínua da função Weierstrass) é mostrado no tópico "Gerenciando processos de otimização em tempo real e transferência de dados em massa de agentes para MetaTrader 5".


2. Exemplos de como usar as classes CSimpleTable, CColorProgressBar e CSpecialChart

Os scripts anexos Test_SimpleTable.mq5 e Test_CSpecialChart.mq5 contém exemplos de como usar as classes CSimpleTable, CColorProgressBar e CSpecialChart. Eles devem ser copiados para terminal_data_folder\MQL5\Scripts.

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

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

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

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

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/914

Chart_Period_Changer Chart_Period_Changer

Um script simples para mudar os timeframes básicos. Ele permite mudar um período gráfico usando teclas de atalho.

Corrected Average (CA) Corrected Average (CA)

Indicador Média Corrigida por A.Uhl (também conhecido como o "Média móvel ideal").

EA_MARSI EA_MARSI

O Expert Advisor é baseado no indicador EMA_RSI_VA.

EMA_RSI_VA EMA_RSI_VA

Média Móvel Exponencial - Volatilidade RSI - Ajustado por José Silva.