Bibliotecas: MultiTester - página 17

 

Dei uma olhada nos meus próprios arquivos e, de fato, para alguns símbolos, não apareciam arquivos com histórico de ticks, dei uma olhada no registro e lá estava ele:

2020.02.12 16:02:30.144 Core 1  NZDUSD : real ticks begin from 2017.01.02 00:00:00

Agora eu entendo, o resto foi uma simulação.


A propósito, o MultiTester não muda o símbolo no terminal minimizado, é melhor adicionar a abertura de uma janela antes de iniciar uma nova passagem. Por enquanto, adicionei essa função ao fInit.

bool ActivateTerminalWindow(){
   HANDLE ChartWindow = (HANDLE)ChartGetInteger(0, CHART_WINDOW_HANDLE);
   if(ChartWindow){
      HANDLE TerminalWindow = GetParent(ChartWindow);
      TerminalWindow = GetParent(TerminalWindow);
      TerminalWindow = GetParent(TerminalWindow);
      if(TerminalWindow){
         ShowWindow(TerminalWindow, 3);
         return true;
      }
   }
   return false;
}
 
Evgenii Kuznetsov:

A propósito, o MultiTester não alterna o símbolo no terminal minimizado; é melhor abrir uma janela antes de iniciar uma nova passagem.

Não verifiquei e não encontrei esse problema.

 
fxsaber:

No final, fiz o seguinte. Formar um lote de tarefas a partir de arquivos ini e enviá-lo para execução.

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Expert Advisors: validar

fxsaber, 2020.02.22 10:46 AM

Quando preciso executar várias tarefas diferentes do Tester, uso o Validate.


1. Configuro uma tarefa no Tester que desejo executar.

2. Na guia Configurações, pressiono CTRL+C. Todas as configurações aparecem na área de transferência.

3 Usando CTRL+V, copio essas configurações em um arquivo ini, que coloco na pasta com as tarefas.

4. é assim que crio o número necessário de tarefas - arquivos ini (quatro tarefas na tela).


5. Ao iniciar o Validate, especifico o nome da pasta onde as tarefas estão localizadas.


É isso, agora o Validate, com todos os seus truques, executará essas tarefas.


Eu uso o MultiTester-derivatives somente em casos específicos, quando preciso criar tarefas à medida que as executo.

Recomendo usar o Validate para executar um lote de quaisquer tarefas prontas.

 

Por favor, compartilhe sua experiência sobre como fazer o GA corretamente. Deparei-me com uma situação em que o GA encontra apenas um dos extremos locais necessários.

Para um determinado TS/símbolo, sei onde procurar, então faço o GA em diferentes intervalos. Mas, em geral, não está claro como proceder.

 
fxsaber:

Por favor, compartilhe sua experiência sobre como fazer o GA corretamente. Deparei-me com uma situação em que o GA encontra apenas um dos extremos locais necessários.

Para um determinado TS/símbolo, sei onde procurar, então faço o GA em diferentes intervalos. Mas, em geral, não está claro como proceder.

Acho que houve algo sobre o assunto aqui - https://www.mql5.com/ru/forum/87536.

Ou entre em contato com o autor(@Andrey Dik).

Чемпионат Алгоритмов Оптимизации.
Чемпионат Алгоритмов Оптимизации.
  • 2016.06.09
  • www.mql5.com
Чемпионат алгоритмов оптимизации задуман как соревнование для людей ищущих, любознательных, для которых стоять на месте означает движение назад...
 
Andrey Khatimlianskii:

Acho que havia algo sobre o assunto aqui - https://www.mql5.com/ru/forum/87536

Ou entre em contato com o autor(@Andrey Dik).

Estou fazendo perguntas no contexto do uso do MT5-Tester. Portanto, os algoritmos de otimização personalizados não são adequados.

 
fxsaber:

Por favor, compartilhe sua experiência sobre como fazer o GA corretamente. Deparei-me com uma situação em que o GA encontra apenas um dos extremos locais necessários.

Para um determinado TS/símbolo, sei onde procurar, então faço o GA em diferentes intervalos. Mas, em geral, não está claro como proceder.

Agora paro de testar se o drawdown for grande

e, para animar um pouco o GA, estou fazendo isso:

#define  TESTER_STOP(ret) { EA_STOP = true; TesterStop(); return ret; }
double OnTester()
{
   srand((int)TimeCurrent());
// if(StartHour==20 && CountHours==22) return (-(rand() % 1000));// Uso isso se o GA começou a convergir em torno de um máximo por tempo de execução

   if(EA_STOP) return (-(rand() % 1000));                                                               // teste malsucedido, interrompido por um grande drawdown

   int o_count = 0;
   for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderType() < 2) o_count++;
   }
   if(o_count < 160) return (-(rand() % 1000));                                                         // buscando pelo menos 160 negócios em seis meses

   return(AccountInfoDouble(ACCOUNT_BALANCE));
}


void OnTick()
{
   if(IS_OPTIMIZATION)
   {
      double balance = AccountInfoDouble(ACCOUNT_BALANCE);
      MaxBalance = fmax(MaxBalance, balance);
      if(MaxBalance - balance > 200) TESTER_STOP();                                                     // interromper o teste em um drawdown de US$ 200
   }


Este é o método que estou testando na última semana, agora estou muito feliz com o GA.

 

Em meu otimizador, repito o GA até que, por 4 vezes, não haja melhora no último resultado. Isso pode levar uma dúzia ou mais de tentativas. Normalmente, obtenho bons resultados. Embora isso leve muito tempo.

Ao re-otimizar nas datas atuais, posso obter um novo máximo local aprimorado e, caso contrário, começo com o antigo e o refino para o novo mercado por meio de otimização lenta (escolho um grupo de variáveis interdependentes e otimizo iterativamente cada combinação em pares).

Além disso, introduzi micro penalidades (mutagênico adicional) no OnTester. Nesse caso, o GA executa mais passagens devido a mutações mais frequentes e, como resultado, novos máximos são encontrados com mais frequência.

// Micro penalidades para escolher um valor de parâmetro menor quando os resultados são iguais
res -= BP * 0.0001 / 200;       // Divida pelo intervalo de otimização (0...200)
 
Igor Makanu:

Vou parar de testar agora se houver uma grande queda.

E para animar um pouco o GA, estou fazendo isso:

Estou testando na última semana usando esse método e agora estou muito satisfeito com o GA.

Faço aproximadamente da mesma maneira. O controle de drawdown é para uma otimização mais rápida, e o controle do número de negociações é para direcionar melhor o GA, filtrando o lixo.

Mas isso não é suficiente.


ZY É mais barato.

TesterStatistics(STAT_TRADES)
 
Edgar Akhmadeev:

introduziu micro penalidades (mutagênico adicional) no OnTester. Nesse caso, o GA realiza mais passagens devido a mutações mais frequentes e, como resultado, novos máximos são encontrados com mais frequência.

Favor esclarecer.