ta-pattern-lib
Version:
Technical Analysis and Backtesting Framework for Node.js
39 lines • 1.61 kB
JavaScript
import round from "lodash.round";
import { stats_median } from "./feature_statistics";
export const calculate_heikin_ashi = (ohlc) => {
const heikin_ashi_data = [];
// console.log("ohlc", ohlc);
for (let i = 0; i < ohlc.length; i++) {
const current_ohlc = ohlc[i];
const prev_heikin_ashi = i > 0 ? heikin_ashi_data[i - 1] : { open: 0, high: 0, low: 0, close: 0 };
const haClose = (current_ohlc.open + current_ohlc.high + current_ohlc.low + current_ohlc.close) / 4;
const haOpen = (prev_heikin_ashi.open + prev_heikin_ashi.close) / 2;
const haHigh = Math.max(current_ohlc.high, haOpen, haClose);
const haLow = Math.min(current_ohlc.low, haOpen, haClose);
const heikin_ashi = {
...current_ohlc,
open: round(haOpen, 2),
high: round(haHigh, 2),
low: round(haLow, 2),
close: round(haClose, 2),
};
heikin_ashi_data.push(heikin_ashi);
}
return heikin_ashi_data;
};
export const calculate_median_ohlc = (ohlc) => {
const med_open = stats_median(ohlc.map((tick) => tick.open));
const med_high = stats_median(ohlc.map((tick) => tick.high));
const med_low = stats_median(ohlc.map((tick) => tick.low));
const med_close = stats_median(ohlc.map((tick) => tick.close));
const med_volume = stats_median(ohlc.map((tick) => tick.volume));
return {
time: ohlc[0].time,
close: med_close,
high: med_high,
low: med_low,
open: med_open,
volume: med_volume,
};
};
//# sourceMappingURL=feature_ohlc.js.map