Скрипты: EMA и SMMA идентичны - страница 2

 
Mathemat,
Тут доказывать особо нечего, поскольку еще с МТ3 повелось заимствование алгоритмов расчета индикаторов из TradeStation(TS) как одного из законодателей мод в торговых платформах.
Ниже привожу описание Smoothed Average (SMMA) в TS:

The Smoothed Average function further smoothes an average of the last x bars. It does this by using the previous value of itself.
Use the function in the same way you would use the Average function.

Function

SmoothedAverage(PRICE,LENGTH)

Parameters

PRICE specifies which price of the asset of interest is to be used
LENGTH specifies the number of trailing bars to consider
Returns

A numeric value containing the current Smoothed Average.

Usage

On the first bar, this function adds together all the values returned by the parameter PRICE for the specified LENGTH, divides the sum by the LENGTH,
then stores the value in a variable called SUM. Only on the first bar is the SmoothedAverage function equal to the value stored in SUM.

SUM = Summation(PRICE, LENGTH)

On each bar there after, the function uses a different equation.

SmoothedAverage = (Sum[1] - SmoothedAverage[1] + Price)/Length

Из приведенного надеюсь видно, что формулы в описаниях идентичны, но реализация в коде отличается. Все дело в сумме,а не в значении средней на предыдущем баре.

Вывод:
Либо MQ должно поменять описание SMMA в документации, либо поменять алгоритм расчета в коде, либо добавить еще одно сглаживание по Вайлдеру, что впрочем имеет место в VT. Кроме того, неплохо бы было изменить и ADX, приведя его в соответствие оригиналу.
 

Понятно, igorad, большое спасибо за критику и дискуссию. Боюсь, теперь без вмешательства или хотя бы комментария разработчиков вопрос так и останется подвешенным в пустоте.

 
igorad:

SmoothedAverage = (Sum[1] - SmoothedAverage[1] + Price)/Length

Из приведенного надеюсь видно, что формулы в описаниях идентичны, но реализация в коде отличается. Все дело в сумме,а не в значении средней на предыдущем баре.

Вывод:
Либо MQ должно поменять описание SMMA в документации, либо поменять алгоритм расчета в коде, либо добавить еще одно сглаживание по Вайлдеру, что впрочем имеет место в VT. Кроме того, неплохо бы было изменить и ADX, приведя его в соответствие оригиналу.

Разговор об одном и том же. Я в свое время тоже возился с этим сглаживанием, Смотрим:

Sum[1] =SmoothedAverage[1]*Length, поэтому пишем Sum[1] - SmoothedAverage[1]=SmoothedAverage[1]*Length-SmoothedAverage[1]=SmoothedAverage[1](]*Length-1)

Далее: SmoothedAverage[0]=(SmoothedAverage[1]*(Length-1)+Price[0])/Length
 

Интересно, что сам дед Билл в обеих своих рептилиях настаивает именно на SMMA. Вот это и настораживает...

 
Rosh:
Разговор об одном и том же. Я в свое время тоже возился с этим сглаживанием, Смотрим:

Sum[1] =SmoothedAverage[1]*Length, поэтому пишем Sum[1] - SmoothedAverage[1]=SmoothedAverage[1]*Length-SmoothedAverage[1]=SmoothedAverage[1](]*Length-1)

Далее: SmoothedAverage[0]=(SmoothedAverage[1]*(Length-1)+Price[0])/Length

Твоя формула работает при условии Sum = SMMA*Length, но в данном случае Sum = SMA*Length, т.е. формулу SMMA можно привести к виду:

SMMA = (SMA[1]*Length - SMMA[1] + Price)/Length.
 
igorad:
Твоя формула работает при условии Sum = SMMA*Length, но в данном случае Sum = SMA*Length, т.е. формулу SMMA можно привести к виду:

SMMA = (SMA[1]*Length - SMMA[1] + Price)/Length.

Это все домыслы, связанные с неоднозначностью трактовки группы формул, изложенной в документации и тоже откуда-то скопированной. У нас нет четкой и ясной рекуррентной формулы, позволяющей вычислить следующее значение SMMA через предыдущие данные. Спор обречен, пока мы не найдем такой формулы.
 
igorad:
Rosh:
Разговор об одном и том же. Я в свое время тоже возился с этим сглаживанием, Смотрим:

Sum[1] =SmoothedAverage[1]*Length, поэтому пишем Sum[1] - SmoothedAverage[1]=SmoothedAverage[1]*Length-SmoothedAverage[1]=SmoothedAverage[1](]*Length-1)

Далее: SmoothedAverage[0]=(SmoothedAverage[1]*(Length-1)+Price[0])/Length

Твоя формула работает при условии Sum = SMMA*Length, но в данном случае Sum = SMA*Length, т.е. формулу SMMA можно привести к виду:

SMMA = (SMA[1]*Length - SMMA[1] + Price)/Length.


Моя формула работает при условии, что для вычисления средней на текущем баре SMMA[0] используется значение средней на предыдущем баре SMMA[1]. Тогда это имеет смысл. А если используется непонятно какая сумма Sum[1], посчитанная для предыдущего бара, тогда это еще какой-то вид индикатора, который назвать средней достаточно сложно.
 
Rosh:
igorad:
Rosh:
Разговор об одном и том же. Я в свое время тоже возился с этим сглаживанием, Смотрим:

Sum[1] =SmoothedAverage[1]*Length, поэтому пишем Sum[1] - SmoothedAverage[1]=SmoothedAverage[1]*Length-SmoothedAverage[1]=SmoothedAverage[1](]*Length-1)

Далее: SmoothedAverage[0]=(SmoothedAverage[1]*(Length-1)+Price[0])/Length

Твоя формула работает при условии Sum = SMMA*Length, но в данном случае Sum = SMA*Length, т.е. формулу SMMA можно привести к виду:

SMMA = (SMA[1]*Length - SMMA[1] + Price)/Length.


Моя формула работает при условии, что для вычисления средней на текущем баре SMMA[0] используется значение средней на предыдущем баре SMMA[1]. Тогда это имеет смысл. А если используется непонятно какая сумма Sum[1], посчитанная для предыдущего бара, тогда это еще какой-то вид индикатора, который назвать средней достаточно сложно.
Rosh,
я что-то не пойму куда ты клонишь. Для проверки верности своего умозаключения тебе надо поставит Омегу и повесить на график SMMA и посмотреть на что она похожа. Вид индикатора представляет собой сглаженную SMA. Просто вам(MQ) надо с этим разобраться и что-то подкорректировать - или формулу (тогда надо изменить код индикатора), или описание(тогда это будет не SMMA, а средняя Вайлдера).

Желтая- EMA(27), Magenta - SMA(14), Aqua - SMMA(14)
 

Да, интересно девки пляшут. Я увидел ошибочность своих выкладок: логичнее считать, что на каждом следующем шаге в первом слагаемом используется именно простой мувинг. igorad, похоже, прав, а корректная рекуррентная формула такова:

SMMA (i + 1) = (N * SMA (N; i) - SMMA (i) + CLOSE (i + 1)) / N 
             = (1 + 1/N) * SMA(N + 1; i + 1) - 1/N * SMMA(i)

Здесь увеличение индекса соответствует движению в будущее.

Это уже нечто совсем другое, совсем не EMA, но все же мувинг. И совсем он не похож на EMA. Значит, реализация в МТ неверна, так как в бесконечности она сходится к ЕМА, и ее нужно править.

 
Завтра буду смотреть. На сегодня уже все.