MetaTrader 5 Global Optimizer II - Validação por Walk-Forward Efficiency
Introdução
A otimização de Expert Advisors no MetaTrader 5 não deve se limitar apenas à busca pelos melhores sets em um determinado período histórico. Encontrar parâmetros lucrativos é uma etapa importante, mas, isoladamente, não garante que a estratégia tenha capacidade de manter desempenho em dados futuros.
No artigo anterior, MetaTrader 5 Global Optimizer: Uma Estrutura Profissional para Otimizar EAs por Grupos, Subgrupos e Critérios de Robustez, foi apresentada a base da automação. Ela inclui a preparação do EA em MQL5, o uso de insumos obrigatórios e a exportação de resultados via OnTester(). Também abrange a leitura de parâmetros por comentários (@group, @subgroup, @opt, @fixed), a configuração pelo assistente e a execução de baterias por grupos e subgrupos.
O primeiro artigo também apresenta as condições necessárias para que o Python consiga acessar o MetaTrader 5, gerar os arquivos .set e .ini, executar o Strategy Tester e ler os arquivos CSV exportados pelo EA. Por isso, esta continuação parte do princípio de que o ambiente, o EA e a integração básica já estão configurados.
Depois que essa metodologia de otimização está estruturada por grupos, subgrupos, baseline e critérios de robustez, surge uma segunda necessidade: validar se os parâmetros selecionados conseguem sobreviver fora da amostra utilizada na otimização. É nesse ponto que o Walk-Forward Efficiency, ou WFE, se torna uma etapa essencial do processo.
Neste artigo, o fluxo do MetaTrader 5 Global Optimizer será expandido com uma camada de validação walk-forward. Além disso, foram introduzidas modificações na forma como os sets da bateria são organizados e apresentados. Agora, os TOP sets passam a mostrar não apenas os resultados finais, mas também os parâmetros selecionados, os ranges utilizados na otimização e os valores fixos aplicados em cada etapa.
Com isso, o processo fica mais transparente e auditável. A ideia é usar a otimização estruturada para encontrar bons conjuntos de parâmetros e, em seguida, aplicar ciclos de validação fora da amostra para medir estabilidade, eficiência e capacidade de generalização. Assim, o processo deixa de ser apenas uma busca por melhores resultados no histórico. Ele se aproxima de uma metodologia completa:
- preparar o EA e estruturar a otimização;
- selecionar parâmetros por critérios de robustez;
- verificar a consistência em períodos não usados na seleção.
Novas funcionalidades do wizard com WFE
O wizard foi expandido para permitir que a configuração da validação walk-forward seja criada com o arquivo config.json. Antes, o foco principal era preparar a bateria de otimização por grupos, subgrupos, baseline, seleção assistida e rewind. Agora, além dessa etapa, o usuário pode habilitar uma camada adicional de validação por Walk-Forward Efficiency.
A nova seção do wizard pergunta se o usuário deseja ativar o estágio WFE na configuração. Quando essa opção é habilitada, o programa passa a solicitar os principais parâmetros da validação:
- WFE start date.
- WFE end date.
- WFE in-sample window in months.
- WFE out-of-sample window in months.
- WFE rolling step in months.
- How many TOP rows per subgroup to include as WFE candidates.
- Use TOP parameter candidates from optimizer results.
- Maximum WFE candidates to test.
Essas opções definem o período total da validação, o tamanho das janelas in-sample e out-of-sample e o passo usado para avançar entre os ciclos. Os parâmetros que participarão do WFE não são escolhidos pelo wizard: eles são identificados diretamente no arquivo .mq5 pelos comentários @wfe, @wfe1, @wfe2 e @wfe3.
Com essa configuração, o programa cria várias janelas temporais. Em cada janela, otimiza os ranges marcados para o ISS, seleciona o primeiro colocado pelo global_score e aplica os valores vencedores na OSS correspondente.
Preparação dos parâmetros para o WFE
Além de ativar o WFE no wizard, é necessário indicar no arquivo .mq5 quais parâmetros participarão dessa etapa.
A marcação @wfe identifica um parâmetro que será otimizado individualmente em cada janela ISS:
// @wfe // @opt 7 1 30 input int atrPeriod = 16;
Nesse exemplo, somente atrPeriod será variado dentro do range definido por @opt. Os demais parâmetros permanecem com os valores obtidos na bateria principal ou definidos no arquivo de configuração.
Quando dois ou três parâmetros precisam ser avaliados em conjunto, podem ser usadas as marcações @wfe1, @wfe2 e @wfe3:
// @wfe1 // @opt 10 2 40 input int fastEMAPeriod = 24; // @wfe2 // @opt 40 5 100 input int slowEMAPeriod = 70;
Nesse caso, os dois ranges são combinados e otimizados conjuntamente em cada janela ISS.
As regras são:
- @wfe: validação individual;
- @wfe1 e @wfe2: grupo obrigatório de dois parâmetros;
- @wfe1, @wfe2 e @wfe3: terceiro parâmetro opcional; os parâmetros agrupados devem pertencer ao mesmo subgrupo;
- cada slot deve aparecer apenas uma vez.
Antes de executar o WFE, é recomendável verificar se as marcações foram reconhecidas:
python mt5_global_optimizer.py --parse-mq5 "C:\Path\To\MyEA.mq5"A saída deve apresentar, além dos grupos, ranges e valores fixos, o mapa WFE associado aos parâmetros.
O parser da versão atual reconhece essas quatro marcações e permite WFE individual ou agrupado em até três parâmetros.
Foi anexado o arquivo EA_Template_GlobalOptimizer.mq5 como exemplo.
Configuração da validação WFE
A configuração começa pela opção:
Enable WFE stage in this config
Quando o usuário responde y, o wizard passa a registrar os parâmetros da validação walk-forward.
O campo WFE start date define a data inicial usada para montar as janelas de validação. O campo WFE end date define a data final. Esses campos podem ser iguais ao período principal da otimização ou podem usar um período separado, reservado apenas para validação.
Depois, o usuário informa o tamanho da janela in-sample. Essa é a parte usada como referência de treinamento ou otimização histórica. Em seguida, informa o tamanho da janela out-of-sample. Essa é a parte mais importante da validação, porque representa o período posterior, não usado na escolha inicial do set.
Também existe o campo WFE rolling step in months. Ele define o deslocamento entre uma janela walk-forward e a próxima. Por exemplo, com 6 meses de in-sample, 3 meses de out-of-sample e passo de 3 meses, o sistema cria janelas rolantes, sempre avançando no tempo.
Exemplo conceitual:

