UNPKG

@thi.ng/transducers-stats

Version:

Transducers for statistical / technical analysis

31 lines (30 loc) 919 B
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 };