UNPKG

@thi.ng/transducers-stats

Version:

Transducers for statistical / technical analysis

25 lines (24 loc) 731 B
import { compR } from "@thi.ng/transducers/compr"; import { iterator1 } from "@thi.ng/transducers/iterator"; import { Deque } from "./deque.js"; function donchian(period, src) { return src ? iterator1(donchian(period), src) : (rfn) => { const samples = []; const minDeque = new Deque(samples, (a, b) => a >= b); const maxDeque = new Deque(samples, (a, b) => a <= b); return compR(rfn, (acc, x) => { const num = samples.push(x); minDeque.add(x); maxDeque.add(x); if (num > period) { samples.shift(); minDeque.shift(); maxDeque.shift(); } return num >= period ? rfn[2](acc, [minDeque.head(), maxDeque.head()]) : acc; }); }; } export { donchian };