@showr/indicators
Version:
Technical indicators for Trading made with Showr
46 lines (45 loc) • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RSI = void 0;
const core_1 = require("@showr/core");
const averageGain_1 = require("./averageGain");
const averageLoss_1 = require("./averageLoss");
class RSI extends core_1.Indicator {
constructor(name = 'RSI', params) {
super(name, function (dataset) {
const { period } = params;
const datasetLength = dataset.value.length;
if (datasetLength <= period) {
return NaN;
}
const averageGain = dataset
.at(-1)
?.getIndicator(`averageGain${params.period}`);
const averageLoss = dataset
.at(-1)
?.getIndicator(`averageLoss${params.period}`);
const relativeStrength = isNaN(averageGain / averageLoss)
? 0
: averageGain / averageLoss;
return 100 - 100 / (1 + relativeStrength);
}, {
params,
beforeCalculate: (dataset) => {
if (dataset.value.length > params.period) {
const averageGainName = `averageGain${params.period}`;
const averageLossName = `averageLoss${params.period}`;
const avgGain = new averageGain_1.AverageGain(averageGainName, {
period: params.period,
attribute: params.attribute,
});
const avgLoss = new averageLoss_1.AverageLoss(averageLossName, {
period: params.period,
attribute: params.attribute,
});
dataset.apply(avgGain, avgLoss);
}
},
});
}
}
exports.RSI = RSI;