UNPKG

@showr/indicators

Version:

Technical indicators for Trading made with Showr

46 lines (45 loc) 1.81 kB
"use strict"; 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;