@thi.ng/transducers-stats
Version:
Transducers for statistical / technical analysis
25 lines (24 loc) • 731 B
JavaScript
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
};