pricehistory
Version:
Transforms raw OHLCV series data into enriched candles with technical indicators, pattern recognition, and trend analysis.
129 lines (128 loc) • 6.1 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const option_set_js_1 = __importDefault(require("./option.set.js"));
const candle_setDate_js_1 = __importDefault(require("./candle.setDate.js"));
const candle_setHalving_js_1 = __importDefault(require("./candle.setHalving.js"));
const candle_setTime_js_1 = __importDefault(require("./candle.setTime.js"));
const candle_setPrice_js_1 = __importDefault(require("./candle.setPrice.js"));
const candle_setPriceLimit_js_1 = __importDefault(require("./candle.setPriceLimit.js"));
const candle_setVolume_js_1 = __importDefault(require("./candle.setVolume.js"));
const candle_setVwap_js_1 = __importDefault(require("./candle.setVwap.js"));
const candle_setFibonacci_js_1 = __importDefault(require("./candle.setFibonacci.js"));
const candle_setRsi_js_1 = __importDefault(require("./candle.setRsi.js"));
const candle_setEma_js_1 = __importDefault(require("./candle.setEma.js"));
const candle_setMacd_js_1 = __importDefault(require("./candle.setMacd.js"));
const candle_setMacdPivot_js_1 = __importDefault(require("./candle.setMacdPivot.js"));
const candle_setColor_js_1 = __importDefault(require("./candle.setColor.js"));
const candle_setSma_js_1 = __importDefault(require("./candle.setSma.js"));
const candle_setSignal_js_1 = __importDefault(require("./candle.setSignal.js"));
const candle_setCandlestick_js_1 = __importDefault(require("./candle.setCandlestick.js"));
const candle_setPhase_js_1 = __importDefault(require("./candle.setPhase.js"));
const candle_setPressure_js_1 = __importDefault(require("./candle.setPressure.js"));
const candle_setTrend_js_1 = __importDefault(require("./candle.setTrend.js"));
const utilN = __importStar(require("@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 = (0, option_set_js_1.default)(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++ };
(0, candle_setDate_js_1.default)(opt, curr, candle);
(0, candle_setHalving_js_1.default)(opt, candle);
(0, candle_setTime_js_1.default)(opt, candle);
(0, candle_setPrice_js_1.default)(opt, curr, candle, ctx);
(0, candle_setPriceLimit_js_1.default)(opt, candle);
(0, candle_setVolume_js_1.default)(opt, curr, candle, ctx);
(0, candle_setVwap_js_1.default)(opt, candle, ctx);
(0, candle_setFibonacci_js_1.default)(opt, candle, ctx);
(0, candle_setRsi_js_1.default)(opt, candle, ctx);
(0, candle_setEma_js_1.default)(opt, candle, ctx);
(0, candle_setMacd_js_1.default)(opt, candle, ctx);
(0, candle_setMacdPivot_js_1.default)(opt, candle);
(0, candle_setColor_js_1.default)(opt, candle, ctx);
(0, candle_setSma_js_1.default)(opt, candle, ctx);
(0, candle_setSignal_js_1.default)(opt, candle, ctx);
(0, candle_setCandlestick_js_1.default)(opt, candle, ctx);
(0, candle_setPhase_js_1.default)(opt, candle);
(0, candle_setPressure_js_1.default)(opt, candle);
(0, candle_setTrend_js_1.default)(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;
}
exports.default = pricehistory;
//# sourceMappingURL=index.js.map
module.exports = exports.default;
module.exports.default = exports.default;