Как рассчитать 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