Walk-Forward Validation Windows
Na prática, o sistema monta automaticamente essas janelas usando os campos de data, meses in-sample, meses out-of-sample e passo definido pelo usuário.
Seleção dos candidatos para WFE
Uma das principais mudanças é que o WFE não precisa testar apenas o set final. Ele pode também aproveitar os melhores candidatos gerados durante a bateria de otimização.
A opção:
Use TOP parameter candidates from optimizer results
Define se o sistema deve buscar candidatos nos arquivos de TOP sets já produzidos pela etapa principal da otimização.
Quando essa opção está ativa, o programa usa os melhores registros dos arquivos de resultado de cada subgrupo como candidatos para o WFE. O campo:
How many TOP rows per subgroup to include as WFE candidatesDefine quantos TOP sets de cada subgrupo serão considerados.
Já o campo:
Maximum WFE candidates to test
Limita o número total de candidatos testados, evitando que a validação walk-forward fique excessivamente pesada.
Com isso, o WFE passa a comparar diferentes alternativas robustas encontradas durante a otimização, em vez de validar apenas um único resultado final. O script cria candidatos a partir do current_defaults.json e, quando habilitado, também dos arquivos *_global_top*.csv, respeitando o limite definido em wfe_max_candidates.
Como executar a configuração pelo wizard
O primeiro passo continua sendo criar o arquivo de configuração:
python mt5_global_optimizer.py --wizard
Durante o preenchimento, o usuário informa: caminho do .mq5, terminal, Data Path, ativos, período, timeframe, modelo do testador, modo de seleção dos conjuntos e configurações do WFE.
Ao final, o wizard grava o arquivo: config_MyEA_global.json. Nesse arquivo ficam tanto as configurações da bateria principal quanto os campos da validação walk-forward.
Exemplo de trecho esperado no config.json:
{
"enable_wfe": true,
"wfe_from_date": "2022.01.01",
"wfe_to_date": "2025.12.31",
"wfe_insample_months": 6,
"wfe_outsample_months": 3,
"wfe_step_months": 3,
"wfe_top_n": 5,
"wfe_use_top_candidates": true,
"wfe_max_candidates": 30
}Esses campos são preenchidos automaticamente pelo wizard quando o WFE é habilitado.
Como executar a bateria completa com WFE
Após criar o config.json, o usuário pode executar o fluxo completo com:
python mt5_global_optimizer.py --config config_NomeDoEA_global.json --stage all
Nesse modo, o processo executa a sequência completa:
- main
- rewind
- wfe
O estágio main executa a otimização principal por grupos e subgrupos. O estágio rewind faz o refinamento fino em torno dos parâmetros aceitos. Depois disso, se enable_wfe estiver ativado no config.json, o script executa automaticamente o estágio WFE. No código, o modo --stage all roda primeiro main, depois rewind e, se o WFE estiver habilitado, inicia o terceiro estágio de validação.
Como executar apenas o WFE
Também é possível executar somente a validação walk-forward, sem repetir toda a otimização.
Use:
python mt5_global_optimizer.py --config config_NomeDoEA_global.json --stage wfe
Esse modo é útil quando a bateria principal já foi executada e os arquivos de resultado já existem na pasta de execução. O WFE então usa os candidatos disponíveis, monta as janelas walk-forward e executa os testes fora da amostra.
Isso permite repetir a validação com outros tamanhos de janela, outros períodos ou outro limite de candidatos, sem refazer toda a bateria de otimização.
Como o WFE executa os testes
Durante o estágio WFE, o programa processa cada janela temporal e cada caminho definido pelos comentários @wfe.
O fluxo é:

