Skip to main content

egui_charts/studies/builtin/
ma_cross.rs

1use super::ma_combination::impl_ma_preset;
2use super::{AverageLine, AverageType, MACombination};
3use crate::studies::palette;
4
5/// MA Cross, a preset of independently configurable averages.
6#[derive(Clone)]
7pub struct MACross {
8    inner: MACombination,
9}
10
11impl MACross {
12    /// Create two simple averages with lengths clamped to at least one.
13    pub fn new(fast_period: usize, slow_period: usize) -> Self {
14        let mut inner = MACombination::new(vec![
15            AverageLine::new(AverageType::Simple, fast_period, palette::ORANGE),
16            AverageLine::new(AverageType::Simple, slow_period, palette::DARK_GREEN),
17        ])
18        .unwrap();
19        inner.wait_for_all = true;
20        Self { inner }
21    }
22}
23
24impl Default for MACross {
25    fn default() -> Self {
26        Self::new(9, 21)
27    }
28}
29
30impl_ma_preset!(
31    MACross,
32    "MA Cross",
33    "MA Cross - Two simple averages with crossing markers",
34    palette::BLUE
35);