Индикатор ZigZag никак не реагирует на изменение параметра Deviation

 

Меняю этот параметр от 0 до 1000, картина не меняется. Речь о стандартном пользовательском индикаторе MT5.

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 

Речь о стандартном зигзаге?

Параметр Deviation в индикаторе ZigZag определяет минимальное количество пунктов (или тиков), на которое цена должна измениться, чтобы было зарегистрировано новое экстремумное значение (максимум или минимум). Этот параметр влияет на чувствительность индикатора к изменениям цены.

  •         Чем меньше значение параметра Deviation, тем более чувствительным будет индикатор ZigZag. Это означает, что индикатор будет чаще регистрировать изменения цены и, соответственно, рисовать больше точек поворота.
  •         Чем больше значение параметра Deviation, тем менее чувствительным будет индикатор. В этом случае он будет игнорировать мелкие колебания цены и регистрировать только более значительные изменения

Но судя по коду, параметр InpDepth также будет косвенно влиять на результаты работы

   for(shift=start; shift<rates_total && !IsStopped(); shift++)
     {
      //--- Поиск минимума за период InpDepth, начиная с текущего бара
      val=low[Lowest(low, InpDepth, shift)];
      
      //--- Если текущий минимум совпадает с последним найденным минимумом, сбросить значение
      if(val==last_low)
         val=0.0;
      else
        {
         last_low=val;
         //--- Проверка на минимальное изменение цены, заданное параметром Deviation
         if((low[shift]-val)>InpDeviation*_Point)
            val=0.0;
         else
           {
            //--- Проверка предыдущих значений на соответствие условиям Backstep
            for(back=1; back<=InpBackstep; back++)
              {
               res=LowMapBuffer[shift-back];
               //--- Если найдено значение больше текущего минимума, сбросить его
               if((res!=0) && (res>val))
                  LowMapBuffer[shift-back]=0.0;
              }
           }
        }
      
      //--- Установка значения в буфер LowMapBuffer, если найден минимум
      if(low[shift]==val)
         LowMapBuffer[shift]=val;
      else
         LowMapBuffer[shift]=0.0;

      //--- Поиск максимума за период InpDepth, начиная с текущего бара
      val=high[Highest(high, InpDepth, shift)];
      
      //--- Если текущий максимум совпадает с последним найденным максимумом, сбросить значение
      if(val==last_high)
         val=0.0;
      else
        {
         last_high=val;
         //--- Проверка на минимальное изменение цены, заданное параметром Deviation
         if((val-high[shift])>InpDeviation*_Point)
            val=0.0;
         else
           {
            //--- Проверка предыдущих значений на соответствие условиям Backstep
            for(back=1; back<=InpBackstep; back++)
              {
               res=HighMapBuffer[shift-back];
               //--- Если найдено значение меньше текущего максимума, сбросить его
               if((res!=0) && (res<val))
                  HighMapBuffer[shift-back]=0.0;
              }
           }
        }
      
      //--- Установка значения в буфер HighMapBuffer, если найден максимум
      if(high[shift]==val)
         HighMapBuffer[shift]=val;
      else
         HighMapBuffer[shift]=0.0;
     }
 
Rashid Umarov #:

Речь о стандартном зигзаге?

Но судя по коду, параметр InpDepth также будет косвенно влиять на результаты работы

Спасибо за ответ

Параметр   InpDepth как раз влияет. A вот Deviation ничего не меняет на истории, не могу понять почему. Рисую, например, 2 индикатора. Один с Deviation 5, другой с Deviation 50. И они полностью совпадают )  

 
Elena Baranova:

Меняю этот параметр от 0 до 1000, картина не меняется. Речь о стандартном пользовательском индикаторе MT5.

Это наблюдается с 2005 года. Когда был переход с 3-ей на 4 версии метатрейдера. Говорят, что когда-то этот параметр влиял на поведение индикатора. Но это типа хайли-лайки.

Пришлось тогда, примерно в 2006 году, проанализировать код зигзага. Логику кода. Анализ логики показал, что этот параметр ни на что не влияет. Чтобы не нагружать процессор лишними вычислениями, выкинул участок кода с данным параметром из зигзага.

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

================

Описание параметра  Deviation - введение пользователей в заблуждение. К сожалению.

 
Eugeni Neumoin #:

Это наблюдается с 2005 года. Когда был переход с 3-ей на 4 версии метатрейдера. Говорят, что когда-то этот параметр влиял на поведение индикатора. Но это типа хайли-лайки.

Пришлось тогда, примерно в 2006 году, проанализировать код зигзага. Логику кода. Анализ логики показал, что этот параметр ни на что не влияет. Чтобы не нагружать процессор лишними вычислениями, выкинул участок кода с данным параметром из зигзага.

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

================

Описание параметра  Deviation - введение пользователей в заблуждение. К сожалению.

Очень интересно, спасибо. А то я уже подумала, что это у меня проблемы с логикой )