UNPKG

series-processing

Version:

Time-series processing for forex, market analysis, including MA, EMA,...

42 lines (35 loc) 1.33 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.EMA = undefined; var _SMA = require('./SMA'); function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /** * Exponential Moving Average * @see https://en.wikipedia.org/wiki/Exponential_smoothing * * <output series> = ema(<input series>, length) */ var EMA = exports.EMA = function EMA(outputKey, inputKey, length) { return function (lastPoint, dataStream) { if (typeof lastPoint === 'undefined' || typeof lastPoint[inputKey] === 'undefined') { return null; } var previousPoint = dataStream.getPrevious(); var previousEma = null; if (previousPoint && previousPoint[outputKey]) { previousEma = previousPoint[outputKey]; } else { // Use SMA when the first previous EMA value is not available var sma = (0, _SMA.SMA)('test', 'close', length)(lastPoint, dataStream); if (sma && sma['test']) { previousEma = sma['test']; } } if (!previousEma) return null; var K = 2 / (1 + length); var ema = (lastPoint[inputKey] - previousEma) * K + previousEma; return _defineProperty({}, outputKey, ema); }; };