UNPKG

moving-averages-js

Version:

The FinTech utility collections of simple, cumulative, and exponential moving averages.

54 lines (53 loc) 1.59 kB
"use strict"; // Dynamic Weighted Moving Average Object.defineProperty(exports, "__esModule", { value: true }); var common_1 = require("./common"); // @param {Number|Array.<Number>} alpha exports.default = (function (data, alpha, noHead) { var length = data.length; if (alpha > 1) { return Array(length); } if (alpha === 1) { return data.slice(); } var noArrayWeight = !(0, common_1.isArray)(alpha); var ret = []; var datum; // period `i` var i = 0; // `s` is the value of the DWMA at any time period `i` var s = 0; // Handles head for (; i < length; i++) { datum = data[i]; if ((0, common_1.isNumber)(datum) && (noArrayWeight || (0, common_1.isNumber)(datum))) { ret[i] = noHead ? 0 : datum; s = datum; i++; break; } } // Dynamic weights: an array of weights // Ref: // https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average // with a dynamic alpha if (!noArrayWeight) { for (; i < length; i++) { datum = data[i]; (0, common_1.isNumber)(datum) && (0, common_1.isNumber)(alpha[i]) ? (s = ret[i] = alpha[i] * datum + (1 - alpha[i]) * s) : (ret[i] = ret[i - 1]); } return ret; } var o = 1 - alpha; // Fixed alpha for (; i < length; i++) { datum = data[i]; (0, common_1.isNumber)(datum) ? (s = ret[i] = alpha * datum + o * s) : (ret[i] = ret[i - 1]); } return ret; });