Walk-Forward Optimization Flow
O TOP1 pode ter valores diferentes em cada janela. Portanto, o método valida um processo adaptativo de seleção, e não necessariamente um único set fixo durante todo o histórico.
Seleção do TOP1 na ISS
Em cada janela ISS, os resultados dos ativos são consolidados e classificados pelo global_score. O primeiro colocado é registrado como vencedor daquela janela.
O programa salva o parâmetro ou grupo avaliado, os valores selecionados, o score, o lucro, o fator de lucro mediano, o drawdown, o número de trades e a quantidade estimada de passes. A seleção é registrada no arquivo: WFE_ISS_TOP1_SELECTION.csv.Esse arquivo permite verificar exatamente quais valores foram escolhidos antes de cada OSS.
Cálculo do WFE%
Além do score final, o programa calcula a eficiência walk-forward comparando a taxa de lucro da OSS com a taxa de lucro da ISS.A fórmula é:
WFE% = (lucro OSS / meses OSS) ÷ (lucro ISS / meses ISS) × 100Exemplo:
ISS de 6 meses: lucro = 12.000 lucro mensal = 2.000 OSS de 3 meses: lucro = 4.500 lucro mensal = 1.500 WFE% = 1.500 ÷ 2.000 × 100 WFE% = 75%
Um resultado de 100% indica que a taxa mensal da OSS foi igual à taxa mensal da ISS. Um valor abaixo de 100% indica perda de eficiência fora da amostra, enquanto um valor acima de 100% indica que a taxa mensal da OSS superou a ISS.
O WFE% deve ser analisado com fator de lucro, drawdown, consistência e quantidade de trades. Um valor elevado, isoladamente, não é suficiente para confirmar robustez.
Resultados gerados pelo WFE
Ao final da validação, o programa gera sete arquivos principais na pasta de execução:
- O arquivo WFE_ISS_RESULTS.csv registra os resultados consolidados dos TOP 1 selecionados nas otimizações ISS.
- O arquivo WFE_OSS_RESULTS.csv armazena os resultados obtidos por esses vencedores nas janelas OSS correspondentes.
- O WFE_RESULTS.csv reúne os resultados ISS e OSS em um único arquivo.
- O WFE_ISS_TOP1_SELECTION.csv registra os valores que ficaram em primeiro lugar em cada ISS, permitindo auditar as escolhas realizadas antes das OSS.
- O WFE_SUMMARY.csv consolida os resultados de cada caminho WFE e apresenta métricas como lucro OSS, consistência, fator de lucro mediano, drawdown máximo, número de trades, WFE% e wfe_score.
- O WFE_REPORT.md apresenta um resumo textual da configuração, das janelas, dos caminhos avaliados e das escolhas TOP 1.
- O WFE_ANALYSIS.xlsx organiza visualmente as linhas de treinamento e teste, os valores selecionados, as métricas de cada janela e o WFE médio.
Como interpretar o WFE Analysis
O arquivo WFE_ANALYSIS.xlsx é o principal relatório visual da validação walk-forward. Ele organiza os resultados em duas abas complementares.
Aba SUMMARY apresenta a configuração geral do estudo: nome do EA, ativos, período, modelo do Strategy Tester, modo de seleção e número de janelas. Ela também descreve as regras para escolher o top 1 na ISS e validá-lo na OSS.Essa aba deve ser conferida primeiro, pois permite confirmar se a execução utilizou as datas, os ativos e a lógica de validação esperados.
| - | Walk Forward Summary |
|---|---|
| EA | Example_Wizard |
| Symbols | WIN$N |
| Period | 2021.01.01 to 2022.03.31 |
| Model | 1 |
| Selection_Mode | manual |
| WFE_Windows | 3 |
| ISS_Selection_Rule | run ISS candidates in each window and select the ISS TOP 1 by score |
| OSS_Validation_Rule | run OSS only with the ISS TOP 1 selected for the same window |
| WFE_Formula | (OSS profit / OSS months) / (ISS profit / ISS months) * 100 |
A aba WFE_ANALYSIS apresenta a análise detalhada de cada caminho WFE. Para cada janela, o relatório mostra uma linha de treinamento, correspondente à ISS, uma linha de teste, correspondente à OSS, e uma linha com o WFE% calculado para aquele ciclo. Também são exibidos o período analisado, os valores selecionados, o lucro, o fator de lucro, o drawdown, o número de trades e a eficiência de cada janela.

