trade_aggregation/candle_components/
std_dev_sizes.rs1use crate::{welford_online::WelfordOnline, CandleComponent, CandleComponentUpdate, TakerTrade};
2
3#[derive(Debug, Clone)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub struct StdDevSizes {
7 welford: WelfordOnline,
8}
9
10impl Default for StdDevSizes {
11 fn default() -> Self {
12 Self {
13 welford: WelfordOnline::new(),
14 }
15 }
16}
17impl CandleComponent<f64> for StdDevSizes {
18 #[inline(always)]
19 fn value(&self) -> f64 {
20 self.welford.std_dev()
21 }
22
23 #[inline(always)]
24 fn reset(&mut self) {
25 self.welford.reset();
26 }
27}
28
29impl<T: TakerTrade> CandleComponentUpdate<T> for StdDevSizes {
30 #[inline(always)]
31 fn update(&mut self, trade: &T) {
32 self.welford.add(trade.size());
33 }
34}