UNPKG

jesse-indicators

Version:

A Technical indicator library for TypeScript.

54 lines 1.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function RSI(values, period) { if (values.length !== period) { throw new Error('Number of values must be the same as the period.'); } const { averageGain, averageLoss } = averageLossAndGain(values); const RS = averageGain / averageLoss; const RSI = 100 - 100 / (1 + RS); return { RSI, averageGain, averageLoss }; } exports.default = RSI; function quickRSI(currentValue, previousValue, period, previousAverageGain, previousAverageLoss) { const change = currentValue - previousValue; let currentGain = 0; let currentLoss = 0; if (change > 0) { currentGain += change; } else { currentLoss += Math.abs(change); } const newAverageGain = (previousAverageGain * (period - 1) + currentGain) / period; const newAverageLoss = (previousAverageLoss * (period - 1) + currentLoss) / period; return { RSI: 100 - 100 / (1 + newAverageGain / newAverageLoss), averageGain: newAverageGain, averageLoss: newAverageLoss }; } exports.quickRSI = quickRSI; function averageLossAndGain(values) { let gains = 0; let losses = 0; const period = values.length; for (let i = 1; i < values.length; i++) { const change = values[i] - values[i - 1]; if (change > 0) { gains += change; } else { losses += Math.abs(change); } } const averageGain = gains / period; const averageLoss = losses / period; return { averageGain, averageLoss }; } exports.averageLossAndGain = averageLossAndGain; //# sourceMappingURL=index.js.map