Адаптивная скользящая средняя, которая упоминалась в интервью Перри Кауфмана в журнале Stocks&Commodities 1998, является отличной альтернативой общеизвестных скользящих средних.
Для расчета Адаптивной скользящей средней сначала програмируются функции называемые “АМА” и “AMAF”. Функции должны быть созданы до начала програмирования индикатора.
Type: Function, Name: AMA
Inputs: Period(Numeric);
Vars: Noise(0), Signal(0), Diff(0), efRatio(0), Smooth(1), Fastest(.6667), Slowest(.0645), AdaptMA(0);
Diff = AbsValue(Close – Close[1]);
IF CurrentBar <= Period Then AdaptMA = Close;
IF CurrentBar > Period Then Begin
Signal = AbsValue(Close – Close[Period]);
Noise = Summation(Diff, Period);
efRatio = Signal / Noise;
Smooth = Power(efRatio * (Fastest – Slowest) + Slowest, 2);
AdaptMA = AdaptMA[1] + Smooth * (Close – AdaptMA[1]);
End;
AMA = AdaptMA;
Type: Function, Name: AMAF
Inputs: Period(Numeric), Pcnt(Numeric);
Vars: Noise(0), Signal(0), Diff(0), efRatio(0), Smooth(1), Fastest(.6667), Slowest(.0645), AdaptMA(0), AMAFltr(0);
Diff = AbsValue(Close – Close[1]);
IF CurrentBar <= Period Then AdaptMA = Close;
IF CurrentBar > Period Then Begin
Signal = AbsValue(Close – Close[Period]);
Noise = Summation(Diff, Period);
efRatio = Signal / Noise;
Smooth = Power(efRatio * (Fastest – Slowest) + Slowest, 2);
AdaptMA = AdaptMA[1] + Smooth * (Close – AdaptMA[1]);
AMAFltr = StdDev(AdaptMA-AdaptMA[1], Period) * Pcnt;
End;
AMAF = AMAFltr;
После того как вы успешно создали обе функции, вы на их основе можете создать два индикатора. Первый индикатор отображает в виде линии Адаптивную скользящую среднию. Фишка в том, что линия АСС может быть сглажена при помощью линейной регрессии.
Type: Indicator, Name: Adaptive Moving Average
Inputs: Period(10), Smooth(“Y”);
IF UpperStr(Smooth) = “Y” Then
Plot1(LinearRegValue(AMA(Period), Period, 0), “Smooth AMA”)
Else
Plot2(AMA(Period), “Adaptive MA”);
Второй индикатор “АМА Fltr”, использует концепцию фильтрации. На основе отфильтрованных параметров адаптивной скользящей средней (AMAF) мы имеим индикатор, который в виде вертикальных синих или красных линий показывает расположение цены относительно АМА.
Plot1 Покупка Синия линия
Plot2 Продажа Красная линия
Plot3 AMAFILTER
Type: Indicator, Name: Adaptive Moving Average Fltr
Inputs: Period(10), Pcnt(.15);
Vars: AMAVal(0), AMAFVal(0), AMALs(0), AMAHs(0);
AMAVal = AMA(Period);
AMAFVAl = AMAF(Period, Pcnt);
IF CurrentBar = 1 Then Begin
AMALs = AMAVal;
AMAHs = AMAVal;
End Else Begin
IF AMAVal < AMAVal[1] Then
AMALs = AMAVal;
IF AMAVal > AMAVal[1] Then
AMAHs = AMAVal;
IF AMAVal – AMALs > AMAFVal Then Begin
Plot1(AMAFVal, “Buy”);
IF Plot1[1] = 0 Then
Alert = True;
End Else
IF AMAHs – AMAVal > AMAFVal Then Begin
Plot2(AMAFVal, “Sell”);
IF Plot2[1] = 0 Then
Alert = True;
End;
Plot3(AMAFVal, “AMAFilter”);
End;