@thi.ng/transducers-stats
Version:
Transducers for statistical / technical analysis
22 lines (21 loc) • 607 B
JavaScript
import { compR } from "@thi.ng/transducers/compr";
import { iterator1 } from "@thi.ng/transducers/iterator";
import { Deque } from "./deque.js";
function movingMaximum(period, src) {
return src ? iterator1(movingMaximum(period), src) : (rfn) => {
const samples = [];
const deque = new Deque(samples, (a, b) => a <= b);
return compR(rfn, (acc, x) => {
const num = samples.push(x);
deque.add(x);
if (num > period) {
samples.shift();
deque.shift();
}
return num >= period ? rfn[2](acc, deque.head()) : acc;
});
};
}
export {
movingMaximum
};