Формула стохастика для произвольных источников данных

Опубликовано в AmiBroker

Сегодня понадобилось рассчитать стохастик не для котировок инструмента (Open,High,Low,Close), а для расчетных данных.

Оказалось, что вcтроенная в Амиброкер функция StochK() умеет рассчитывать значение стохастика только для тикера, являющегося основным в окне. Меня это совсем не порадовало, пришлось написать свою. Не бозон Хиггса/бином Ньютона, но на всякий случай сохраню, вдруг когда ещё пригодится. 


Создал этот индикатор George Lane. В тот момент он был президентом корпорации Investment Educators. Stochastic Oscillator представлен двумя линиями. Главная линия - %K. Вторая линия %D - это скользящее среднее линии %K.

Расчет 

Для расчета стохастического осциллятора используются три переменные:

 

  • Период %K (Pk). Это число единичных периодов, используемых для расчета %K. По умолчанию равен 5;

  • Период замедления %K (Sk). Эта величина определяет степень внутренней сглаженности линии %K. 
    Значение 1 дает быстрый стохастический осциллятор, а значение 3 - медленный. По умолчанию равен 3;

  • Период %D (Pd). Это число единичных периодов, используемых для расчета скользящего среднего линии %K. По умолчанию равен 3.

Формула для расчета %K:

%K = 100*SUM (CLOSE - MIN (LOW, Pk), Sk) / SUM (MAX (HIGH, Pk) - MIN (LOW, Pk)), Sk)

Где:

  • CLOSE - цена закрытия;
  • MIN (LOW, Pk) - наименьший минимум за период Pk;
  • MAX (HIGH, Pk) - наибольший максимум за период Pk;
  • SUM (CLOSE - MIN (LOW, Pk), Sk) - сумма слагаемых CLOSE - MIN (LOW, Pk) за период Sk;
  • SUM (MAX (HIGH, Pk) - MIN (LOW, Pk)), Sk) - сумма слагаемых HIGH (Pk)) - MIN (LOW, Pk) за период Sk.


Сигнальная линия %D рассчитывается по формуле:

%D = SMA (%K, Pd)

Где:
Pd - период сглаживания %K;
SMA - простая скользящая средняя.

Для начала расчет %K. Используются 3 расчетных массива (High_Array,Low_Array,Close_Array) и два параметра - период расчета и коэфициент сглаживания.

%D - простая скользящая средняя от %K, просто накладываем MA  с требуемым периодом (%D average) на массив, полученный предыдущей функцией.


High_Array = ParamField("High array",1);
Low_Array = ParamField("Low array",2);
Close_Array = ParamField("Close array",3);

K_Period = Param("%K period",15,3,20,1);
K_Smooth = Param("%K smooth",3, 1, 200, 1 );
D_Period = Param("%D",3, 1, 200, 1 );

function K_Stochastic(High_Array,Low_Array,Close_Array,Period,Smooth)
{ local K_Min;

   K_Min = LLV(Low_Array,Period);
   return Sum(Close_Array - K_Min,Smooth) / Sum(HHV(High_Array,Period) - K_Min,Smooth) * 100;
}

k= K_Stochastic(High_Array,Low_Array,Close_Array,K_Period,K_Smooth);

Plot(K,"",ParamColor( "%K Color", colorCycle ), ParamStyle("%K Style") );
Plot(MA(k,D_Period),"",ParamColor( "%d Color", colorCycle ), ParamStyle("%D Style") );

Сравнил со встроенной. Если на вход подать стандартные OHLC, результаты совпадают.

Если требуется вычислить значение стохастика не по ценам OHLC, а по какому-нибудь индикатору, представляемому 1 массивом, то в качестве всех трёх первых параметров нужно указать этот массив.

Основные плюсы и минусы индикатора 

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

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

P.S. Другой способ вычисления стохастика - подмена OHLC (с последующим восстановлением) на нужный массив и расчет стохастика по нему.