Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Опубликовал:
- Nikolay Kositsin
- Просмотров:
- 4463
- Рейтинг:
- Опубликован:
- 2011.10.13 13:10
- Обновлен:
- 2023.03.16 17:41
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Реальный автор:
Witold Wozniak
Назначение данного индикатора - это измерение периодичности процесса изменения цены финансового актива.
Индикатор хранит в своем индикаторном буфере значения текущего рыночного цикла, которые никогда не бывают постоянными. Этот индикатор создан для использования прежде всего в осцилляторах для их адаптации к меняющимся рыночным циклам и их превращения в адаптивные осцилляторы.
Индикатор написан по статье Джона Элерса "Using The Fisher Transform", которая была опубликована в ноябре 2002 года в журнале "Technical Analysis Of Stock & Commodities".
Для использования этого индикатора в коде другого индикатора (например, осциллятора 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:

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

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

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

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