The rolling-math library calculates simple moving average and standard deviation on a sliding window of BigNumber values.
This package was created to support the development of Forta scan agents. It can be used to filter out short-term fluctuations and also detect anomalous value changes.
This package depends on the bignumber.js
package.
Use the node package manager npm to add the library to your project:
$ npm install rolling-math
Import the rolling-math and BigNumber libraries into a JavaScript file like this:
const BigNumber = require('bignumber.js');
const RollingMath = require('rolling-math');
For each data set you wish to track over time, create a new RollingMath object and specify the window size:
rollingMath = new RollingMath(5);
The window size (5
in this case) represents the maximum number of previous elements the RollingMath
object will store. Each time a new value is added, the oldest value is removed once the window
size limit has been reached. Window size corresponds directly with time--if you are sampling once
per day, and the window size is 5, you have a 5-day Simple Moving Average (SMA) filter.
addElement(element)
: Add a value to the data set. Theelement
value must be a BigNumber type.getNumElements()
: Returns the number of values currently storedgetWindowSize()
: Returns the window sizegetSum()
: Returns the sum of the currently stored valuesgetAverage()
: Return the average of the currently stored valuesgetStandardDeviation()
: Return the standard deviation of the currently stored values
Populate the rolling-math object with data:
rollingMath = new RollingMath(5);
rollingMath.addElement(new BigNumber(100));
rollingMath.addElement(new BigNumber(40));
rollingMath.addElement(new BigNumber(55));
rollingMath.addElement(new BigNumber(45));
rollingMath.addElement(new BigNumber(70));
rollingMath.addElement(new BigNumber(10)); // this will pop 100 out of the sliding window
Compute statistics:
const sum = rollingMath.getSum(); // 220
const average = rollingMath.getAverage(); // 44
const stdDev = rollingMath.getStandardDeviation(); // 22.19234
GNU Affero General Public License (AGPLv3). See LICENSE.