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}