WFE Analysis
A interpretação deve começar pela comparação entre cada par Training e Test. O objetivo é verificar se os parâmetros escolhidos na ISS mantiveram desempenho aceitável na OSS seguinte. Depois, devem ser comparados os valores de WFE entre as janelas e o Average WFE.
Um resultado mais interessante tende a apresentar: OSS positivo em várias janelas, Fator de Lucro aceitável, drawdown controlado, número suficiente de negociações e WFE relativamente estável. O Average WFE não deve ser analisado isoladamente, pois uma média elevada pode esconder uma janela muito boa e várias validações fracas. Por isso, a leitura deve considerar o comportamento completo ao longo do tempo, e não apenas o resultado final consolidado.
Diferença entre otimização e WFE
A otimização principal e o Walk-Forward Efficiency respondem a perguntas diferentes dentro do processo de desenvolvimento de um Expert Advisor.
A otimização principal busca identificar quais sets apresentaram melhor desempenho dentro do período utilizado na bateria de testes. Ela ajuda a encontrar combinações promissoras de parâmetros, mas ainda trabalha sobre um histórico conhecido pelo processo de seleção.
O WFE adiciona uma camada cronológica de validação. Em cada janela, ele seleciona os melhores valores dentro da ISS e verifica se essa escolha continua apresentando desempenho aceitável quando aplicada na OSS seguinte.
Essa diferença é essencial. Um set pode aparecer entre os melhores resultados da otimização principal, mas falhar quando testado em janelas futuras. Nesse caso, o resultado pode indicar excesso de ajuste ao histórico utilizado na otimização.
Por outro lado, um set que não foi o primeiro colocado na otimização, mas que mantém desempenho consistente no WFE, pode ser mais relevante para a continuidade da pesquisa. Isso ocorre porque ele demonstra maior capacidade de generalização e menor dependência de um único período histórico.
Como o processo realiza uma nova escolha em cada ISS, os valores podem mudar entre as janelas. Portanto, o resultado final mede a qualidade de um processo periódico de seleção e reotimização, e não necessariamente a permanência de um único set fixo.

