@thi.ng/transducers-stats
Version:
Transducers for statistical / technical analysis
31 lines (30 loc) • 919 B
JavaScript
import { comp } from "@thi.ng/transducers/comp";
import { drop } from "@thi.ng/transducers/drop";
import { __iter } from "@thi.ng/transducers/iterator";
import { map } from "@thi.ng/transducers/map";
import { multiplex } from "@thi.ng/transducers/multiplex";
import { partition } from "@thi.ng/transducers/partition";
import { mse } from "./mse.js";
import { sma } from "./sma.js";
function bollinger(...args) {
const iter = __iter(bollinger, args);
if (iter) {
return iter;
}
const period = args[0] || 20;
const sd = args[1] || 2;
return comp(
multiplex(partition(period, 1), sma(period)),
drop(period - 1),
map(([window, mean]) => {
const std = Math.sqrt(mse(window, mean) / period) * sd;
const min = mean - std;
const max = mean + std;
const pb = (window[period - 1] - min) / (max - min);
return { min, max, mean, pb };
})
);
}
export {
bollinger
};