Skip to main content

trading_toolkit/indicator/
force_index.rs

1use crate::types::data::{BaseData, Candle};
2
3#[derive(Debug, Clone, Copy)]
4pub struct ForceIndex {
5    inner: f64,
6    epoch_time: u128,
7}
8
9// make Force Index usable for MovingAverage
10impl BaseData for ForceIndex {
11    fn value(&self) -> f64 {
12        self.inner
13    }
14
15    fn weight(&self) -> u64 {
16        1
17    }
18
19    fn epoch_time(&self) -> u128 {
20        self.epoch_time
21    }
22}
23
24impl ForceIndex {
25    pub fn new<T>(prev: &T, curr: &T) -> Self
26    where
27        T: Candle,
28    {
29        Self {
30            inner: (curr.close_price() - prev.close_price()) * (curr.tot_exec_volume() as f64),
31            epoch_time: curr.epoch_time(),
32        }
33    }
34
35    pub fn inner(&self) -> f64 {
36        self.inner
37    }
38}