Optimization vs Walk-Forward Efficiency
Limitações da validação
O WFE reduz o risco de aceitar parâmetros ajustados apenas a um período específico, mas não elimina o overfitting. O resultado depende do tamanho das janelas, da quantidade de ciclos, dos ranges utilizados, do número de operações, do modelo do Strategy Tester, dos custos operacionais e da qualidade dos dados. Como a otimização ISS é executada no modo completo, ranges extensos ou grupos com muitas combinações podem aumentar significativamente o tempo de processamento.
Também é importante compreender que o método atual é adaptativo: cada ISS pode selecionar valores diferentes. Assim, o WFE avalia a eficiência de um processo periódico de reotimização, e não garante que um único set continuará válido indefinidamente.
Os resultados devem ser complementados por análise de sensibilidade, Monte Carlo, custos e slippage realistas, testes adicionais e acompanhamento em ambiente simulado.
Conclusão
Com a inclusão do WFE, o MetaTrader 5 Global Optimizer deixa de atuar apenas como uma ferramenta de busca e seleção de parâmetros. Ele passa a funcionar também como uma camada de validação fora da amostra, permitindo comparar os melhores sets em diferentes janelas temporais e medir se a robustez encontrada durante a otimização continua presente em períodos futuros.
Dessa forma, o fluxo se torna mais completo e mais próximo de um processo profissional de desenvolvimento de Expert Advisors: primeiro a estratégia é otimizada de forma estruturada, depois os parâmetros são refinados, em seguida os ranges marcados são novamente avaliados dentro das janelas ISS e, por fim, os valores vencedores são validados nas OSS correspondentes.
Essa abordagem não elimina totalmente o risco de overfitting, mas cria uma etapa adicional de controle. Em vez de aceitar um set apenas porque ele apresentou bom desempenho no período otimizado, o usuário passa a observar se esse desempenho se mantém em diferentes janelas de validação.
O MetaTrader 5 Global Optimizer foi desenvolvido como uma base aberta para evolução. Novas métricas, filtros, relatórios, critérios de seleção, modelos de walk-forward e formas de análise podem ser incorporados conforme a necessidade de cada usuário ou estratégia.
O resultado final não representa necessariamente um único set imutável. Ele mostra se o processo de selecionar parâmetros em uma janela conhecida e aplicá-los na janela seguinte consegue preservar desempenho ao longo dos diferentes ciclos.
Os leitores que desejarem também podem sugerir melhorias, adaptações ou novas ideias para futuras versões do MetaTrader 5 Global Optimizer.
| № | Nome | Tipo | Descrição |
|---|---|---|---|
| 1 | mt5_global_optimizer.py | Script Python | Programa em python com bateria de otimizações e análise WFE |
| 2 | EA_Template_GlobalOptimizer.mq5 | Expert Advisor | EA de base mostrando o básico necessário para parametrização |
Aviso: Todos os direitos sobre esses materiais pertencem à MetaQuotes Ltd. É proibida a reimpressão total ou parcial.
Esse artigo foi escrito por um usuário do site e reflete seu ponto de vista pessoal. A MetaQuotes Ltd. não se responsabiliza pela precisão das informações apresentadas nem pelas possíveis consequências decorrentes do uso das soluções, estratégias ou recomendações descritas.
Caminhe em novos trilhos: Personalize indicadores no MQL5
Redes neurais em trading: treinamento de metaparâmetros com base na heterogeneidade (Final)
Está chegando o novo MetaTrader 5 e MQL5
Redes neurais em trading: treinamento de metaparâmetros com base na heterogeneidade (Componentes principais)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso