Учимся писать эксперты для MetaTrader. Урок №19
Обучение MQL II. Урок 19
Здравствуйте дорогие читатели! Уже не один читатель просил меня переписать с Омеги или Метастока АМА (адаптивную скользящую среднюю) Кауфмана. В сегодняшнем выпуске мы напишем именно это индикатор.
Алгоритм
Подробное описание индикатора и алгоритма его работы изложено Константином Копыркиным, в статье "Динамические скользящие средние. Часть 2", журнала "Современный трейдинг". Статью в формате PDF (475 kB), сможете скачать тут: http://fxtest.ru/AMA.pdf
АМА Кауфмана это экспоненциально сглаженная скользящая средняя, только коэффициент усреднения у нее не постоянный, а меняется в зависимости от ситуации на рынке. При флэте коэффициент усреднения увеличивается, чтобы АМА замедлялась и не давала ложных сигналов, в тренде уменьшается и АМА быстро, без запаздывания (относительно) реагирует на изменение цены.
Для тех, кто не скачал статью, в двух словах опишу алгоритм. Индикатор имеет период, он определятся количеством баров участвующих в расчета индикатора. За этот период определяется, так называемая, "эффективность движения". "Эффективность движения" рассчитывается как отношение перемещения к траектории цены за период. Максимальное значение этого коэффициента 1, минимальное 0. Например, период 10 и все прошлые 10 свечей "бычьи", в этом случае "эффективность движения" будет равно 1. Траекторию считаем по ценам закрытия. В индикаторе устанавливаем два периода усреднения (ЕМА), большой и маленький. В этих пределах будет меняться период АМА в зависимости от "эффективности движения". Т.е. минимальный период для значения 1 и максимальный для 0.
Во внешние переменные вынесем период АМА, граничные периоды (большой и маленький ЕМА) и количество баров на котором будет отображаться индикатор.
Заключение
О полезности этого индикатора разные люди говорят разное, но его идея настолько просто и логична, что это технический инструмент вызывает у меня большую симпатию. Я уверен, что найдутся трейдеры, которым этот индикатор придется по душе.
/*[[
Name := AMA
Author := forextimes
Link := fxtest.ru
Notes := AMA Kaufman
Separate Window := No
First Color := Blue
First Draw Type := Line
First Symbol := 217
Use Second Data := No
Second Color := Red
Second Draw Type := Line
Second Symbol := 218
]]*/
inputs:n(10),fastMA(2),slowMA(30),Nbars(500);
Variable : shift(0),k(0),Noise(0),signal(0),i(0),AMA(0),ssc(0),er(0),AMA1(0);
SetLoopCount(0);
// loop from first bar to current bar (with shift=0)
AMA1=c[Nbars]; //это исскуственное первое значение индикатора, приравниваем к цене закрытия
For shift =Nbars Downto 0 Begin //начало рассчета значачений индикатора
signal=0; //перемещение
Noise=0; // траектория
signal=abs(c[shift]-c[shift+n-1]); //вычисляем перемещение
for i=shift To shift+n-1 Begin
Noise=Noise+abs(c[i]-c[i+1]); //вычисляем траекторию
end;
er=signal/Noise; //<эффективность движения>
ssc=er*(2/(1+fastMA)-2/(1+slowMA))+(2/(1+slowMA));// изменяющая сглаживающая константа
AMA=(c[shift]*ssc*ssc)+GetIndexValue(shift+1)*(1-ssc*ssc); //значение АМА
if shift=Nbars then AMA=(c[shift]*ssc*ssc)+AMA1*(1-ssc*ssc); //знгачение АМА для первого бара
SetIndexValue(shift,AMA); //заносим значение АМА в массив индикатора
End;
Компания «Fxtest»
Халхальян Артур
техническая поддержка трейдеров
artur@fxtest.ru