Индикаторы: Stochastic with Noise Reduction - "Бесшумный" Стохастик.

 

Stochastic with Noise Reduction - "Бесшумный" Стохастик.:

Радикально сокращает кол-во ложных сигналов путем регулирования чувствительности.

Author: Петр

 

Очень интересная тема. Спасибо, щас попробую всунуть "шумопонижение" в советник.

 

Ага, вон оно что. Ну значит бум тут качать.

 

Спасибо, выглядит интересно. Надоть поколупать. :)

 

Небрежность в коде у себя нашел в ф-ии Stoch - лишнее вычисление. На скорость особо не влияет, но все же:

double Stoch(int Kperiod, int Slowing, int PriceFild, double sens, int i) {  
   // экстремумы цены
   double max,min,c;
   for(int j=i; j<i+Slowing; j++) {
      if(PriceFild==1) { // по Close
         max+=Close[ArrayMaximum(Close,Kperiod,j)];
         min+=Close[ArrayMinimum(Close,Kperiod,j)];
        }
      else { // по High/Low
         max+=High[ArrayMaximum(High,Kperiod,j)];
         min+=Low[ArrayMinimum(Low,Kperiod,j)];
        }
      c+=Close[j];
     }
   double delta=max-min;
   if(delta<sens) {
      sens/=2;
      max+=sens; min-=sens;
      delta=max-min; // *** перемещена в тело условного оператора
     }
   if(delta==0) double s0=1;
   else s0=(c-min)/delta;
   return(100*s0);
  }

Если желаете, можете заменить в индикаторе и в заголовочном файле. Но, подчеркиваю, что разницу вы не заметите - просто так правильней с т.з. кодирования.)))

 

+10

 

+10 . Хороший получился NR, спасибо.

 

Не ожидал такого интереса - прав был Тютчев ("Нам не дано предугадать, как наше слово отзовется..."))). ок. Но я о другом - есть еще один вариант шумодава, который не так драматично меняет форму стохастика и в некоторых случаях является более приемлимым, - испытывал на построении уровней поддержки/сопротивления (горизонтальных каналов) с помощью стохастика (Channel@Stoch). По сути, колебания меньше порога в этом варианте масштабируются пропорционально разнице между порогом и размахом. В уже опубликованном варианте масштабирование происходит более скачкообразно.

Итак, вот еще один вариант ф-ии Стохастика с шумоподавлением (все поля те же):

double Stoch1(int Kperiod, int Slowing, int PriceFild, double sens, int i) {  
   // экстремумы цены
   double max,min,c;
   for(int j=i; j<i+Slowing; j++) {
      if(PriceFild==1) { // по Close
         max+=Close[ArrayMaximum(Close,Kperiod,j)];
         min+=Close[ArrayMinimum(Close,Kperiod,j)];
        }
      else { // по High/Low
         max+=High[ArrayMaximum(High,Kperiod,j)];
         min+=Low[ArrayMinimum(Low,Kperiod,j)];
        }
      c+=Close[j];
     }
   // шумоподавление
   double delta=max-min; // размах
   double diff=sens-delta; // разница между порогом чувств. и размахом
   if(diff>0) { // если разница >0 (размах меньше порога), то
      delta=sens; // размах = порогу,
      min-=diff/2; // новое значение минимума
     }
   // вычисление стохастика 
   if(delta==0) double s0=1;
   else s0=(c-min)/delta;
   return(100*s0);
  }

Еще один момент. Можно в качестве порога использовать значение ATR с периодом сглаживания ~ 10*Kperiod и умноженным на 5...10. Здесь можно получить следующие свойства:

- независимость от абсолютных величин - нет порога, задаваемого в п.п.;

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

Можно, конечно, оставить и минимальное значение порога, но на практике само значение ATR не будет опускаться ниже разумной величины. Впрочем, это просто - MathMax(sens, 8*ATR).

Сам индикатор приводить не буду - нет возможности в каментах прикрепить файл, а доработка слишком очевидна, чтобы делать новую запись Code Base. Если возникнут сложности - можно в ветку вынести.

 

Спасибо.

 
  • Подскажите, как запустить данный индикатор.
 
mihonich:
  • Подскажите, как запустить данный индикатор.

Шутите? Как обычно.

Впрочем, извольте: поместите файл _StochNR.mq4 в папку experts\indicators терминала; откройте файл в MetaEditor'е; откомпилируйте (F5) и все - теперь он будет доступен из пользовательских индикаторов в терминале.

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