Discussão do artigo "Otimização Walk Forward contínua (Parte 8): Melhorias e correções do programa" - página 2

 
Andrey Azatskiy:

Com relação ao erro de que não há dados para criar, você tem certeza de que incluiu o carregamento automático e a geração de relatórios no EA? Há duas opções aqui: ou você não incluiu no código do EA a funcionalidade de descarregamento automático e geração de relatórios, ou os resultados de negociação do EA não passaram pelos filtros de otimização definidos por você.

No meu entendimento, eu conectei o descarregamento e adicionei linhas ao Expert Advisor:

#include<Trade\Trade.mqh>
#define  CUSTOM_ON_TICK // Informe ao sistema de upload que nós mesmos implementamos o retorno de chamada OnTick
#include <History manager/AutoUpLoader2.mqh> // Incluir o CAutoUploader

#define  TESTER_ONLY
E tudo funcionou de acordo com os parâmetros. A otimização foi visualizada no testador e o Expert Advisor gravou os resultados em seu arquivo. Mas apenas pelo histórico. A passagem para frente não foi registrada. Não havia nada na janela de resultados do otimizador.
 
Good Beer:

No meu entendimento, eu conectei o descarregamento, adicionei strings ao EA:

E tudo funcionou de acordo com os parâmetros. A otimização foi visualizada no testador e o Expert Advisor gravou os resultados em seu arquivo. Mas apenas pelo histórico. A passagem para frente não foi registrada. Não havia nada na janela de resultados do otimizador.

Se você usou "CUSTOM_ON_TICK", precisará adicionar o seguinte código ao seu método OnTick (logo no início):

CAutoUploader2::OnTick(); // Se CUSTOM_ON_TICK foi definido

Renomeie OnTick para MyOnTick ou outra coisa e, em OnInit, escreva a conexão :

CAutoUploader2::SetCallback(MyOnTick, ENUM_CALLBACK_TYPE::CB_ON_TICK);
 
Good Beer:

Você entendeu errado. Você é o único com o tempo de otimização das 12:00 às 12:00. E eu não encontrei onde alterar isso.

Por causa disso, perdemos 12 horas do primeiro dia do histórico e somos otimizados por 12 horas para o período futuro. Por esse motivo, o período avançado é movido um dia para frente, porque esse dia é ocupado pelo histórico.

Como há sete dias em uma semana, o período de otimização deve ser dividido em sete dias. O período do histórico termina na segunda-feira 0-00 e o período futuro começa na segunda-feira 0-00. Acontece que na segunda-feira não testamos, mas fazemos um avanço. Não há máquina do tempo.

A hora é exibida em formato estrangeiro (MM.DD.AAAA HH:MM), mas é definida em nosso formato (DD.MM.AAAA).
Onde a hora não é 12:00 pm = 00:00.

E como especificamos o tempo Po igual a DD.MM.AAAA 00:00:00, se especificarmos o mesmo tempo, o testador não entenderá que precisamos testar a partir da próxima data; em vez disso, ele iniciará o teste a partir da mesma data e obteremos a mesma máquina do tempo. É por isso que estamos retrocedendo um dia. No entanto, você pode reescrever a lógica da definição da hora, basta modificar o método"public void Calculate(DateTime From, DateTime Till, uint history, uint forward)" que está localizado na classe "AutoFrame". O método " AutoFillInDateBordersM", que está localizado na classe " AutoFillInDateBordersM". Essa classe é descrita no arquivo que pode ser encontrado no caminho "MetaTrader-Auto-Optimiser/Metatrader Auto Optimiser/Model/AutoFillInDateBordersM.cs".

