Страница 1 из 1

EEMA: EMA с компенсацией запаздывания

Добавлено: 27 ноя 2021, 15:57
BugsDigger
В статейке J. Ehlers "Hilbert Indicators Tell You When To Trade" есть идейка, как компенсировать запаздывание EMA.
( https://silo.tips/download/hilbert-indi ... n-to-trade )

Смысл в следующем.
Если есть EMA с некоторым периодом, то она отстает от входного ряда. Если взять EMA с удвоенным периодом, то запаздывание станет в два раза больше. Теперь, если из быстрой вычесть медленную, то получим величину этого запаздывания; прибавим же эту величину к быстрой - и получим EMA примерно без запаздывания.

Вот что выходит:

Код: Выделить всё

function Initialize()
{
 IndicatorName = "EEMA";   
 PriceStudy = true;   
 AddInput("Input", Inputs.Price);   
 AddParameter("Period", 10);
   
 AddSeries("EEMA", DrawAs.Line, Color.Black);
}

function Evaluate()
{
 double f=EMA(Input, (int)Period)[0];
 double s=EMA(Input, 2*(int)Period);
 EEMA[0]=2*f-s;
}

На рисунке пример обычной EMA (оранжевый) и скомпенсированной EEMA с одним и тем же периодом (50).
EEMA.png

Видно, что скомпенсированный фильтр быстрее следует за входным рядом. (В каких-то случаях это полезно, в каких-то, наоборот, вредно.)
Наверное, в таком же духе можно экспериментировать и с другими бегущими средними.

Не бог весть что, но м.б. кому-то пригодится.

Re: EEMA: EMA с компенсацией запаздывания

Добавлено: 06 дек 2021, 14:56
BugsDigger
На самом деле уже есть в библиотеке индикаторов под именем DEMA. Единственное различие в том, что в DEMA медленная ("измерительная") кривая берется не от исходных данных, а от уже сглаженных. Разница небольшая, но на мой взгляд EEMA чуть медленнее следует за входным рядом (фильтрует сильнее). Что лучше - решать пользователю.