ALMA Moving Average
Еще одна необычная скользящая средняя.
Arnaud Legoux Moving Average - индикатор на основе распределения Гаусса для отклонения скользящего среднего в сторону наиболее актуальных цен. Это позволяет использовать большие периоды, чтобы отфильтровывать "шум", при этом индикатор своевременно реагирует на изменение рыночной тенденции.
Вот аннотация автора к индикатору в переводе на русский:
Мы с друзьями/коллегами создали этот новый индикатор в результате попыток создать новый вид скользящей средней. Мы немного устали от неизменного за последние 10 лет набора MA.
Индикатор удаляет небольшие колебания цен и усиливает тренд, применяя расчет скользящей средней дважды, первый раз слева направо и второй раз справа налево. По окончанию этого процесса ценовое отставание, свойственное всем скользящим средним, значительно снижается.
Нулевой этап цифровой фильтрации снижает уровень шума в сигнале. Обычная фильтрация снижает уровень шума в сигнале, но добавляют задержку.
ALMA может дать отличные результаты, если вы потратите время, чтобы правильно настроить параметры.Арно Л.
Подобрать оптимальные параметры можно используя следующую формулу Amibroker:
_SECTION_BEGIN("Arnaud Legoux Moving Average");
function ALMA(priceField, windowSize, sigma, Offset)
{ m = floor(Offset * (windowSize - 1));
s = windowSize / sigma;
w = 0;
wSum = 0;
for(i = 1; i < windowSize; i++)
{ w[i] = exp(-((i-m)*(i-m))/(s*s)); // 2 should be there?
wSum += w[i];
}
for(i = 1; i < windowSize; i++)
w[i] /= wSum;
outalma = Null;
for(j = 0; j < BarCount; j++)
{ alSum = 0;
if(j < windowSize)
outalma[j] = Null;
else
{ for(i = 1; i < windowSize; i++)
alSum += priceField[j - (windowSize - 1 - i)] * w[i];
outalma[j] = alSum;
}
}
return outalma;
}
p = ParamField("Price Field");
windowSize = Param("Window Size", 9, 5, 201, 2);
sigma = Param("Sigma", 6, 1, 20);
Offset = Param("Offset", 0.85, 0.05, 1.0, 0.05);
Plot(ALMA(p, windowSize, sigma, Offset), "ALMA", ParamColor("Color",colorBlue), ParamStyle("Style"));
_SECTION_END();
_SECTION_BEGIN("Price1");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();
Более подробно: Неформальное описание скользящей ALMA
Реализация индикатора для терминала QUIK здесь.
Cм. также
- FRAMA
- Все скользящие средние в одном флаконе
- Hull Moving Average (HMA)
- Optimum Moving Average
- LWMA - Linearly Weighted Moving Average
- Displaced Moving Average
От себя - эксперименты с этой скользящей дают интересные результаты. Думаю (на досуге) попробовать построить какой-нибудь алгоритм с её использованием.
Дополнение. В версии 5.4 появилась новая функция FIR(). Применение ее даёт значительно более простую формулу для ALMA:
// AFL code by E.M.Pottasch, 2011
ws=Param("Window Size",21,5,201,2);
sigma=Param("Sigma",6,1,20,1);
Offset=Param("Offset",1,0,1.0,0.05);
bi=BarIndex();
m=floor(Offset*(ws-1));s=ws/sigma;
window=IIf(bi<ws,(Cum(1)-1)-m,0);
window=IIf(bi<ws,exp(-(window^2)/(2*s^2)),0);
rr=FIR(C,window,ws);
SetChartOptions(0, chartShowDates);
Plot(C,"\nLast",colorLightGrey,styleCandle);
Plot(rr,"\nALMA",colorBlue,1);
RSS лента комментариев этой записи