É assim que ela é implementada na versão atual:
public void Calculate(DateTime From, DateTime Till, uint history, uint forward)
        {
            if (From >= Till)
                throw new ArgumentException("Date From must be less then date Till");

            List<KeyValuePair<OptimisationType, DateTime[]>> data = new List<KeyValuePair<OptimisationType, DateTime[]>>();

            OptimisationType type = OptimisationType.History;

            DateTime _history = From;
            DateTime _forward = From.AddDays(history + 1);

            DateTime CalcEndDate()
            {
                return type == OptimisationType.History ? _history.AddDays(history) : _forward.AddDays(forward);
            }

            while (CalcEndDate() <= Till)
            {
                DateTime from = type == OptimisationType.History ? _history : _forward;
                data.Add(new KeyValuePair<OptimisationType, DateTime[]>(type, new DateTime[2] { from, CalcEndDate() }));

                if (type == OptimisationType.History)
                    _history = _history.AddDays(forward + 1);
                else
                    _forward = _forward.AddDays(forward + 1);

                type = type == OptimisationType.History ? OptimisationType.Forward : OptimisationType.History;
            }

            if (data.Count == 0)
                throw new ArgumentException("Can`t create any date borders with setted In sample (History) step");

            DateBorders?.Invoke(data);
        }
 
Nguyen Tien Duong:

Olá, os artigos de sua série foram muito úteis, não sou bom em c #, então estou tentando aprender com suas lições

Fiz o download dos arquivos anexados da Parte 4 a 7, mas não consigo criar o projeto "Metatrade Auto Optimiser". Recebi um erro como o da figura:


Arquivos anexadosda Parte 8 Essa é a primeira vez que vejo a interfacedo seu programa, ele conseguiu iniciar o mt5 quando o modo de otimização estava desabilitado e, quando o liguei, como nesta imagem, recebi o erro



Por favor, ajude-me a corrigi-lo. Obrigado

Use o último passado, pois ele contém todos os arquivos e links necessários.

Você precisa adicionar opções de upload em seu especialista. Para fazer isso, use o arquivo "/Data/MQL5/Experts/Test Expert/New uploading variant/SimpleMA.mq5" como exemplo ou compile-o e use-o nos testes.

 
Andrey Azatskiy:

Se você usou "CUSTOM_ON_TICK", precisará adicionar o seguinte código ao seu método OnTick (bem no início):

Desculpe-me por ser obtuso; você poderia ter eliminado o 'OnTick()' padrão?

 
Andrey Azatskiy:

A hora é exibida em formato estrangeiro

Claro, tentarei reescrevê-lo. O problema não era o formato da hora, mas o fato de que o período de avanço estava mais à direita do que deveria. Talvez meu terminal esteja configurado para o formato de 24 horas e isso cause o erro.

 
Good Beer:

Perdoe-me por ser obtuso; foi possível usar o padrão 'OnTick()'?

Tudo pode ser personalizado lá. Estude o arquivo "History manager/AutoUpLoader2.mqh" + um exemplo com o novo formato de upload de dados e tudo ficará mais claro.

Se a definição "CUSTOM_ON_TICK" estiver descrita na sua mensagem , isso significa que você está dizendo que o OnTick é padrão, mas também significa que você precisa tomar cuidado para que a cadeia de código

CAutoUploader2::SetCallback(MyOnTick, ENUM_CALLBACK_TYPE::CB_ON_TICK);

no início do método OnTick.

 

Olá,


Muito obrigado por esse projeto. Tenho certeza de que ele será muito útil.

Acabei de começar a usá-lo e estou enfrentando um problema com a seleção da moeda no "Metatrader Auto Optmiser .exe". É possível usar outra moeda em vez da padrão?

Não há uma opção para escrever uma nova moeda além das opções disponíveis (RUR, USD, EUR, GPB, CHF).


Muito obrigado.

 
Marinho10:

Olá,


Muito obrigado por esse projeto. Tenho certeza de que ele será muito útil.

Acabei de começar a usá-lo e estou enfrentando um problema com a seleção da moeda no "Metatrader Auto Optmiser .exe". É possível usar outra moeda em vez da padrão?

Não há uma opção para escrever uma nova moeda além das opções disponíveis (RUR, USD, EUR, GPB, CHF).


Muito obrigado.

Hi.

Você precisa editar o código do otimizador automático e recompilá-lo.
1. Abra o programa no Visual Studio.
2. Abra o arquivo "AutoOptimiserVM.cs"
3. Na linha #41 - o código a seguir é responsável pela coleção de moedas. Edite-o:

new OptimiserSetting( " Currency", new []{ " RUR", " USD", "EUR", "GBP", " CHF"}),
4. Recompile o programa e você verá sua moeda na caixa de combinação.

 
Solicito que o autor grave um vídeo que mostre os diferentes usos desse projeto.