Экспоненциальный мувинг. Хочется ясности.

 

Понадобилось усреднить показания индикатора экспоненциальным мувингом. Рассчитать обычное среднее арифметическое, пройдясь по ячейкам индикаторного буффера - нет проблем. Но усреднить экспоненциальным МА оказалось проблематично - не как не получается прийти к однозначной формуле.

1. Из справки терминала:

Формула не даёт ясности, так как отсутствует формула вычисления загадочной переменной Р (долей использования значений цен), как и не разъяснено что такое эта самая доля.

2. Из кода пользовательского (метаквотесовского) индикатора МА:

Этот код сбивает с толку. В справке терминала в формуле ЕМА стоит " 100 - P ", тогда как в индикаторе метаквотесов употребляется подчёркнутое красным (1-pr). Непонятно почему вычитается из еденицы, а не из стоки.

Путешествия по интернету результатов не дали - в одних формулах вычитание ведётся из сотки, как и в справке терминала, в других - из единицы. И к тому же не удаётся найти вразумительное объяснения, как вычислить загадочную переменную Р и почему именно так, а не иначе.

Возникает естественный вопрос, так как же всё-таки в коде правильно усреднить при помощи ЕМА набор значений из индикаторного буффера, или вообще, любой другой набор значений произвольного одномерного массива?

P.S.

Вариант присоединения скользящей к индикатору с указанием параметра "First Indicator's Data" не подходит, ибо его впоследствии не запросишь через iCustom(). Или может я просто не знаю как это сделать?

 

Афтар. Хочешь ясности - разберись сам. У тебя код перед глазами.

В хелпе формулы неформальные. 100 означает 100%, что равно в точности 1.0

 
 

Загадочная переменная P (или pr в коде - который все правильно считает) соответствует параметру затухания ЕМА, при котором она примерно соответствует МА с периодом MA_period. Соответствующие рассуждения можно найти у Эйлерса в одной из его статей - но я сейчас это не смогу найти.

А вообще экспоненциальная средняя на нулевом баре считается так:

EMA[0] = pr * Sum( Close[i]*(1-pr)^i; i = 0..infinity )

Потому и зовется экспоненциальной. Обрати внимание, что сумма всех коэффициентов равна ровно 1, как и положено.

Но при вычислениях удобнее пользоваться рекуррентной формулой, как в коде. И именно из формулы выше и вытекает эта рекуррентная формула.

 

Вариант присоединения скользящей к индикатору с указанием параметра "First Indicator's Data" не подходит, ибо его впоследствии не запросишь через iCustom(). Или может я просто не знаю как это сделать?

https://docs.mql4.com/ru/indicators/iMAOnArray

 

Ай спасибки! :) Ни когда не приходилось пользоваться этой функцией языка, поэтому и из внимания вылетела.

Mathemat:

Загадочная переменная P (или pr в коде - который все правильно считает) соответствует параметру затухания ЕМА, при котором она примерно соответствует МА с периодом MA_period. Соответствующие рассуждения можно найти у Эйлерса в одной из его статей - но я сейчас это не смогу найти.

А вообще экспоненциальная средняя на нулевом баре считается так:

EMA[0] = pr * Sum( Close[i]*(1-pr)^i; i = 0..infinity )

Потому и зовется экспоненциальной. Обрати внимание, что сумма всех коэффициентов равна ровно 1, как и положено.

Но при вычислениях удобнее пользоваться рекуррентной формулой, как в коде. И именно из формулы выше и вытекает эта рекуррентная формула.

Сумма всех коэффициентов равна 1. Ладно, пусть так. Но как найти величину коэффициента для текущей итерации цикла?


MetaDriver:

Афтар. Хочешь ясности - разберись сам. У тебя код перед глазами.

В хелпе формулы неформальные. 100 означает 100%, что равно в точности 1.0


Спасибо. Это объясняет использование то сотки, то единицы. А по поводу "разберись сам - у тя код перед глазами" - не выходит. Код не даёт ясности в понимании алгоритма и обоснования причин почему всё именно так, а не иначе.

avtomat:

Опять же нет чёткой формулы вычисления переменной "а"
 

а -- это параметр

поэкспериментируй с различными значениями -- прояснится.

 
drknn: Но как найти величину коэффициента для текущей итерации цикла?
Какого коэффициента? pr?
 
Ага, pr. В коде стоит "два, умножить на увеличенный на единицу период усреднения". Не понял откуда взялась эта формула, почему именно на два умножается, почему период усреднения увеличен на единицу?
Причина обращения: