series-processing
Version:
Time-series processing for forex, market analysis, including MA, EMA,...
49 lines (44 loc) • 1.89 kB
JavaScript
;
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;
};