2021-12-03 17:58:48 +01:00

61 lines
1.8 KiB
Markdown

[![NPM Version](https://img.shields.io/npm/v/ewma.svg)](https://npmjs.org/package/ewma)
[![Build Status](https://travis-ci.org/ReactiveSocket/ewma.svg?branch=master)](https://travis-ci.org/ReactiveSocket/ewma)
# EWMA
An exponential weighted moving average for Node.js and the browser!
```bash
npm install -g ewma
```
## Usage
Compute the exponential weighted moving average of a series of values. The
time at which you insert the value into `Ewma` is used to compute a weight
(recent points are weighted higher). The parameter for defining the
convergence speed (like most decay process) is the half-life.
e.g. with a half-life of 10 unit, if you insert 100 at t=0 and 200 at t=10 the
ewma will be equal to (200 - 100)/2 = 150 (half of the distance between the new
and the old value).
### `var ewma = new EWMA(halfLifeMs, initialValue, clock)`
* `halfLifeMs` - `{Number}` parameter representing the speed of convergence
* `initialValue` - `{Number}` initial value
* `clock` - Optional `{Number}` clock object used to read time, must support
`Date.now()` style method. Defaults to `Date`.
returns an object computing the ewma average
### `ewma.insert(x)`
* `x` - The next value, `ewma` will automatically compute the EWMA based on the
clock difference between this value and the last time `insert` was
called
### `ewma.reset(x)`
* `x` - Set the EWMA to exactly `x`.
### `ewma.value()`
Returns the current EWMA value.
## Examples
These are generated using a 500ms interval with a half life indicated in the
key. For the source code, or to reproduce yourself, check the
[Example](./example) directory.
![](./example/abs.png)
![](./example/sin.png)
![](./example/sawtooth.png)
## Contributions
Contributions welcome, please ensure `make` runs clean.
## License
MIT