- Октябрь 18, 2013
- Опубликовано: Команда Форекс Вики
- Категория: Форекс Инд
Без комментариев
1608
1479
Имя: |
|
||
Автор: | Писатель (2008.02.11 10:02) | ||
Скачано: | 1206 | ||
Скачать: |
|
||
Автор: Альберт, (идея и код в MQL2 - подвал)
HVR-индикатор. |
|||
1 комментарий Чтобы опубликовать новый комментарий, пожалуйста авторизоваться или регистр
Следующий код отображает оба 6 & 10 HVR с 100 (все периоды как параметры). Также для большего количества периодов на графике. //+------------------------------------------------------------------+ //| HVR.mq4 | //| Авторское право © 2005, Альберт,(идея и код в MQL2 - подвал) | //| Рефакторинг © 2010, Брюманц (добавлять 2 Линии HVR) | //| | //+------------------------------------------------------------------+ #свойство Indicator_separate_window //---- //#свойство индикатор_минимум 0 //#свойство индикатор_максимум 3 #свойство Indicator_buffers 3 //---- #property indicator_color1 Blue #property indicator_color2 Purple extern int PeriodLong=100; внешний интервал PeriodShort = 10; внешний интервал PeriodVeryShort = 6; double xVeryShort[], xShort[], длинная[]; #определить kVolfactor 7.211102550927978586238442534941 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //---- buffers double HVRSBuffer[]; двойной HVRVSBuffer[]; //+------------------------------------------------------------------+ //| Функция инициализации пользовательского индикатора | //+------------------------------------------------------------------+ int инициализация() { МассивИзменить размер(xVeryShort, ПериодОченьКороткий); МассивИзменить размер(xShort, ПериодКороткий); МассивИзменить размер(длинная, ПериодДлинный); Сетлевелвалуе(0, 0.0); Сетлевелвалуе(1, 0.5); Сетлевелвалуе(2, 1.0); Сетлевелвалуе(3, 2.0); //---- 2 дополнительные буферы используются для подсчета. ИндикаторБуферы(2); Сетиндексбуффер(0,HVRSBuffer); Сетиндексбуффер(1,HVRVSBuffer); //---- indicator line SetIndexStyle(0,DRAW_LINE); Сетиндексстиле(1,DRAW_LINE); //---- name for DataWindow and indicator subwindow label IndicatorShortName("HVR( " + ПериодОченьКороткий +" & " + ПериодКороткий + " /" + ПериодДлинный + ")"); сетиндекслабел(0,"HVR(" + ПериодКороткий + "/" + ПериодДлинный + ")"); сетиндекслабел(1,"HVR(" + ПериодОченьКороткий + "/" + ПериодДлинный + ")"); //---- //---- возвращаться(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ начало() { двойной hvVeryShort, hvShort, hvLong, среднее значениеVeryShort, среднееШорт, среднее значение; int counted_bars = Индикатор подсчитывается(); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; int ixLimit = Bars-counted_bars-1; для(интервал ix=ixLimit; икс>=0; ix--) { если(ix+PeriodLong >= Бары) продолжать; среднее значение очень короткого = 0; средний шорт = 0; среднее значение=0; для(интервал я = 0; я<ПериодДлинный; я++) { двойной myLog=MathLog(Закрывать[икс+я]/Закрывать[икс+я+1]); длинная[я]=мой журнал; среднее значение+=мой журнал; если(я<ПериодКороткий) { xShort[я]=мой журнал; среднее значение+=мой журнал; } если(я<ПериодОченьКороткий) { xVeryShort[я]=мой журнал; meanVeryShort+=мой журнал; } } среднееВериШорт/=ПериодВериШорт; среднее/=PeriodShort; среднее значение/=периоддлинный; hvVeryShort=0; для(я=0; я<ПериодОченьКороткий; я++) hvVeryShort+=(xVeryShort[я] - среднее значениеVeryShort)*(xVeryShort[я] - среднее значениеVeryShort); hvVeryShort=MathSqrt(hvVeryShort/(PeriodVeryShort-1)) * kVolfactor; hvShort=0; для(я=0; я<ПериодКороткий; я++) hvShort+=(xShort[я] - среднееШорт)*(xShort[я] - среднееШорт); hvShort=MathSqrt(hvShort/(ПериодШорт-1)) * kVolfactor; hvLong=0; для(я=0; я<ПериодДлинный; я++) hvLong+=(длинная[я] - среднее значение)*(длинная[я] - среднее значение); hvLong=MathSqrt(hvLong/(PeriodLong-1)) * kVolfactor; HVRVSBuffer[икс]= hvVeryShort/hvLong; HVRSBuffer[икс]= hvShort/hvLong; } } //+------------------------------------------------------------------+ |