UNPKG

pricehistory

Version:
56 lines (55 loc) 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const simpul_1 = require("simpul"); function setCandleRSI(option, candle, series) { var _a, _b; if (option.rsi !== true && typeof option.rsi !== "number") return; const period = typeof option.rsi === "number" ? option.rsi : 14; const prev = series[series.length - 2]; if (series.length === period + 1) { let gain = 0; let loss = 0; for (let i = 1; i < series.length; i++) { const currPrice = (_a = series[i]) === null || _a === void 0 ? void 0 : _a.priceClose; const prevPrice = (_b = series[i - 1]) === null || _b === void 0 ? void 0 : _b.priceClose; if (typeof currPrice === "number" && typeof prevPrice === "number") { const change = currPrice - prevPrice; if (change > 0) gain += change; if (change < 0) loss += Math.abs(change); } } const averageGain = gain / period; const averageLoss = loss / period; const rsi = averageLoss === 0 ? 100 : 100 - 100 / (1 + averageGain / averageLoss); candle.averageGain = simpul_1.math.num(averageGain); candle.averageLoss = simpul_1.math.num(averageLoss); candle.rsi = simpul_1.math.num(rsi); } else if (typeof (prev === null || prev === void 0 ? void 0 : prev.rsi) === "number") { if (typeof prev.averageGain !== "number") return; if (typeof prev.averageLoss !== "number") return; if (typeof prev.priceClose !== "number") return; if (typeof candle.priceClose !== "number") return; let gain = prev.averageGain * (period - 1); let loss = prev.averageLoss * (period - 1); const change = candle.priceClose - prev.priceClose; if (change > 0) gain += change; if (change < 0) loss += Math.abs(change); const averageGain = gain / period; const averageLoss = loss / period; const rsi = averageLoss === 0 ? 100 : 100 - 100 / (1 + averageGain / averageLoss); candle.averageGain = simpul_1.math.num(averageGain); candle.averageLoss = simpul_1.math.num(averageLoss); candle.rsi = simpul_1.math.num(rsi); } } exports.default = setCandleRSI;