jesse-indicators
Version:
A Technical indicator library for TypeScript.
54 lines • 1.7 kB
JavaScript
;
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