Как рассчитать EMA из массива чисел?

У меня есть массив ежедневных цен закрытия для акций (исторических данных), отформатированных так:

var close = [39, 40.133, 38.23, .... , 45.38] 

они в хронологическом порядке по дате. Я пытаюсь сделать массив значений EMA (экспоненциальной скользящей средней) цены закрытия, чтобы они хронологически коррелировали с датой.

Я делаю это в nodejs; любая помощь будет принята с благодарностью!

PS Вот что я пробовал:

var gauss = require('gauss');

var test = [39, 40.133, 38.23, 45.38, 43.83, 42.1, 48, 47, 44.12, 44.33, 46.9];
var vec = test.toVector();
var ma = vec.ema(10);

console.log(ma); // Outputs [ 43.2123, 43.88279090909091 ]

Почему это выводит это?

1 ответ

Решение

ema Функция возвращает вектор EMA из предыдущих N точек. В вашем коде N равно 10, и поскольку ваш входной вектор test имеет 11 элементов, можно рассчитать 2 скользящие средние.

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

[39, 40.133, 38.23, 45.38, 43.83, 42.1, 48, 47, 44.12, 44.33, 46.9];
     -----------------------------> 43.88279090909091 <-----------
 ----------------> 43.2123 <--------------------------------

Для получения более подробной информации смотрите документацию: https://github.com/wayoutmind/gauss

Другие вопросы по тегам