Очень интересная тема. Спасибо, щас попробую всунуть "шумопонижение" в советник.
Ага, вон оно что. Ну значит бум тут качать.
Спасибо, выглядит интересно. Надоть поколупать. :)
Небрежность в коде у себя нашел в ф-ии 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. Если возникнут сложности - можно в ветку вынести.
Спасибо.
- Подскажите, как запустить данный индикатор.
- Подскажите, как запустить данный индикатор.
Шутите? Как обычно.
Впрочем, извольте: поместите файл _StochNR.mq4 в папку experts\indicators терминала; откройте файл в MetaEditor'е; откомпилируйте (F5) и все - теперь он будет доступен из пользовательских индикаторов в терминале.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Stochastic with Noise Reduction - "Бесшумный" Стохастик.:
Author: Петр