UNPKG

series-processing

Version:

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

49 lines (44 loc) 1.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 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; } /** * Series 1 cross over series 2 * * <output series> = crossover(<input 1 series>, <input 2 series>) * <output series> = crossover(<input 1 series>, number) */ var crossover = exports.crossover = function crossover(outputKey, inputKey1, inputKey2) { return function (lastPoint, dataStream) { var previous = dataStream.getPrevious(); var comparePrev = compare(previous, inputKey1, inputKey2); var compareLast = compare(lastPoint, inputKey1, inputKey2); if (isNaN(compareLast) || isNaN(comparePrev)) return null; // Cross over when series 1's prev is lower but last is upper return _defineProperty({}, outputKey, comparePrev < 0 && compareLast > 0); }; }; /** * Series 1 cross under series 2 * * <output series> = crossunder(<input 1 series>, <input 2 series>) * <output series> = crossunder(<input 1 series>, number) */ var crossunder = exports.crossunder = function crossunder(outputKey, inputKey1, inputKey2) { return function (lastPoint, dataStream) { var previous = dataStream.getPrevious(); var comparePrev = compare(previous, inputKey1, inputKey2); var compareLast = compare(lastPoint, inputKey1, inputKey2); if (isNaN(compareLast) || isNaN(comparePrev)) return null; // Cross under when series 1's prev is upper but last is lower return _defineProperty({}, outputKey, comparePrev > 0 && compareLast < 0); }; }; var compare = function compare(item, key1, key2) { if (!item || isNaN(item[key1])) return null; var v2 = isNaN(key2) ? item[key2] : key2; if (isNaN(v2)) return null; var v1 = item[key1]; return v1 - v2; };