Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1434

 

Переформулирую вопрос немного иначе. Можно ли оптимизатору дать команду в блоке OnInit при определенных условиях пропустить вариант тестирования/оптимизации.

input group "Входные настройки Стохастик"
input bool Stoch = false; // Стохастик включен/выключен
input int in_StochK = 14; // период основной линии K
input int in_StochD = 3; // период первичного сглаживания D
input int in_StochSlow = 3; // период окончательного сглаживания

int OnInit() {
if ((Stoch = false) && ((StochK != 0) || (StochK != 0) || (StochSlow != 0)))
   {
   // Некая команда, которая говорит, что такой вариант даже не стоит пробовать оптимизировать  
   }
}

Пробовал делать так, но это приводит к некорректным вариантам оптимизации.

if ((Stoch = false) && ((StochK != 0) || (StochK != 0) || (StochSlow != 0))) 
   {
   
Print("Такой вариант тестирования не имеет смысла");
   return(INIT_FAILED);
   }

Цель - чтобы при оптимизации я мог включить перебор вариантов 4-х параметров стохастика  (Stoch, in_StochK, int in_StochD, int in_StochSlow).

  • При включенном стохастике (Stoch = true) оптимизатор перебирает переменные in_StochK, in_StochD, in_StochSlow. В этой части все работает корректно.
  • При выключенном стохастике (Stoch = false) оптимизатор все равно перебирает переменные in_StochK, in_StochD, in_StochSlow. А мне нужно сделать какую-то заглушку в коде, чтобы он их не перебирал, если Stoch = false.
 

Здравствуйте, @taramortom.

Скорее всего, вам поможет просто заменить 

return(INIT_FAILED)

на

return(INIT_PARAMETERS_INCORRECT)
 
Yuriy Bykov #:

Здравствуйте, @taramortom.

Скорее всего вам поможет просто заменить 

на

Пробовал уже. Не помогает. Оптимизатор при такой команде все равно некорректно работает.
 

Возможно, причина некорректной работы оптимизатора в этой неточности в коде:

if ((Stoch = false) && ((StochK != 0) || (StochK != 0) || (StochSlow != 0)))
 
Yuriy Bykov #:

Возможно, причина некорректной работы оптимизатора в этой неточности в коде:


Причина не в этом. Код сделал для примера логики работы. Полная версия кода слишком большая - много разных осцилляторов. При оптимизации хочу добиться - чтобы оптимизатор пробовал разные комбинации (включен один осциллятор, включено два осциллятора, три и т.п.).

- При использовании данной заглушки оптимизатор быстро завершает работу с малым число проходок, хотя их должно быть огромное количество.

- Без использования такой ограничения оптимизатор работает лучше, но выдает множество пустых вариантов (на пример выше - при выключенном Стохастике все равно перебирает его параметры). Бог с ними с пустыми вариантами, но это и лишнее время на оптимизацию, и пустые проходки вместо полезных.

 
Вы используете генетическую или полную оптимизацию?
Я тоже использовал подобный подход для исключения заведомо ненужных комбинаций параметров и не заметил некорректной работы оптимизатора. Наоборот, оптимизатор работал именно так, как ожидалось.
Можно попробовать добавить сохранение пропускаемых комбинаций параметров в БД или общий файл, чтобы проверить, сколько и какие действительно пропускаются и разобраться в причинах.
 

Здравствуйте! пишу индикатор на основе МА - ExtJawsHandle=iMA(NULL,0,Period,0,Method,AppliedPrice);

как мне програмно добраться до уровней МА, как показано на рисунке ниже.

Конструкция типа

   IndicatorSetInteger(INDICATOR_LEVELS,1);

   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,10);

не работает.


 
Tango_X #:

Здравствуйте! пишу индикатор на основе МА - ExtJawsHandle=iMA(NULL,0,Period,0,Method,AppliedPrice);

как мне програмно добраться до уровней МА, как показано на рисунке ниже.

Конструкция типа

   IndicatorSetInteger(INDICATOR_LEVELS,1);

   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,10);

не работает.


вариантов нет?)

 
Tango_X #:

вариантов нет?)

А что мешает посмотреть код индикатора Alligator.mq5

//--- line shifts when drawing
   PlotIndexSetInteger(0,PLOT_SHIFT,InpJawsShift);
   PlotIndexSetInteger(1,PLOT_SHIFT,InpTeethShift);
   PlotIndexSetInteger(2,PLOT_SHIFT,InpLipsShift);
 
Alexey Viktorov #:

А что мешает посмотреть код индикатора Alligator.mq5

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

или я что-то не так понимаю? 

Причина обращения: