rill_protocol/calc/
ema.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Deserialize, Serialize, Debug, Clone)]
4pub struct Ema {
5    ema: f64,
6    k: f64,
7}
8
9impl Ema {
10    pub fn new(initial: f64, period: u32) -> Self {
11        let k = 2.0 / (period as f64 + 1.0);
12        Self { ema: initial, k }
13    }
14
15    pub fn update(&mut self, value: f64) {
16        self.ema = value * self.k + self.ema * (1.0 - self.k);
17    }
18
19    pub fn value(&self) -> f64 {
20        self.ema
21    }
22}