UNPKG

pricehistory

Version:

Transforms raw OHLCV series data into enriched candles with technical indicators, pattern recognition, and trend analysis.

88 lines 3.49 kB
import setOptions from "./option.set.js"; import setCandleDate from "./candle.setDate.js"; import setCandleHalving from "./candle.setHalving.js"; import setCandleTime from "./candle.setTime.js"; import setCandlePrice from "./candle.setPrice.js"; import setCandlePriceLimit from "./candle.setPriceLimit.js"; import setCandleVolume from "./candle.setVolume.js"; import setCandleVwap from "./candle.setVwap.js"; import setCandleFibonacci from "./candle.setFibonacci.js"; import setCandleRsi from "./candle.setRsi.js"; import setCandleEma from "./candle.setEma.js"; import setCandleMacd from "./candle.setMacd.js"; import setCandleMacdPivot from "./candle.setMacdPivot.js"; import setCandleColor from "./candle.setColor.js"; import setCandleSma from "./candle.setSma.js"; import setCandleSignal from "./candle.setSignal.js"; import setCandleCandlestick from "./candle.setCandlestick.js"; import setCandlePhase from "./candle.setPhase.js"; import setCandlePressure from "./candle.setPressure.js"; import setCandleTrend from "./candle.setTrend.js"; import * as utilN from "@nameer/utils"; /** * Processes a series of raw OHLCV data points into enriched candles with technical indicators. * @example * pricehistory(series, { price: true, rsi: true, ema: true, macd: true }) * pricehistory(series, { price: true, color: true, candlestick: true }) * pricehistory(series, { open: "o", high: "h", low: "l", close: "c", volume: "v" }) */ function pricehistory(series = [], option = {}) { if (!series.length) return []; const opt = setOptions(option, series); const candles = []; const ctx = { obv: 0, obvValue: 0, vwapPV: 0, vwapVolume: 0, fib: {}, window: {}, rsi: {}, ema: {}, macd: {}, color: {}, prevTopBottom: [], trend: {}, }; let index = 0; for (const curr of series) { const candle = { index: index++ }; setCandleDate(opt, curr, candle); setCandleHalving(opt, candle); setCandleTime(opt, candle); setCandlePrice(opt, curr, candle, ctx); setCandlePriceLimit(opt, candle); setCandleVolume(opt, curr, candle, ctx); setCandleVwap(opt, candle, ctx); setCandleFibonacci(opt, candle, ctx); setCandleRsi(opt, candle, ctx); setCandleEma(opt, candle, ctx); setCandleMacd(opt, candle, ctx); setCandleMacdPivot(opt, candle); setCandleColor(opt, candle, ctx); setCandleSma(opt, candle, ctx); setCandleSignal(opt, candle, ctx); setCandleCandlestick(opt, candle, ctx); setCandlePhase(opt, candle); setCandlePressure(opt, candle); setCandleTrend(opt, candle, ctx); // Track previous close for next candle's calculations ctx.prevClose = candle.priceClose; // leverage-adjusted or regular const regClose = curr[opt.close]; // always raw/regular if (utilN.isNumber(regClose)) ctx.prevClose2 = regClose; // Fold normalize copy into main loop for efficiency for (const key of opt.normalize) candle[`${key}N`] = candle[key]; // Add anchor properties for (const num of opt.anchor) candle[`anchor${num}`] = num; candles.push(candle); } for (const key of opt.normalize) utilN.rescale(candles, `${key}N`, [0, 100]); return candles; } export default pricehistory; //# sourceMappingURL=index.js.map