Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Индикаторы

Cycle Period - индикатор для MetaTrader 5

Опубликовал:
Nikolay Kositsin
Просмотров:
4254
Рейтинг:
(18)
Опубликован:
2011.10.13 13:10
Обновлен:
2023.03.16 17:41
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Реальный автор:

Witold Wozniak

Назначение данного индикатора - это измерение периодичности процесса изменения цены финансового актива.

Индикатор хранит в своем индикаторном буфере значения текущего рыночного цикла, которые никогда не бывают постоянными. Этот индикатор создан для использования прежде всего в осцилляторах для их адаптации к меняющимся рыночным циклам и их превращения в адаптивные осцилляторы.

Индикатор написан по статье Джона Элерса "Using The Fisher Transform", которая  была опубликована в ноябре 2002 года в журнале "Technical Analysis Of Stock & Commodities".

Индикатор Cycle Period

Для использования этого индикатора в коде другого индикатора (например, осциллятора RVI) следует на глобальном уровне объявить переменную хендла индикатора CyclePeriod:

//---- объявление целочисленных переменных для хендлов индикаторов
int CP_Handle;

После этого в блоке инициализации индикатора RVI следует получить хендл индикатора CyclePeriod:

//---- получение хендла индикатора CyclePeriod
   CP_Handle=iCustom(NULL,0,"CyclePeriod",Alpha);
   if(CP_Handle==INVALID_HANDLE)
     {
      Print(" Не удалось получить хендл индикатора CyclePeriod");
      return(1);
     }

Теперь появилась новая переменная Alpha, являющаяся входным параметром использованного индикатора и представляющая собой коэффициент усреднения периода. Эту переменную следует сделать входной переменной разрабатываемого индикатора.

//+----------------------------------------------+
//| Входные параметры индикатора                 |
//+----------------------------------------------+
input double Alpha=0.07; // Коэффициент усреднения индикатора 

А вот прежнюю входную переменную Length из числа входных параметров следует убрать, сделав ее локальной переменной внутри функции OnCalculate().

Для усреднения в индикаторе использованы массивы, размер которых фиксирован значением параметра Length

//---- Распределение памяти под массивы переменных  
   ArrayResize(Count,Length);
   ArrayResize(Value1,Length);
   ArrayResize(Value2,Length);

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

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

//---- Распределение памяти под массивы переменных  
   ArrayResize(Count,MAXPERIOD);
   ArrayResize(Value1,MAXPERIOD);
   ArrayResize(Value2,MAXPERIOD);

И затем уже в блоке OnCalculate() следует доставать значения периода для текущего бара из буфера пользовательского индикатора CyclePeriod и использовать их вместо значения бывшего входного параметра Length.

//---- основной цикл расчета индикатора
   for(bar=first; bar<rates_total && !IsStopped(); bar++)
     {
      //---- копируем вновь появившиеся данные в массив
      if(CopyBuffer(CP_Handle,0,rates_total-1-bar,4,period)<=0) return(RESET);

      Length=int(MathFloor((4.0*period[0]+3.0*period[1]+2.0*period[2]+period[3])/20.0));
      if(bar<Length) Length=bar; // урезание усреднения до действительного числа баров

В данном случае из буфера индикатора CyclePeriod достаются четыре последних значения и производится их линейно-взвешенное усреднение, после чего полученное значение используется в качестве периода усреднения Length. И напоследок следует немного изменить строку в конце кода индикатора:

      if(bar<rates_total-1) Recount_ArrayZeroPos(Count,MAXPERIOD);

В итоге у нас получается адаптивный осциллятор Adaptive RVI:

Рис.2 Индикаторы RVI и Adaptive RVI

Daily Range Projections Full Daily Range Projections Full

Прогнозирование диапазонов изменения следующей дневной свечи для всех баров текущего графика.

Stochastic Cyber Cycle Stochastic Cyber Cycle

Адаптивный стохастический осциллятор.

Adaptive CG Oscillator Adaptive CG Oscillator

Adaptive CG Oscillator - это CG Oscillator осциллятор, адаптирующийся к постоянно меняющимся рыночным циклам реального финансового актива.

XXDPO XXDPO

Осциллятор бестрендовой цены (Detrended Price Oscillator, DPO) показывает состояние перекупленности или перепроданности рынка, а также может быть использован для получения сигналов на покупку и продажу.