Discussão do artigo "Otimização Walk Forward em MetaTrader 5 feita com suas próprias mãos"

 

Novo artigo Otimização Walk Forward em MetaTrader 5 feita com suas próprias mãos foi publicado:

No artigo, são discutidas abordagens que permitem emular com bastante precisão a Otimização Walk Forward através do testador interno e bibliotecas auxiliares implementadas em MQL.

Resta adaptar este mecanismo para funcionar como uma Otimização Walk Forward Sem Interrupção. Para fazer isto, é necessário garantir que a otimização seja realizada apenas segundo os resultados de negociação em cada janela W e ignore todos os períodos de teste S subsequentes. Para isso, nas configurações do testador, é possível selecionar o critério de otimização personalizado, logo, com base nas transações dentro da janela W atual, calculá-lo na biblioteca e, em seguida, retorná-lo no testador usando o manipulador de eventos OnTester. Além disso, a biblioteca deve calcular e armazenar em algum lugar os resultados de negociação para cada período de teste S subsequente. Após a otimização, para cada janela W com deslocamento de i passos, teremos muitos conjuntos de parâmetros, entre os quais já estará definido o melhor conjunto. De acordo com o número desta execução, imediatamente poderemos obter os resultados de negociação no seguinte trecho de teste S. Combinando-los obteremos um relatório completo sobre o Teste Walk Forward durante vários ciclos em D.

Formação do Teste Walk Forward

Fig.1 Formação do Teste Walk Forward

Autor: Stanislav Korotky

 
É correto afirmar que o walk-forward é uma otimização automática? Da mesma forma, a análise de cluster é uma otimização automática?
 
fxsaber:
É correto afirmar que o walk-forward é uma otimização automática? Da mesma forma, a análise de cluster é uma otimização automática?

Não exatamente. A otimização automática é um algoritmo incorporado ao EA que ajusta os parâmetros do EA em tempo real (eu o tenho em meu blog em inglês, em várias partes - o início). O Walk-forward é uma emulação desse processo no histórico, não on-line, e o testador faz a otimização, mas o EA não pode se otimizar sozinho - se pudesse, não haveria necessidade de WFO - basta executar o EA no testador de cenoura e obter um relatório completo sobre o avanço. Além disso, os resultados da análise de cluster não são aplicados automaticamente à próxima etapa do walk-forward ou da otimização simples. Isso provavelmente está implementado em alguns programas.

MQL's OOP notes: On The Fly Self-Optimization of Expert Advisers: part 1
MQL's OOP notes: On The Fly Self-Optimization of Expert Advisers: part 1
  • www.mql5.com
Are you ready for a very very long story? It will be probably most complicated and prolonged publication in the series of MQL OOP so far, but it's surely worth reading, because its main theme is automatic self-optimization of expert advisers on the fly. This is one of the most frequently asked questions of MetaTrader users. And the answer so...
 

Se houver otimização automática no Tester, ela também poderá ser implementada on-line. Em geral, obrigado, eu entendo.

Esse caso pode ser implementado para Expert Advisors sem fontes.

 
fxsaber:

Se a otimização automática for feita no Tester, ela também poderá ser implementada on-line. De qualquer forma, obrigado, entendi.

Esse caso pode ser implementado para Expert Advisors sem fontes.

A MQL5 ainda não tem uma API para gerenciamento de testadores, portanto, a otimização automática on-line por meio do testador só é possível em uma versão "muleta".

 
Stanislav Korotky:

A MQL5 ainda não tem uma API para o gerenciamento de testadores, portanto, a otimização automática on-line por meio de um testador só é possível em uma versão "de apoio".

No momento, não vejo nenhuma limitação.

 

Olá. Você poderia me dizer se é possível realizar uma abordagem semelhante pelo MT5 usando o seguinte algoritmo:

1. otimização em um segmento (por exemplo, um mês) e, em seguida, teste no próximo segmento (por exemplo, também um mês) em parâmetros do melhor lucro / maior número de negociações ou outros parâmetros definidos pelo usuário.

2. Alterne por um determinado período (que seja novamente um mês) com o registro dos resultados em um arquivo. Por exemplo, vamos explorar 2018.

1 mês - otimização, teste de 2 meses nas configurações com melhor lucro - registre os resultados

2 meses - otimização, teste de 3 meses nas configurações com o melhor lucro - registre os resultados

......

11 meses - otimização, 12 meses de teste nas configurações com melhor lucro - registrar os resultados?

 
Luchezar Shalomaev:

Olá. Você poderia me dizer se é possível implementar essa abordagem por meio do MT5, de acordo com o seguinte algoritmo:

1. otimização em um segmento (por exemplo, um mês) e, em seguida, teste no próximo segmento (por exemplo, também um mês) nos parâmetros de melhor lucro/maior número de negociações ou outros parâmetros definidos pelo usuário.

2. Alterne por um determinado período (que seja novamente um mês) com o registro dos resultados em um arquivo. Por exemplo, vamos estudar o ano de 2018.

1 mês - otimização, 2 meses de teste nas configurações com o melhor lucro - registre os resultados

2 meses - otimização, teste de 3 meses nas configurações com o melhor lucro - registre os resultados

......

11 meses - otimização Teste de 12 meses nas configurações com o melhor lucro - registro de resultados?

É sobre isso que trata o artigo. Atualmente implementado sem a necessidade de editar o EA original.

Isso é feito por meio do controle automático do Tester. Ainda não tive tempo de postar a solução finalizada.

 
fxsaber:

É sobre isso que o artigo trata. Atualmente implementado sem a necessidade de editar o EA original.

Isso é feito por meio do controle automático do Tester. Ainda não tive tempo de postar a solução finalizada.

Obrigado, isso funcionará se eu colocar meu EA nele?

#include <WalkForwardOptimizer.mqh>

...

int OnInit(void)
{
  // seu código de trabalho está aqui
  ...

  // opcional, padrão wfo_built_in_loose
  wfo_setEstimationMethod(wfo_estimation, wfo_formula);

  // opcional, padrão DBL_MAX
  wfo_setPFmax(100);

  // opcional, padrão falso
  // wfo_setCloseTradesOnSeparationLine(true);
  
  // obrigatório, todos os parâmetros do arquivo de cabeçalho
  int r = wfo_OnInit(wfo_windowSize, wfo_stepSize, wfo_stepOffset, wfo_customWindowSizeDays, wfo_customStepSizePercent);...............
 
Luchezar Shalomaev:

Obrigado, isso funcionará se eu colocar meu EA lá?

Isso é para o autor do artigo. Mas ele ainda foi projetado para programadores.

 
Luchezar Shalomaev:

Obrigado, isso funcionará se eu colocar meu EA lá?

O código fornecido está incompleto - você precisa usar mais alguns manipuladores - isso está nos exemplos. Mas você precisa da biblioteca em si (não apenas do arquivo de cabeçalho). Se você adquiriu a biblioteca, escreva em particular.