use quantwave_core::traits::Next;
pub struct DEMA {
period: usize,
history: Vec<f64>,
}
impl DEMA {
pub fn new(period: usize) -> Self {
Self {
period,
history: Vec::new(),
}
}
}
impl Next<f64> for DEMA {
type Output = f64;
fn next(&mut self, input: f64) -> Self::Output {
self.history.push(input);
let res = talib_rs::overlap::dema(&self.history, self.period).unwrap_or_default();
*res.last().unwrap_or(&f64::NAN)
}
}
#[test]
fn test_dema() {
let mut dema = DEMA::new(3);
for i in 1..=5 {
println!("i: {}, dema: {}", i, dema.next(i as f64));
}
}