pricehistory
Version:
Series data with technical indicators.
92 lines (91 loc) • 4.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const simpul_1 = require("simpul");
function setCandlePrice(option, curr, candle, prev) {
const open = option.open && curr[option.open];
const high = option.high && curr[option.high];
const low = option.low && curr[option.low];
const close = option.close && curr[option.close];
const prevClose = prev === null || prev === void 0 ? void 0 : prev.priceClose; // regular close or leveraged close
const prevClose2 = prev === null || prev === void 0 ? void 0 : prev.priceClose2; // regular close
const basePrice = option.basePrice;
if (typeof open === "number")
candle.priceOpen = open;
if (typeof high === "number")
candle.priceHigh = high;
if (typeof low === "number")
candle.priceLow = low;
if (typeof close === "number")
candle.priceClose = close;
if (typeof option.leverage === "number" && typeof open === "number") {
let levOpen = open;
let levHigh;
let levLow;
let levClose;
if (typeof prevClose === "number" && typeof prevClose2 === "number") {
levOpen = calcLeverage(option.leverage, prevClose2, open, prevClose);
}
if (typeof levOpen === "number" && typeof high === "number") {
levHigh = calcLeverage(option.leverage, open, high, levOpen);
}
if (typeof levOpen === "number" && typeof low === "number") {
levLow = calcLeverage(option.leverage, open, low, levOpen);
}
if (typeof levOpen === "number" && typeof close === "number") {
levClose = calcLeverage(option.leverage, open, close, levOpen);
}
if (typeof levOpen === "number")
candle.priceOpen = levOpen;
if (typeof levHigh === "number")
candle.priceHigh = levHigh;
if (typeof levLow === "number")
candle.priceLow = levLow;
if (typeof levClose === "number")
candle.priceClose = levClose;
if (typeof close === "number")
candle.priceClose2 = close;
if (typeof prevClose2 === "number")
delete prev.priceClose2;
}
if (option.price !== true)
return;
if (typeof candle.priceOpen === "number" &&
typeof candle.priceClose === "number" &&
typeof candle.priceLow === "number" &&
typeof candle.priceHigh === "number") {
candle.priceMean = simpul_1.math.mean([
candle.priceOpen,
candle.priceHigh,
candle.priceLow,
candle.priceClose,
]);
}
if (typeof prevClose === "number" && typeof candle.priceClose === "number") {
candle.priceChange = simpul_1.math.change.percent(prevClose, candle.priceClose);
}
if (typeof prevClose === "number" && typeof candle.priceOpen === "number") {
candle.priceChangePremarket = simpul_1.math.change.percent(prevClose, candle.priceOpen);
}
if (typeof candle.priceOpen === "number" &&
typeof candle.priceClose === "number") {
candle.priceChangeIntraday = simpul_1.math.change.percent(candle.priceOpen, candle.priceClose);
}
if (typeof basePrice === "number" && typeof candle.priceClose === "number") {
candle.priceChangeCumulative = simpul_1.math.change.percent(basePrice, candle.priceClose);
}
if (typeof candle.priceLow === "number" &&
typeof candle.priceHigh === "number") {
candle.priceRange = simpul_1.math.discrepancy(candle.priceLow, candle.priceHigh);
candle.priceRangeDiff = simpul_1.math.change.percent(candle.priceLow, candle.priceHigh);
candle.priceRangeMean = simpul_1.math.mean([candle.priceLow, candle.priceHigh]);
}
}
function calcLeverage(lev, prev, curr, mark) {
const change = simpul_1.math.change.percent(prev, curr);
if (typeof change === "number") {
const leveraged = simpul_1.math.num(mark + mark * ((change / 100) * lev));
if (typeof leveraged === "number")
return leveraged;
}
}
exports.default = setCandlePrice;