Предназначена для фильтрации индикаторов, не учитывающих направление движения цен, например: стандартная девиация (StDev), средний истинный диапазон (ATR), среднее направленное движение (ADX ) и пр. Подобный способ фильтрации может быть полезен при использовании индикаторов в адаптивных системах. Также может быть применен и в симметричных осцилляторах со сменой логики фронт/затухание при прохождении через ось симметрии. Например, можно заменить ей сигнальную Стохастика (%D) - при значениях Стохастика больше 50% сглаживать его по затуханию, ниже - по фронту.
Лучшей иллюстрацией раздельного сглаживания может служить электрическая схема ФНЧ:
Здесь скорость зарядки конденсатора входным сигналом зависит от направления изменения сигнала. Для фронта сигнала зарядка C1 происходит через цепочку VD1 R1, для затухания – разрядка через VD2 R2. Естественно, диоды здесь идеальные, т.е. есть без барьера, и гистерезиса переключения с фронта на затухание нет. (Кстати, интересная мысль – может, ввести гистерезис? Правда, пока не очень понятно, как его использовать.)))
EMA оформлена в виде функции, а не как отдельный индикатор, так что почитатели «раскрашенных заборов» могут не возбуждаться. Хотя, спецом для любителей готовенького есть примеры реализации, о которых чуть позже, а сейчас сама ф-я:
/* EMA с различными параметрами сглаживания для фронта и затухания double C входной сигнал double MA1 значения EMA на предыдущем баре double period период сглаживания; если >1, то пересчитывается в коэфф.EMA int FBA 1 - сглаживание фронта, -1 - сглаживание затухания, 0 - обычная MA - гладим все! int i сдвиг */ double EMA_FBA(double C, double MA1, double period, int FBA, int i) { if(period==1) return(C); // коэфф. EMA if(period>1) period=2.0/(1+period); // EMA double ma=period*C+(1-period)*MA1; // разделение фронта и затухания switch(FBA) { case 0: // обычная MA if(FBA==0) return(ma); case 1: // сглаживание фронта if(C>MA1) return(ma); else return(C); case -1: // сглаживание затухания if(C<MA1) return(ma); else return(C); } }
Как видите, ничего сложно.
Примеры использования EMA _ FBA в индикаторах.
Стандартная девиация с раздельным сглаживанием по фронту и затуханию (_StDevFBA.mq4).
К стандартным полям добавлены:
FrontPeriod – период EMA для сглаживания фронта ст.девиации;
BackPeriod – период EMA для сглаживания затухания ст.девиации;
Если равны 1 – то отличий от обычного встроенного индикатора нет.
Поскольку для сглаживания используется алгоритм EMA, то период может быть с дробной частью. Также можно задать сразу коэффициент EMA, например, FrontPeriod=0.5, что будет идентично заданию периода 3.
Также добавлен выходной буфер 1 – собственно, сама EMA_FBA по ст.девиации.
Снимки для разных вариантов сглаживания (в имени индикатора периоды сглаживания для фронта и затухания обозначаются Front(period) и Back(period) соответственно).
1. ст.девиация без сглаживания; 2. сглаживание по затуханию с периодом 55; 3. сглаживание по фронту с периодом 55.
1. Ст.девиация обычным сглаживание по EMA(5); 2. сглаживание по фронту с периодом 5, по затуханию 55; 3. сглаживание по фронту с периодом 55, по затуханию 5. Bollinger Bands с использование раздельного сглаживания ст.девиации (_BandsFBA.mq4).
Здесь также добавлены к стандартным только два поля параметров - периоды сглаживания фронта и затухания.
Выходные буферы те же плюс еще два для сглаженных этой перверцией: 4 - верхняя сглаженная граница полосы; 5 - нижняя.
На снимке приведены полосы Боллинджера с фильтрацией затухания ст.девиации. Фильтрации фронта, как легко заметно, нет. Зеленые линии - стандартные полосы. В подокне для справки выведена ст.девиации с аналогичными параметрами.
|