Не для разработчиков МТ! Чем заменить INIT_PARAMETERS_INCORRECT ? - страница 10

 
Aleksey Vyazmikin:

Некорректные параметры отключаются, как правило, по 3 причинам:

1. Исследование области не представляет интереса (к примеру исключение ряда тайм фреймов, как самый понятный вариант);

//--- пропустить бесполезные проходы оптимизации
   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);
   }
 
Сергей Таболин:

Совершенно верно.

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

Ну а как организовать оптимизацию МА из примера не включая "некорректные" параметры?

ок, согласен, посмотрел невнимательно. для оптимизации вынести другой параметр с вырезанным невалидным промежутком

 
TheXpert:

ок, согласен, посмотрел невнимательно. для оптимизации вынести другой параметр с вырезанным невалидным промежутком

Пример можно?

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

Пример можно?

input int period_MA_warp = 15;

//...

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

Согласен. А как быть в случае с таймфреймами?

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

Согласен. А как быть в случае с таймфреймами?

так же - преобразование int внутри непрерывного интервала в таймфрейм. например завести массив со всеми значениями ТФ и оптимизировать по индексу массива

 
TheXpert:

так же - преобразование int внутри непрерывного интервала в таймфрейм. например завести массив со всеми значениями ТФ и оптимизировать по индексу массива

Ну а вот это уже, на мой взгляд, смахивает на костыль... Возможно, я ошибаюсь, но это практически то же, что мне пришлось сделать со своим стартовым примером. Разве что в данном случае не нужно предварительно весь массив выкладывать в файл...

 

Пришла мысль отсеивать при ген.оптимизации "недопустимые" параметры в OnTester():

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

Получается никак не вмешиваясь в генетику убрать из вида результаты INIT_PARAMETERS_INCORRECT.

Тут же возник другой вопрос: а можно ли в этом случае выдать "глубокий минус" по прибыли?

 

Как делал я: создается отдельный параметр, в зависимости от его значения подставляются другие значения.

Простой пример (2 недели назад делал):

Есть параметры таймфреймы: TF_UP (Старший) и TF_DOWN (младший), при этом старший всегда должен быть больше младшего, в обратно случае выходит input_incorrect. В тестере очень много нулевых результатов и генетика "отрабатывает впустую" (хоть и быстро). И в итоге я убрал эти 2 параметра и создал новый параметр, который имеет тип описанный ниже, и оптимизирую только его, а уже в функции OnInit идет подстановка в 2 других параметра, в зависимости от этого параметра.

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
};
Причина обращения: