Escolar Documentos
Profissional Documentos
Cultura Documentos
Otmização Walk Forward PDF
Otmização Walk Forward PDF
Otmização Walk Forward PDF
print=
A negociação algorítmica requer não apenas esforços na concepção e programação de robôs, mas
também, no teste e verificação da durabilidade das ideias e algoritmos. MetaTrader 5 fornece um
testador integrado para otimizar EAs em dados históricos. É impossível superestimar seu valor e
ajuda no trabalho. No entanto, o principal desafio consiste na busca de parâmetros que mantenham
sua rentabilidade no futuro, independentemente do período em que se realiza a otimização. Uma das
formas de lidar com este problema é usando o Teste Walk Forward. O testador fornece o modo
embutido apropriado. Será que basta otimizar um Expert Advisor uma vez e testá-lo com sucesso no
seguinte período para ter certeza de sua estabilidade?
O ciclo de operação do EA sugere que as fases de otimização e negociação são repetidas de tempos
em tempos com a frequência escolhida, e o trader aguarda resultados positivos (ou, pelo menos,
sem perdas) durante um longo tempo. Para garantir a eficiência do sistema, é necessário repetir as
etapas do ciclo muitas vezes no testador por meio do uso da otimização e teste passo Forward com
uma mudança constante do período atual, do passado para o futuro virtual.
Este procedimento é chamado de Otimização Walk Forward e é amplamente utilizado por muitos
traders. Infelizmente, o Testador embutido da MetaTrader não permite que ele seja executado com
um simples clique. Em vez disso, é necessário automatizar a inicialização do Testador, usando
ferramentas externas, e juntar os relatórios do Teste Walk Forward. Seria bom ter um recurso para
realizar uma Análise Walk Forward de uma forma mais simples, usando só funcionalidades
MetaTrader e MQL, sem operações de rotina.
Afinal, podemos criar para nós esse recurso sob a forma de uma biblioteca MQL, que, se necessário,
pode ser anexada a qualquer EA com facilidade. A única exigência é possuir algumas habilidades de
programação, uma
Desenho
Antes de descrever os princípios de funcionamento da biblioteca, proporcionaremos algumas noções.
Primeiro, a janela começará no ponto inicial B, em seguida, deverá se mover um passo para a direita,
logo, muitas vezes sucessivamente, até que a borda direita da janela repouse sobre data final do
intervalo geral D.
Os indicadores para a otimização devem ser calculados apenas com base na negociação dentro da
janela W. Consideraremos - e guardaremos para análise posterior - os resultados de negociação no
trecho S. Desse modo, será possível definir os parâmetros ideais para cada janela e, tendo o número
da passagem, obter a referência para os resultados de teste correspondentes.
1 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
Isto repete inteiramente o passo Forward canônico, com exceção de uma óbvia nuance, isto é, a
negociação em S não começa com o depósito inicial, mas sim com o valor que o EA consegue
ganhar durante o tempo W. Esta particularidade restringe a aplicabilidade da biblioteca apenas a
estratégias com lote fixo. No entanto, a maioria dos traders provavelmente concordaria que a
verificação com lote fixo é o primeiro ponto obrigatório do programa de análise de qualquer Expert
Advisor, mesmo quando se planeja ativar o controle de capital [money management] em fases
posteriores.
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.
2 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
Os tamanhos de W e S podem variar segundo o critério do trader. Por exemplo, pode-se selecionar
uma janela de otimização de 3 meses e um passo Forward de 1 mês. Se o período de verificação D
é 12 meses, no testador é necessário examinar exaustivamente os passos S com deslocamento de 0
a 9 (inclusive). 9 obtido por simples cálculo:
N = (D - W) / S = (12 - 3) / 1 = 9 (1)
Em todas as interações, exceto a última, à direita da janela W, estará localizado o passo Forward. No
entanto, quando o deslocamento é 9, a janela W se aproxima em cheio da data final e torna-se
impossível o Teste Walk Forward. Caso a Otimização Walk Forward seja bem-sucedida, os
parâmetros ideais deste último passo viram o conjunto recomendado para negociação online.
O sucesso da Otimização Walk Forward pode ser avaliado de acordo com vários critérios, discutidos
abaixo. Contudo, nós intuitivamente entendemos que os passos combinados do Teste Walk Forward
formam uma curva de saldo, que é caraterizada pelos habituais indicadores de fator de lucro, índice
de Sharpe, retorno esperado, etc.
Enquanto isso, debruçaremos sobre outra pergunta, isto é, qual tamanho deve ser selecionado para
a janela W e passo S . É lógico confiar ao mesmo Testador a busca de valores ideais. De fato, assim
como nós iteramos exaustivamente os passos do Teste Walk Forward com ajuda de um parâmetro
de entrada especial, fornecido pela biblioteca, podemos incluir na lista a ser otimizada os parâmetros
que definem o tamanho da janela e o tamanho do passo.
A execução da Otimização Walk Forward em conjunto com a seleção dos melhores tamanhos de
janela e passo é chamada de Análise Walk Forward Clusterizada.
3 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
Com a ajuda da biblioteca, e baseados nos resultados de otimização de todos os três parâmetros,
podemos construir um relatório contendo a tabela de rentabilidade do Teste Walk Forward para
diferentes combinações de tamanhos de janela e passo, bem como um relatório detalhado para cada
célula da tabela, em que são apresentados todos os passos sem interrupção dos Testes Walk
Forward, com os valores de W e S respectivos.
Além dos dois modos de utilização descritos, isto é, Análise Walk Forward Clusterizada e Otimização
Walk Forward Sem Interrupção, a biblioteca suporta mais um modo, isto é, o de Otimização Walk
Forward Ancorada. Ele difere do teste sem interrupção (ou sequencial) em que a data inicial da
janela W nunca muda, no entanto, em cada passo, o tamanho da janela aumenta, incluído o período
de teste da iteração anterior. Por exemplo, se continuamos com o exemplo em que o tamanho inicial
de janela é de 3 meses e assumimos que o período geral D começa em janeiro, veremos que, após o
primeiro passo cuja otimização é feita na faixa janeiro-março com teste em abril, o segundo passo
incluirá a otimização para janeiro-abril com teste em maio, o terceiro passo, a otimização na faixa
janeiro-maio com teste em junho, e assim por diante.
Resta só implementar a ideia. Programadores e desenvolvedores de EAs podem criar sozinhos tal
ferramenta. Embora seja grande, é uma tarefa clara. Para aqueles que preferem obter o produto
acabado, já existe uma biblioteca WalkForwardOptimizer (WFO) pronta, para MetaTrader 4 e
MetaTrader 5. Elas diferem em algumas nuances que tornam a versão para MetaTrader 5 mais
atraente. Em particular, nela:
há uma biblioteca concebida como um módulo único que reúne os dados de otimização e
constrói um relatório baseado neles. Na versão para MetaTrader 4, os arquivos são gerados
na pasta tester/Files, desde onde eles devem ser transferidos para a pasta MQL4/Files e, em
seguida, tem de se executar um script separado (todos os links estão anexados no final do
artigo) para construir um relatório sobre sua base;
a maioria das operações manuais rotineiras estão excluídas, como remover arquivos de
preparo antes de iniciar uma nova otimização;
determinam-se automaticamente o nome e valor dos parâmetros de trabalho do EA (no MT4,
estas informações devem ser redirecionadas especificamente através da chamada das
respectivas funções);
suporta-se a otimização em múltiplos fluxos, incluindo o uso de agentes de rede e computação
em nuvem MQL.
Em geral, a versão para MetaTrader 5 é mais eficiente e fácil de usar. Isso é devido à grande
variedade de ferramentas úteis fornecidas pelo MQL5 API do Testador.
Implementação
Pois bem, a interface programática da biblioteca deve fornecer parâmetros de entrada, com os quais
o Testador pode ser configurado em relação à Otimização Walk Forward Sem Interrupção. Eles
são descritos no arquivo de cabeçalho:
4 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
#define DAYS_PER_WEEK 7
#define DAYS_PER_MONTH 30
#define DAYS_PER_QUARTER (DAYS_PER_MONTH*3)
#define DAYS_PER_HALF (DAYS_PER_MONTH*6)
#define DAYS_PER_YEAR (DAYS_PER_MONTH*12)
#define CUSTOM_DAYS -1
enum WFO_TIME_PERIOD
{
none = 0,
year = DAYS_PER_YEAR,
halfyear = DAYS_PER_HALF,
quarter = DAYS_PER_QUARTER,
month = DAYS_PER_MONTH,
week = DAYS_PER_WEEK,
day = 1,
custom = CUSTOM_DAYS
};
A unidade básica de medição é o dia. Não são suportados passos pequenos. Mesmo assim, o
próprio Testador permite definir as datas com precisão de um dia. Para aqueles que usam a
Otimização Walk Forward intradia, a seguir, será apresentada uma opção alternativa que funciona
com precisão de barras.
Note que os elementos da semana, mês, trimestre, ano são definidos como constantes (número fixo
de dias). Não ocorre o alinhamento dos períodos de acordo com as bordas de calendário. Isso
permite melhorar a eficiência dos cálculos e, de forma padronizada, transferir uma janela de tamanho
arbitrário sem âncora às bordas das semanas ou meses. Quando o período é "mês" [month], definido
como 30 dias, e a contagem é realizada a partir do início de qualquer mês, é obvio que cada mês
calendar pode vir depois do seguinte antes ou após o "passo mensal" (porque os meses variam em
número de dias). Quando o processo inicia a partir de meados do mês, o passo oincidirá com o meio
dos meses ulteriores, mas, também, como o deslocamento do dia ordinal do mês.
É através destes parâmetros que é organizada a busca exaustiva de tamanhos durante a otimização
clusterizada. Os tamanhos devem ser escolhidos de tal modo que a porcentagem mínima (inicial) e
suas alterações, com o incremento predefinido, após serem aplicados à janela mínima, deem número
inteiro de dias. Por exemplo, se a janela muda de 10 para 50 com passo 10, não faz sentido tornar a
passo inferior a 10%, porque isto seria apenas 1 dia da janela mínima. Além disso, para o passo
Forward, não vale a pena tomar um incremento inferior a 10%, porque, por exemplo, se ele fosse
igual a 5% e o tamanho de janela 30, a segunda iteração implicaria um teste num intervalo de 15%
(iniciais 10% mais um passo 5%) a partir de 30, o que daria 4.5. Certamente, tal configuração não
levaria a erros fatais, e a biblioteca continuaria a trabalhar normalmente, no entanto os passos do
5 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
Teste Walk Forward poderiam não estar precisamente encaixados, o que afetaria a precisão dos
cálculos.
Infelizmente, neste contexto, a biblioteca não pode oferecer ferramentas convenientes para facilitar a
configuração e verificar se é correta. O usuário (em nosso caso, sequer um pouquinho programador)
deve verificar os parâmetros sozinho. Uma organização diferente da biblioteca pode ser uma maneira
de abordar este problema, em particular, o trabalho com precisão de barras pode ser útil. Falaremos
sobre isso mais tarde.
O parâmetro wfo_stepOffset, após ser incluído na lista a ser otimizada, permite examinar
exaustivamente os passos do Teste Walk Forward. Seu incremento sempre eve ser igual a 1. O valor
máximo é calculado pela fórmula (1), nela é inserido o tamanho máximo da janela W e o tamanho
mínimo da passo S.
O parâmetro Wfo_outputFile define o nome do arquivo .csv, em que será gravado o desempenho
financeiro após cada otimização. O arquivo é criado na pasta MQL5/Files (MT%) ou tester/Files
(MT4).
O parâmetro wfo_estimation define o indicador que será redirecionado para o Testador, a fim de
realizar a otimização. O valor pode ser um da enumeração WFO_ESTIMATION_METHOD:
enum WFO_ESTIMATION_METHOD
{
wfo_built_in_loose,
wfo_built_in_strict,
wfo_profit,
wfo_sharpe,
wfo_pf,
wfo_drawdown,
wfo_profit_by_drawdown,
wfo_profit_trades_by_drawdown,
wfo_average,
wfo_expression
};
Todos os parâmetros têm o prefixo wfo_, assim, eles podem ser facilmente distinguidos dos
parâmetros de trabalho do EA.
Repare que assim que você anexar os arquivos de cabeçalho ao seu EA, nele serão criados os
6 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
parâmetros de entrada descritos, quer dizer, os meta-parâmetros, uma vez que eles controlam o
processo de otimização.
Também deve-se notar que apenas o cabeçalho declara os tipos e meta-parâmetros necessários.
Para que as informações - definidas por eles - fiquem dentro da biblioteca, é preciso um conjunto de
funções abertas, isto é, a interface programática da biblioteca. Elas também são descritos no
cabeçalho do arquivo na forma de diretivas de importação (doravante é considerada a versão para
MetaTrader 5):
#import "WalkForwardOptimizer.ex5"
void wfo_setEstimationMethod(WFO_ESTIMATION_METHOD estimation, string formula);
void wfo_setPFmax(double max);
void wfo_setCloseTradesOnSeparationLine(bool b);
void wfo_OnTesterPass();
int wfo_OnInit(WFO_TIME_PERIOD optimizeWindow, WFO_TIME_PERIOD optimizeStep, int
int wfo_OnTick();
double wfo_OnTester();
void wfo_OnTesterInit(string optimizeLog);
void wfo_OnTesterDeinit();
#import
Funções com prefixo wfo_set são opcionais. Elas permitem definir o modo de operação, porém se
não forem chamadas, serão utilizados os valores padrão. Funções com prefixo wfo_On são
manipuladores de eventos correspondentes. Eles devem ser adicionados ao código-fonte do Expert
Advisor.
Aqui está um exemplo do código-fonte de um EA com biblioteca embutida. Todos os parâmetros das
funções são tomados diretamente a partir dos meta-parâmetros de entrada.
#include <WalkForwardOptimizer.mqh>
...
int OnInit(void)
{
// seu código de trabalho está aqui
...
return(r);
}
void OnTesterInit()
{
wfo_OnTesterInit(wfo_outputFile); // obrigatoriamente
7 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
void OnTesterDeinit()
{
wfo_OnTesterDeinit(); // obrigatoriamente
}
void OnTesterPass()
{
wfo_OnTesterPass(); // obrigatoriamente
}
double OnTester()
{
return wfo_OnTester(); // obrigatoriamente
}
void OnTick(void)
{
int wfo = wfo_OnTick();
if(wfo == -1)
{
// aguardamos quando começa a janela
// não negociamos
return;
}
else if(wfo == +1)
{
// aguardamos o final do teste após a janela e passo Forward
// não negociamos
return;
}
wfo_OnInit envia todos os dados necessários para a biblioteca: tamanho de janela, tamanho de
passo, número de passo, tamanho personalizado de janela em dias, tamanho personalizado de
passo em porcentagem da janela. Ela retorna 0, se for bem-sucedido, ou um código de erro (por
exemplo, INIT_PARAMETERS_INCORRECT), se forem definidos parâmetros inválidos.
wfo_OnTick controla a otimização do EA na janela de otimização e Teste Walk Forward. Ela retorna
0, se o tick atual (ou barra) fica dentro do quadro móvel onde o EA pode operar, bem como -1 ou +1,
se o tick está se encontrar fora da janela e a negociação deve ser desativada temporariamente (-1
indica que a janela ainda não começou, enquanto +1 significa que a janela já passou).
Prática
Após compilado o EA com a biblioteca embutida, é possível proceder à configuração do Testador.
8 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
período geral D, descrito acima. Normalmente, a data final é o hoje real ou algo próximo a isso.
No campo Forward, deve ser selecionada a opção Não (não temos interesse nenhum no Teste Walk
Forward embutido).
No campo Otimização é possível selecionar o modo lento (busca exaustiva) ou rápido (usando
genética), por outro lado, o Critério de otimização precisa ser personalizado.
O uso de algoritmo genético de otimização é permitido, mas é preciso ter em mente algumas
nuances. Algoritmo genético ignora muitas combinações de parâmetros de entrada, incluindo a
combinação de meta-parâmetros, que definem o tamanho da janela, o tamanho da passo Forward e
número da passo, o que pode levar à falta de alguns Testes Walk Forward. Este problema pode ser
perceptível quando a dimensão de busca é imensa (EA com muitos parâmetros de trabalho ou
incrementos), porém, em outros casos, pode ser negligenciado. No relatório gerado, as lacunas são
marcadas, e com base nessas informações, pode-se decidir se é necessário tentar reduzir o espaço
de otimização.
Esse problema geralmente ocorre quando a otimização é clusterizada. As Otimizações Walk Forward
Ancoradas ou Sem Interrupção são menos suscetíveis a ela.
Por outro lado, o passo Forward verifica a estabilidade do algoritmo sobre os dados out-of-sample,
bem como seleciona a melhor profundidade de histórico para a otimização e o passo de re-
otimização (como amiúde encontrar novas configurações). Estas funções são normalmente
realizadas sem encontrar os parâmetros ideais.
9 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
Se você já tiver um tamanho preferencial para a janela de otimização, você poderá executar a
análise clusterizada apenas para o passo que está mudado, e se você já tiver selecionado o tamanho
do passo, apenas será possível alterar o tamanho da janela.
No processo de otimização, WFO cria variáveis globais especiais (elas são armazenadas no arquivo
com extensão GVF) e um arquivo CSV com dados na pasta MQL5/Files. Posteriormente, com base
nelas, gera-se automaticamente uma página html com a descriptografia dos resultados. Os nomes
dos arquivos GVF e HTML coincidem com o nome do arquivo CSV, definido na biblioteca através do
parâmetro wfo_outputFile.
Pegamos um Expert Advisor simples e, com base em seu modelo, examinamos quais relatórios
podem ser obtidos com ajuda da biblioteca, em diferentes modos. O EA foi gerado pelo assistente
MQL5 com base em dois estratégias de negociação, nomeadamente, Envelopes e WPR. Ele está
disponível no Mercado como um produto gratuito.
Atenção! O Expert Advisor não afirma trazer um superlucro. Ele é um tipo modelo habitual, cuja
tarefa é ser uma cobaia para a biblioteca.
Os experimentos serão realizados no gráfico EURUSD D1. Para começar, tentaremos obter um
relatório simples do walk-forward sem interrupção. Definimos o período geral de teste
2015.01.01-2017.06.01.
10 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
No EA é fornecido o parâmetro EnableWFO, que, por padrão, é false. Neste caso, a biblioteca é
desativada, e o Expert Advisor opera como de costume. Para habilitar a biblioteca, é preciso alterar o
valor do sinalizador para true.
Deixamos o valor padrão em wfo_windowSize, isto é, year, bem como o valor padrão quarter no
parâmetro wfo_stepSize. Isso estabelece que o deslocamento da janela de otimização deve ser de 1
ano com deslocamentos de 1 trimestre, trimestre esse que, por sua vez, envolve um único Teste
Walk Forward. O que dá (2.5 anos - 1 ano) / 3 meses = (30 - 12) / 3 = 6 passos do Teste Walk
Forward.
Entre os parâmetros operacionais do Expert Advisor, otimizaremos os níveis Stop Loss e Take Profit,
período e desvio do Envelopes, bem como o período do WPR. O conjunto de parâmetros (wfo-demo-
rolling.set) está anexado no final do artigo.
11 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
Fig.3 Configurações do EA
12 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
Como pode ser visto a partir do relatório, o EA não se porta muito bem nos períodos forward [para
frente]. Mas, partindo da prática científica, é sabido que um resultado negativo é o mesmo resultado
útil.
Agora tentaremos obter o relatório clusterizado e escolher os tamanhos das janelas de otimização e
passo, em que o lucro será estável. Para este fim, nos parâmetros wfo_windowSize e wfo_stepSize
selecionamos a opção custom, em seguida, configuramos wfo_customWindowSizeDays para
otimização de 90 a 180 dias com incremento 30 e wfo_customStepSizePercent - de 10 a 30% com
incremento 10. Obtemos o número máximo de passos em wfo_stepOffset como o quociente entre
(2.5 anos - 90 dias) / (90 dias * 10%) = 810 / 9 = 90. O conjunto de parâmetros (wfo-demo-cluster.set)
está anexado no final do artigo.
Abaixo está um exemplo do relatório resultante ( na próxima seção - Análise - os indicadores são
examinados em mais detalhes).
13 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
Muitas células da tabela mostram resultados satisfatórios. Indicamos com exatidão, por exemplo, que
está escondido sob uma configuração com uma janela de 120 dias, e em incrementos de 30%. Para
fazer isso, clicamos na célula correspondente e vemos o detalhamento do Teste Walk Forward.
14 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
Embora o resultado seja positivo, a curva do saldo é pouco convincente. Depois de analisar outras
opções, podemos concluir que o EA com os parâmetros selecionados, para otimização, neste
momento, não é suficientemente estável. É preciso ora o ajuste do conjunto de estratégias de
negociação, ora a otimização de outros parâmetros não usados.
De um modo geral, o processo para conduzir o EA a resultados aceitáveis sempre dura muito tempo,
e o uso da tecnologia do walk-forward facilita a tarefa, porque permite descartar rapidamente muitas
variantes de verificação, o que de um modo convencional exigiria muito mais esforço. Por enquanto,
mantem-se inalterada a busca de caminhos para melhorar as características do robô, além disso, em
grande parte permanece dependente da intuição. Aqui o Walk-forward não recomenda nenhuma
maneira de operar. O ideal é implementar o método quando já temos um Expert Advisor mais o
menos lucrativo e é necessário esclarecer se seu desempenho está ajustado e verificado com
suficiente cuidado.
Análise
O relatório gerado contém diferentes tipos de dados, dependendo do modo de trabalho selecionado
para a biblioteca. Durante a análise clusterizada, o relatório começa com várias tabelas contendo
resultados finais para muitas Otimizações Walk Forward Sem Interrupção. Em cada tabela, as
colunas correspondem às dimensões da janela W em dias, enquanto que as linhas, às dimensões do
passo S em porcentagem. Cada célula na tabela é um hiperlink, que, ao ser clicado, desencadeia a
transição para o relatório respectivo de Teste Walk Forward Sem Interrupção. Assim, é possível
especificar como buscar qualquer indicador final.
15 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
Lucro anual, eficiência e estabilidade são os principais critérios para avaliar o sucesso de um Teste
Walk Forward. Entende-se que quanto maiores eles, melhor. Recomenda-se a ter uma estabilidade
superior a 50%. As melhores variações são destacadas em verde, nas tabelas de análise
clusterizada.
Além disso, faz sentido prestar atenção ao rebaixamento, retorno esperado e desvio padrão do lucro.
Eles estão disponíveis nos relatórios padrão detalhados.
Os relatórios padrão dos testes sem interrupção são não apenas realizados como detalhados para as
variações da análise clusterizada, mas também como resultados da Otimização Walk Forward Sem
Interrupção simples.
Para o Teste Walk Forward Sem Interrupção (padrão) ou Ancorado, o relatório é uma tabela com
todas as execuções do teste, que geraram dado forward unificado. Em cada linha, são exibidos os
resultados de negociação - lucro, fator de lucro, número total de transações e transações lucrativas,
rebaixamento, índice de Sharpe - separadamente para períodos de otimização e teste. Os
indicadores de otimização são destacados em azul, e, no período de teste, em amarelo. Se o último
passo abrange o tempo "atual" (data final do teste), ela é mostrada a verde, indicando que se trata
dos últimos parâmetros conhecidos, e, portanto, apropriados para a negociação "atual". Claro, o
tempo "atual" é realmente atual, apenas se hoje é definido como a data final da otimização.
Nas três primeiras colunas do relatório forward, são exibidos o número de passagem do teste, a data
inicial da janela de otimização (in-sample), a data inicial do período de teste (out-of-sample) e a data
de seu término. Na última coluna do relatório, são mostrados os valores dos parâmetros encontrados
como resultado da otimização dentro da janela. Pode-se obter ajuda sobre os nomes dos parâmetros
movendo o mouse sobre o cabeçalho da coluna.
Ao usar o método de otimização genética, os números das passagens no relatório incorporado não
são mostrados como um número, mas sim como um "número de geração, número de instância", por
isso, estabelecer uma correspondência entre as linhas do relatório incorporado e as linhas da
biblioteca WFO só é possível de acordo com os parâmetros. Não acontece este problema ao usar o
método lento de otimização, e os números das passagens em ambos os relatórios coincidem. Esta é
uma característica da plataforma MetaTrader 5, e não da biblioteca.
Ao clicar duas vezes na linha correspondente do relatório incorporado do testador, o usuário pode
reproduzir a negociação do EA tanto numa determinada janela da Otimização Walk Forward quanto
no passo subsequente do Teste Walk Forward. Observe que qualquer negociação fora desta data
não será realizada. Para ver como negociaria o EA com este conjunto fora da janela, é preciso
desativar a biblioteca ou definir wfo_windowSize como none.
Aqui está um resumo até agora. Fomos capazes de organizar de forma simplificada uma Otimização
16 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
Nesta biblioteca, também estão disponíveis versões tanto para MetaTrader 4 quanto MetaTrader 5,
mas, para variar, consideraremos aqui a implementação para MetaTrader 4. A documentação
completa juntamente com as nuances entre versões é publicada no blog.
Quando ela é usada, o testador, de fato, não executa a otimização, como tal, mas examina
exaustivamente várias combinações de parâmetros de entrada. A escolha de conjuntos ideais para
cada janela é realizada durante a criação do relatório. O script identifica a janela in-sample
necessária de W, no período geral D, calcula nela os resultados de desempenho para todas as
passagens do teste (cada passagem é um conjunto de parâmetros separado) e encontra a melhor
opção. Além disso, a partir da mesma passagem, resta calcular os indicadores de desempenho da
negociação no passo subsequente out-of-sample S do teste.
Este algoritmo implementa o walk-forward de maneira incomum. Isto permite conseguir a facilidade
de uso, mas também tem efeitos colaterais. Em particular, quando se utiliza o método genético de
optimização, gera-se algum tipo de ideia preconcebida, devido ao fato de que os conjuntos de
parâmetros a serem verificados são ideais num sentido global (durante todo o período D, e não na
janela W atual). Isto pode ser visto como olhar para o futuro. No entanto, por outro lado, os melhores
parâmetros num sentido global, provavelmente, darão menos lucro do que os parâmetros que podem
ser encontrados numa otimização local na janela W.
Em qualquer caso, este problema não existe durante busca exaustiva lenta de parâmetros.
Também deve-se notar que o EA negocia durante todo o período D, e isso traz consigo duais
consequências.
Primeiro, o saldo pode ser arbitrário, para o início da uma janela W específica. Por analogia com o
WFO, isso significa que uma nova biblioteca só poderá ser aplicável para estratégias com lotes fixos.
Em segundo lugar, algumas posições podem - durante sua existência - ultrapassar a borda inicial ou
final da janela, quer dizer, no início da janela, a posição aberta pode já existir e ter um lucro flutuante,
ou a posição pode estar aberta dentro da janela e ser fechada já no passo de Teste Walk Forward.
17 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
#import "wfL.ex4"
int wfl_OnInit(const int cleanUpTimeout);
void wfl_OnTick();
#import
#include <wfL.mqh>
int OnInit()
{
// ... código de trabalho
wfl_OnInit(60);
}
void OnTick()
{
// ... código de trabalho
wfl_OnTick();
}
Imediatamente optimização é realizada usando o mesmo procedimento que o descrito acima, para a
biblioteca do WFO.
O período de otimização deve conter pelo menos 200 barras, mas se recomenda 1 000 ou mais. Isto
é devido ao facto de a divisão do período total em janelas e passos de Teste Walk Forward é levada
a cabo de acordo com as barras, e os conjuntos tanto de valores de tamanho de janela - a serem
examinados - quanto de deslocamentos são predefinidos no código da biblioteca: o tamanho da
janela varia de 10% a 50% em incrementos de 10% (repare que aqui o tamanho da janela é definido
como a porcentagem da faixa total de teste D), enquanto o tamanho do passo S, de 5% a 30% em
incrementos de 5%.
<EA name>-<Symbol>-<Timeframe>-<Date>-<Time>
Nele, encontram-se os arquivos csv com metadados recolhidos pela biblioteca durante cada
passagem do testador. Cada registro no arquivo contém informações sobre uma barra, isto é, data e
hora, saldo, lucro flutuante e número de transações abertas. Com essas informações é possível
calcular o lucro ou perda em qualquer janela dentro do período. Informações sobre transações
individuais não são armazenadas e analisadas.
Tendo movido a pasta selecionada - com todos os arquivos - desde Tester/Files para MQL4/Files,
18 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
Todas os pequenos defeitos, mencionados acima, são compensados com o desempenho e facilidade
de uso. Como, neste caso, não há meta-parâmetros, a Otimização Walk Forward não traz despesas
adicionais em comparação com a usual otimização segundo os parâmetros operacionais
selecionados do EA.
Fim do artigo
Bem, examinamos os possíveis princípios de design e implementação da tecnologia walk-forward no
âmbito das ferramentas atualmente disponíveis do Testador embutido nos terminais. As bibliotecas -
prontas para serem usadas - descritas permitem testar abordagens com o mínimo esforço. Por um
lado, a variante resultante do walk-forward difere do canônico em algumas simplificações e restrições
das bibliotecas, porém, por outro lado, elas proporcionam usabilidade e não requerem quaisquer
programas externos. Atualmente, o MetaTrader não tem um recurso embutido para realizar a
Otimização Walk Forward, e estas bibliotecas fornecem uma alternativa aceitável.
Tabela dinâmica de produtos
WalkForwardOptimizer
Biblioteca
(não é necessário,
WalkForwardReporter
biblioteca MT5 WFO gera
Script
relatórios automaticamente)
WalkForwardDemo
(não)
Expert
WalkForwardLight
Biblioteca
WalkForwardBuilder
Script
(opção)
O clique no ícone leva à página do produto correspondente.
19 of 20 17/09/2019 15:22
MQL5 Site / Otimização Walk Forward em Meta... https://www.mql5.com/pt/articles/3279?print=
20 of 20 17/09/2019 15:22