Não para desenvolvedores de MT! O que substituir INIT_PARAMETERS_INCORRECT por ? - página 10

 
Aleksey Vyazmikin:

Os parâmetros incorretos são geralmente desabilitados por 3 razões:

1. a área de estudo não é de interesse (por exemplo, excluindo uma série de prazos, como a opção mais compreensível);

//--- пропустить бесполезные проходы оптимизации
   if(my_timeframe != PERIOD_M15   &&
      my_timeframe != PERIOD_M30   &&
      my_timeframe != PERIOD_H1    &&
      my_timeframe != PERIOD_H3    &&
      my_timeframe != PERIOD_H6      )
   {
      Print("ОШИБКА - Период не запланирован");
      return(INIT_PARAMETERS_INCORRECT);
   }
 
Сергей Таболин:

Absolutamente certo.

 
Сергей Таболин:

Bem, como você organiza a otimização do MA a partir do exemplo sem incluir os parâmetros "inválidos"?

OK, concordo, não olhei com cuidado. para otimizar outro parâmetro com uma lacuna inválida cortada

 
TheXpert:

OK, concordo, não olhei com cuidado. para otimizar, trazer à tona outro parâmetro com a lacuna inválida cortada

Você pode me dar um exemplo?

 
Сергей Таболин:

Posso lhe dar um exemplo?

input int period_MA_warp = 15;

//...

period_MA = (period_MA_warp <= 31) ? period_MA_warp : period_MA_warp + 50;
 
TheXpert:

Eu concordo. E quanto ao caso dos prazos?

 
Сергей Таболин:

Eu concordo. E o que fazer em caso de prazos?

O mesmo - conversão de int dentro de um intervalo contínuo para um período de tempo. por exemplo, criar uma matriz com todos os valores TF e otimizar por índice de matriz

 
TheXpert:

Por exemplo, para criar uma matriz com todos os valores TF e otimizar por índice de matriz

Bem, isto me parece uma muleta... Talvez eu esteja errado, mas é quase a mesma coisa que eu tive que fazer com meu exemplo inicial. Exceto que, neste caso, não é necessário despejar todo o conjunto em um arquivo de antemão.

 

Uma idéia surgiu para peneirar os parâmetros "inválidos" durante a otimização genética no OnTester():

double OnTester()
{
   if(MQLInfoInteger(MQL_OPTIMIZATION) && paramIncorrect())  return(-99999999.99);
}

Acontece que sem interferir na genética, os resultados do INIT_PARAMETERS_INCORRECT podem não ser vistos.

Outra questão se coloca aqui: podemos obter um "deep minus" sobre o lucro neste caso?

 

A maneira como o fiz: um parâmetro separado é criado e outros valores são substituídos dependendo de seu valor.

Um exemplo simples (2 semanas atrás):

Há parâmetros de tempo: TF_UP (Senior) e TF_DOWN (Junior), e o Senior deve ser sempre maior do que o Junior, em caso inverso a entrada_incorreta sai. No testador, há muitos resultados nulos e a genética "funciona para nada" (embora seja rápida). Como resultado, removi estes 2 parâmetros e criei um novo parâmetro que tem o tipo descrito abaixo, e otimizo apenas ele, e já na função OnInit a substituição em 2 outros parâmetros, dependendo deste parâmetro.

enum TF_only_opt
{
   _H4_H1 = 0,
   _H4_M30 = 1,
   _H4_M15 = 2,
   _H1_M30 = 3,
   _H1_M15 = 4,
   _H1_M5 = 5,
   _M30_M15 = 6,
   _M30_M5 = 7,
   _M30_M1 = 8,
   _M15_M5 = 9,
   _M15_M1 = 10,
   _M5_M1 = 11
};