@thi.ng/transducers-stats
Version:
Transducers for statistical / technical analysis
27 lines (26 loc) • 697 B
JavaScript
import { sliding } from "@thi.ng/buffers/sliding";
import { illegalArgs } from "@thi.ng/errors/illegal-arguments";
import { compR } from "@thi.ng/transducers/compr";
import { iterator1 } from "@thi.ng/transducers/iterator";
function roc(period, src) {
if (src) {
return iterator1(roc(period), src);
}
period |= 0;
period < 1 && illegalArgs("period must be >= 1");
return (rfn) => {
const reduce = rfn[2];
const window = sliding(period);
return compR(rfn, (acc, x) => {
if (window.length === period) {
const prev = window.read();
acc = reduce(acc, (x - prev) / prev);
}
window.write(x);
return acc;
});
};
}
export {
roc
};