UNPKG

pricehistory

Version:
58 lines (57 loc) 2.24 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.setCandleEMA = setCandleEMA; exports.calcEMA = calcEMA; const simpul_1 = require("simpul"); const option_propsPrice_1 = __importDefault(require("./option.propsPrice")); function setCandleEMA(option, candle, series) { if (option.ema === true || option.macd === true) { calcEMA(9, series, candle); calcEMA(12, series, candle); calcEMA(26, series, candle); } } function calcEMA(period, series, candle, numKey = "priceClose") { if (typeof period !== "number" || series.length <= period) return; const prev = series[series.length - 2]; let emaKey = `ema${period}`; if (numKey !== "priceClose") emaKey += numKey; let prevEMA = prev[emaKey]; if (typeof prevEMA !== "number") { const numbers = []; const recent = series.slice(series.length - period - 1, series.length - 1); for (const i of recent) { const number = i[numKey]; if (typeof number === "number") numbers.push(number); } if (numbers.length === period) { const mean = simpul_1.math.mean(numbers); if (typeof mean === "number") prevEMA = mean; } } if (typeof prevEMA === "number") { const number = candle[numKey]; if (typeof number === "number") { const k = 2 / (period + 1); const currEMA = simpul_1.math.num(number * k + prevEMA * (1 - k)); candle[emaKey] = currEMA; if (numKey === "priceClose" && typeof currEMA === "number") { for (const priceProp of option_propsPrice_1.default) { if (priceProp === emaKey) continue; if (typeof candle[priceProp] === "number") { candle[`${emaKey}Signal${(0, simpul_1.capitalize)(priceProp)}`] = simpul_1.math.change.percent(currEMA, candle[priceProp]); } } } } } }