UNPKG

@thi.ng/transducers-stats

Version:

Transducers for statistical / technical analysis

27 lines (26 loc) 697 B
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 };