moving-averages-js
Version:
The FinTech utility collections of simple, cumulative, and exponential moving averages.
42 lines (41 loc) • 1.08 kB
JavaScript
;
// Weighted moving average
Object.defineProperty(exports, "__esModule", { value: true });
var common_1 = require("./common");
exports.default = (function (data, size) {
var length = data.length;
if (size <= 1) {
return data.slice();
}
if (size > length) {
return Array(length);
}
var ret = [];
var denominator = (size * (size + 1)) / 2;
var prepare = size - 1;
var sum = 0;
var numerator = 0;
var datum = 0;
var i = 0;
var real = -1;
for (; i < prepare; i++) {
datum = data[i];
if ((0, common_1.isNumber)(datum)) {
sum += datum;
numerator += (i + 1) * datum;
}
}
for (; i < length; i++, real++) {
datum = data[i];
if ((0, common_1.isNumber)(datum)) {
sum += datum;
numerator += size * datum;
}
if (real >= 0 && (0, common_1.isNumber)(data[real])) {
sum -= data[real];
}
ret[i] = numerator / denominator;
numerator -= sum;
}
return ret;
});