Discussão do artigo "Otimização Walk Forward Contínua (Parte 4): Gerenciamento de Otimização (Otimizador Automático)"

 

Novo artigo Otimização Walk Forward Contínua (Parte 4): Gerenciamento de Otimização (Otimizador Automático) foi publicado:

O principal objetivo do artigo é descrever o mecanismo de trabalho com nosso aplicativo e seus recursos. Assim, o artigo pode ser tratado como instruções sobre como utilizar o aplicativo. Ele cobre todas as possíveis dificuldades e detalhes do uso do aplicativo.

Para prosseguir com a análise do programa criado, nós precisamos primeiro definir o objetivo deste projeto. Nós decidimos usar uma abordagem científica na negociação e começamos a criar algoritmos de negociação claramente programados (independentemente de lidarmos com robôs baseados em indicadores ou aqueles que aplicam lógica fuzzy e redes neurais — todos eles são algoritmos programados que executam tarefas específicas). Portanto, a abordagem para a seleção dos resultados da otimização também deve ser formalizada. Em outras palavras, se durante o processo de negociação nos abstrairmos sobre as causalidades, o processo de preparação para a negociação também deverá ser automatizado. Caso contrário, nós podemos selecionar os resultados que gostamos aleatoriamente, o que é mais próximo da intuição do que da negociação sistemática. Essa ideia é o primeiro motivo que me incentivou a criar esse aplicativo. O próximo é a possibilidade de testar algoritmos otimizando-os — através da otimização de Walk Forward contínua mostrada na figura abaixo.   


A otimização de Walk Forward contínua alterna entre os passes da otimização do histórico (amarelo) e do forward (verde) em um determinado intervalo de tempo. Suponha que você tenha um histórico de 10 anos. Nós determinamos que o período de otimização deve consistir em um intervalo igual a 1 ano e um intervalo de forward de 1 trimestre (ou 3 meses). Como resultado, nós temos um intervalo igual a 1.25 anos (1 ano + 1 trimestre) para um passe de otimização + um teste de forward. Na figura, cada linha caracteriza esse intervalo de tempo.

Autor: Andrey Azatskiy

 
Trabalho sério. Seria interessante comparar os resultados entre diferentes implementações de otimização automática no mesmo EA.
 
fxsaber:
Trabalho sério. Seria interessante comparar os resultados entre diferentes implementações de otimização automática no mesmo EA.

Obrigado pelo feedback positivo

 

É uma verdadeira façanha de sua parte fazer esse trabalho de forma voluntária. Há uma semana de escrita e cerca de meio ano de desenvolvimento de código. A automação da otimização não é a tarefa mais importante para a parte do cliente do terminal? Infelizmente, a MQ não dá atenção a isso e presta mais atenção às solicitações dos corretores (eles pagam). É estranho que não haja uma explosão de comentários entusiasmados dos usuários. O quê, ninguém está otimizando?

Ainda não tive a chance de compilar o projeto, apenas de ver a interface no modo de depuração e ler o artigo, mas tudo parece extremamente promissor. Preciso encontrar instruções sobre como compilar no Visual Studio.

Seria bom adicionar a capacidade de enumerar ferramentas na visão geral do mercado para cada intervalo de otimização. Isso exigirá energia, mas em intervalos curtos será possível avaliar o resultado. Bem, talvez a localização em russo? Mas tudo está claro como está.

Aperto sua mão e agradeço pelo seu trabalho.

 
Good Beer:

É uma verdadeira façanha de sua parte fazer esse trabalho de forma voluntária. Há uma semana de escrita e cerca de meio ano de desenvolvimento de código. A automação da otimização não é a tarefa mais importante para a parte do cliente do terminal? Infelizmente, a MQ não dá atenção a isso e presta mais atenção às solicitações dos corretores (eles pagam). É estranho que não haja uma explosão de comentários entusiasmados dos usuários. O quê, ninguém o otimiza?

Ainda não tive a chance de compilar o projeto, apenas de ver a interface no modo de depuração e ler o artigo, mas tudo parece extremamente promissor. Preciso encontrar instruções sobre como compilar no Visual Studio.

Seria bom adicionar a capacidade de enumerar ferramentas na visão geral do mercado para cada intervalo de otimização. Isso exigirá energia, mas em intervalos curtos será possível avaliar o resultado. Bem, talvez a localização em russo? Mas tudo está claro como está.

Aperto sua mão e agradeço pelo seu trabalho.

Obrigado por seu comentário, espero que meus desenvolvimentos sejam úteis. Em artigos futuros, descreveremos como construir o projeto no VS e como você pode implementar sua própria lógica de otimização.

Com relação à compilação, se você executar o projeto no modo de depuração no Studio, ele já foi compilado. Você pode encontrá-lo no diretório MetaTrader Auto Optimiser/bin/Debug

 

Ainda não iniciei seu programa, mas as primeiras perguntas já apareceram:

1. Entendi corretamente que não há suporte para critérios de otimização definidos pelo usuário? Isso seria muito necessário.

2. Como é garantido o deslizamento contínuo da otimização? Você precisa inserir todos os intervalos de otimização e de avanço manualmente? Por que não implementá-lo desta forma?

Data de início da otimização/período de otimização (mês, semana, dia)/escala do período de otimização/período de avanço/escala de avanço. Divida programaticamente o período em passagens. Eu fiz isso no multitester. Mas um ano escrevendo até mesmo uma semana de cada vez vai deixá-lo impressionado. E o escalpelamento também pode ser usado.

3. apenas uma curiosidade: por que você precisa da substituição de macro "TESTER_ONLY"? O Expert Advisor descarregará o gráfico sem ela.

 
Good Beer:

Ainda não comecei seu programa, mas já tenho as primeiras perguntas:

1. Entendi corretamente que não há suporte para critérios de otimização definidos pelo usuário? Isso seria muito necessário.

2. Como o deslizamento contínuo da otimização é fornecido? Você precisa inserir todos os intervalos de otimização e de avanço manualmente? Por que não implementá-lo dessa forma?

data de início da otimização/período de otimização (mês; semana; dia)/escala do período de otimização/período de avanço/escala de avanço. Divida programaticamente o período em passagens. Eu fiz isso no multitester. Mas um ano escrevendo até mesmo uma semana de cada vez vai deixá-lo impressionado. E o escalonamento também pode ser usado.

3. apenas uma curiosidade: por que você precisa da substituição de macro "TESTER_ONLY"? O Expert Advisor descarregará o gráfico sem ela.

1. Não preenchi o critério personalizado, pois muitos outros diferentes o substituíram, mas, no futuro, se eu pensar em desenvolver o projeto (como todos os artigos desta série serão concluídos, planejo mais dois), você poderá adicioná-lo, não é difícil. Mesmo uma decisão razoável, obrigado por seu conselho.

2. Com relação às datas, você só precisa inseri-las uma vez, depois salvá-las em um arquivo e, em seguida, carregar o arquivo salvo no futuro. Fiz esse detalhamento pelo fato de que eu mesmo o utilizo para testes de mercado de ações no mercado futuro. Os futuros são testados em grampos e as datas dos grampos não são fixas e são fornecidas pela corretora. Como resultado, defino manualmente o detalhamento dos grampos para que o período de teste não caia no momento do grampeamento. Você só precisa inserir as janelas de otimização necessárias uma vez, salvá-las em um arquivo e, em seguida, carregar esse arquivo.

3. uma macro que não seria executada acidentalmente na vida real. O Expert Advisor é um teste e ainda não está pronto para negociação real. Decidi colocar #define nesse macro para que ninguém o execute acidentalmente em uma negociação real. Graças a essa #definição, o Expert Advisor pode funcionar apenas no testador e, se você carregar o robô no gráfico imediatamente, ele será simplesmente excluído.

 
Good Beer:

2. Como é garantida a otimização contínua do deslizamento? ...

No artigo final, descreverei passo a passo todo o processo de otimização deslizante com o código anexado. A questão é que o próprio algoritmo de otimização é implementado separadamente. E, como mencionei anteriormente, você pode adicionar outro algoritmo ao algoritmo de otimização atual.

 

Good Beer:

Ainda não consegui compilar o projeto...

A maneira mais fácil e rápida de compilar é abrir o projeto e pressionar CTRL+SHIFT+B.

Mais visual - clique na seta verde no editor, o aplicativo será iniciado no modo de depuração de código, mas a compilação também ocorrerá.

Outra opção - no menu suspenso, clique em Build

Later no caminhoMetaTrader Auto Optimiser/bin/Debug (ou MetaTrader Auto Optimiser/bin/Release, dependendo do tipo de compilação selecionado) - o programa compilado aparecerá.

 

Vários critérios de otimização podem ser inseridos na janela de classificação. Como eles devem ser multiplicados? De qualquer forma, você não pode prescindir de um critério personalizado. Por exemplo, é bom usar o número de transações como raiz ou usar o módulo Sharpe para o número de transações. Por favor, não desista dessa ideia.

A lista de períodos pode ser criada usando as ferramentas MQL.

Sobre #define TESTER_ONLY, eu quis dizer que a expressão entre colchetes funcionará sem TESTER_ONLY. Não entendo por que você precisa usar a substituição... Já vi isso muitas vezes.

 
Good Beer:

Vários critérios de otimização podem ser inseridos na janela de classificação. Como eles devem ser multiplicados? De qualquer forma, você não pode prescindir de um critério personalizado. Por exemplo, é bom usar o número de transações como raiz ou usar o módulo Sharpe para o número de transações. Por favor, não desista dessa ideia.

A lista de períodos pode ser criada usando as ferramentas MQL.

Sobre #define TESTER_ONLY, eu quis dizer que a expressão entre colchetes funcionará sem TESTER_ONLY. Não entendo por que você precisa usar a substituição... Já vi isso muitas vezes.

Bem, assim que eu terminar a primeira versão do artigo, planejarei uma continuação, mas ainda há algumas ideias que eu gostaria de implementar.

Lista de períodos - exatamente no otimizador automático é necessário, ele alterna os testes e deve ver esses períodos (de acordo com a lógica do programa resultante).

Sobre definir:

#ifdef  TESTER_ONLY
   if(MQLInfoInteger(MQL_TESTER)==0 &&
      MQLInfoInteger(MQL_OPTIMIZATION)==0)
     {
      Print("This expert was created for demonstration! It is not anabled for real trading !");
      ExpertRemove();
      return(INIT_FAILED);
     }
#endif

A expressão está envolvida na construção #ifdef #endif - é uma condição executada no momento da compilação. Se você compilar o projeto definindo #define TESTER_ONLY, a expressão envolvida nessa condição será incluída na compilação; se você não a declarar, ela não será incluída. Fiz isso de modo que, se alguém quiser fazer experimentos e executar o robô por sua própria conta e risco, basta comentar a #define TESTER_ONLY, sem alterar o código-fonte.



O método de levar em conta vários tipos selecionados é descrito no primeiro artigo desta série. Lá, tudo acontece por meio da normalização de parâmetros. No entanto, como eu disse antes, você pode criar seu próprio otimizador e criar seu próprio sistema de contabilização desses parâmetros - isso será descrito em um próximo artigo.