diff --git a/crates/wickra-core/src/indicators/auto_fib.rs b/crates/wickra-core/src/indicators/auto_fib.rs index 4184bb19..d844106d 100644 --- a/crates/wickra-core/src/indicators/auto_fib.rs +++ b/crates/wickra-core/src/indicators/auto_fib.rs @@ -40,6 +40,21 @@ pub struct AutoFibOutput { /// have confirmed. /// /// See `crates/wickra-core/src/indicators/auto_fib.rs`. +/// # Example +/// +/// ``` +/// use wickra_core::{AutoFib, Candle, Indicator}; +/// +/// let mut indicator = AutoFib::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct AutoFib { swing: SwingTracker, diff --git a/crates/wickra-core/src/indicators/fib_confluence.rs b/crates/wickra-core/src/indicators/fib_confluence.rs index de5c9314..b4bb656a 100644 --- a/crates/wickra-core/src/indicators/fib_confluence.rs +++ b/crates/wickra-core/src/indicators/fib_confluence.rs @@ -33,6 +33,21 @@ pub struct FibConfluenceOutput { /// legs (three pivots) exist. /// /// See `crates/wickra-core/src/indicators/fib_confluence.rs`. +/// # Example +/// +/// ``` +/// use wickra_core::{FibConfluence, Candle, Indicator}; +/// +/// let mut indicator = FibConfluence::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct FibConfluence { swing: SwingTracker, diff --git a/crates/wickra-core/src/indicators/fib_extension.rs b/crates/wickra-core/src/indicators/fib_extension.rs index 444546e8..0f6177d7 100644 --- a/crates/wickra-core/src/indicators/fib_extension.rs +++ b/crates/wickra-core/src/indicators/fib_extension.rs @@ -37,6 +37,21 @@ pub struct FibExtensionOutput { /// leg is complete. /// /// See `crates/wickra-core/src/indicators/fib_extension.rs`. +/// # Example +/// +/// ``` +/// use wickra_core::{FibExtension, Candle, Indicator}; +/// +/// let mut indicator = FibExtension::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct FibExtension { swing: SwingTracker, diff --git a/crates/wickra-core/src/indicators/fib_projection.rs b/crates/wickra-core/src/indicators/fib_projection.rs index 30f0d438..c1686148 100644 --- a/crates/wickra-core/src/indicators/fib_projection.rs +++ b/crates/wickra-core/src/indicators/fib_projection.rs @@ -31,6 +31,21 @@ pub struct FibProjectionOutput { /// pivots have confirmed. /// /// See `crates/wickra-core/src/indicators/fib_projection.rs`. +/// # Example +/// +/// ``` +/// use wickra_core::{FibProjection, Candle, Indicator}; +/// +/// let mut indicator = FibProjection::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct FibProjection { swing: SwingTracker, diff --git a/crates/wickra-core/src/indicators/fib_retracement.rs b/crates/wickra-core/src/indicators/fib_retracement.rs index b9aa4c42..64dfa2e6 100644 --- a/crates/wickra-core/src/indicators/fib_retracement.rs +++ b/crates/wickra-core/src/indicators/fib_retracement.rs @@ -46,6 +46,21 @@ pub struct FibRetracementOutput { /// chart- and harmonic-pattern detectors, so construction is infallible. /// /// See `crates/wickra-core/src/indicators/fib_retracement.rs`. +/// # Example +/// +/// ``` +/// use wickra_core::{FibRetracement, Candle, Indicator}; +/// +/// let mut indicator = FibRetracement::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct FibRetracement { swing: SwingTracker, diff --git a/crates/wickra-core/src/indicators/fib_time_zones.rs b/crates/wickra-core/src/indicators/fib_time_zones.rs index 662944ac..3f0f283b 100644 --- a/crates/wickra-core/src/indicators/fib_time_zones.rs +++ b/crates/wickra-core/src/indicators/fib_time_zones.rs @@ -28,6 +28,21 @@ pub struct FibTimeZonesOutput { /// pivot has confirmed. /// /// See `crates/wickra-core/src/indicators/fib_time_zones.rs`. +/// # Example +/// +/// ``` +/// use wickra_core::{FibTimeZones, Candle, Indicator}; +/// +/// let mut indicator = FibTimeZones::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct FibTimeZones { swing: SwingTracker, diff --git a/crates/wickra-core/src/indicators/golden_pocket.rs b/crates/wickra-core/src/indicators/golden_pocket.rs index 98ee21cd..5c15df14 100644 --- a/crates/wickra-core/src/indicators/golden_pocket.rs +++ b/crates/wickra-core/src/indicators/golden_pocket.rs @@ -32,6 +32,21 @@ pub struct GoldenPocketOutput { /// leg is complete. /// /// See `crates/wickra-core/src/indicators/golden_pocket.rs`. +/// # Example +/// +/// ``` +/// use wickra_core::{GoldenPocket, Candle, Indicator}; +/// +/// let mut indicator = GoldenPocket::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct GoldenPocket { swing: SwingTracker, diff --git a/crates/wickra-core/src/indicators/harami_cross.rs b/crates/wickra-core/src/indicators/harami_cross.rs index 49148f53..717b8ac9 100644 --- a/crates/wickra-core/src/indicators/harami_cross.rs +++ b/crates/wickra-core/src/indicators/harami_cross.rs @@ -26,6 +26,21 @@ fn is_doji(candle: Candle) -> bool { } /// Harami Cross — large-body-then-contained-doji reversal detector. +/// # Example +/// +/// ``` +/// use wickra_core::{HaramiCross, Candle, Indicator}; +/// +/// let mut indicator = HaramiCross::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone, Default)] pub struct HaramiCross { prev: Option, diff --git a/crates/wickra-core/src/indicators/td_camouflage.rs b/crates/wickra-core/src/indicators/td_camouflage.rs index d4f11e2c..2b5be36f 100644 --- a/crates/wickra-core/src/indicators/td_camouflage.rs +++ b/crates/wickra-core/src/indicators/td_camouflage.rs @@ -18,6 +18,21 @@ use crate::ohlcv::Candle; use crate::traits::Indicator; /// TD Camouflage — 1-bar hidden-strength/weakness reversal detector. +/// # Example +/// +/// ``` +/// use wickra_core::{TdCamouflage, Candle, Indicator}; +/// +/// let mut indicator = TdCamouflage::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone, Default)] pub struct TdCamouflage { prev: Option, diff --git a/crates/wickra-core/src/indicators/td_clop.rs b/crates/wickra-core/src/indicators/td_clop.rs index 7e4eb648..2ecf8f0b 100644 --- a/crates/wickra-core/src/indicators/td_clop.rs +++ b/crates/wickra-core/src/indicators/td_clop.rs @@ -19,6 +19,21 @@ use crate::ohlcv::Candle; use crate::traits::Indicator; /// TD Clop — 2-bar open/close engulfing reversal detector. +/// # Example +/// +/// ``` +/// use wickra_core::{TdClop, Candle, Indicator}; +/// +/// let mut indicator = TdClop::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone, Default)] pub struct TdClop { prev: Option, diff --git a/crates/wickra-core/src/indicators/td_clopwin.rs b/crates/wickra-core/src/indicators/td_clopwin.rs index d7def7bc..98015fc1 100644 --- a/crates/wickra-core/src/indicators/td_clopwin.rs +++ b/crates/wickra-core/src/indicators/td_clopwin.rs @@ -19,6 +19,21 @@ use crate::ohlcv::Candle; use crate::traits::Indicator; /// TD Clopwin — 2-bar inside-body compression pattern detector. +/// # Example +/// +/// ``` +/// use wickra_core::{TdClopwin, Candle, Indicator}; +/// +/// let mut indicator = TdClopwin::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone, Default)] pub struct TdClopwin { prev: Option, diff --git a/crates/wickra-core/src/indicators/td_combo.rs b/crates/wickra-core/src/indicators/td_combo.rs index edfa600c..585b9d58 100644 --- a/crates/wickra-core/src/indicators/td_combo.rs +++ b/crates/wickra-core/src/indicators/td_combo.rs @@ -38,6 +38,21 @@ enum Direction { } /// TD Combo — aggressive countdown variant. +/// # Example +/// +/// ``` +/// use wickra_core::{TdCombo, Candle, Indicator}; +/// +/// let mut indicator = TdCombo::new(4, 9, 2, 13).unwrap(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct TdCombo { setup_lookback: usize, diff --git a/crates/wickra-core/src/indicators/td_countdown.rs b/crates/wickra-core/src/indicators/td_countdown.rs index 75babf04..7e01f167 100644 --- a/crates/wickra-core/src/indicators/td_countdown.rs +++ b/crates/wickra-core/src/indicators/td_countdown.rs @@ -41,6 +41,21 @@ enum Direction { } /// TD Countdown — standalone 13-bar countdown. +/// # Example +/// +/// ``` +/// use wickra_core::{TdCountdown, Candle, Indicator}; +/// +/// let mut indicator = TdCountdown::new(4, 9, 2, 13).unwrap(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct TdCountdown { setup_lookback: usize, diff --git a/crates/wickra-core/src/indicators/td_differential.rs b/crates/wickra-core/src/indicators/td_differential.rs index 7f5f33ec..ff74ce50 100644 --- a/crates/wickra-core/src/indicators/td_differential.rs +++ b/crates/wickra-core/src/indicators/td_differential.rs @@ -24,6 +24,21 @@ use crate::ohlcv::Candle; use crate::traits::Indicator; /// TD Differential — 2-bar reversal pattern detector. +/// # Example +/// +/// ``` +/// use wickra_core::{TdDifferential, Candle, Indicator}; +/// +/// let mut indicator = TdDifferential::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone, Default)] pub struct TdDifferential { prev: Option, diff --git a/crates/wickra-core/src/indicators/td_lines.rs b/crates/wickra-core/src/indicators/td_lines.rs index 6fbddfc1..d2192ec3 100644 --- a/crates/wickra-core/src/indicators/td_lines.rs +++ b/crates/wickra-core/src/indicators/td_lines.rs @@ -42,6 +42,21 @@ pub struct TdLinesOutput { } /// TD Lines (TDST) — setup-derived horizontal support / resistance. +/// # Example +/// +/// ``` +/// use wickra_core::{TdLines, Candle, Indicator}; +/// +/// let mut indicator = TdLines::new(4, 9).unwrap(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct TdLines { lookback: usize, diff --git a/crates/wickra-core/src/indicators/td_open.rs b/crates/wickra-core/src/indicators/td_open.rs index 9decc867..a3f6a368 100644 --- a/crates/wickra-core/src/indicators/td_open.rs +++ b/crates/wickra-core/src/indicators/td_open.rs @@ -21,6 +21,21 @@ use crate::ohlcv::Candle; use crate::traits::Indicator; /// TD Open — gap-and-fade reversal detector. +/// # Example +/// +/// ``` +/// use wickra_core::{TdOpen, Candle, Indicator}; +/// +/// let mut indicator = TdOpen::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone, Default)] pub struct TdOpen { prev: Option, diff --git a/crates/wickra-core/src/indicators/td_propulsion.rs b/crates/wickra-core/src/indicators/td_propulsion.rs index 189917e1..f941adfe 100644 --- a/crates/wickra-core/src/indicators/td_propulsion.rs +++ b/crates/wickra-core/src/indicators/td_propulsion.rs @@ -17,6 +17,21 @@ use crate::ohlcv::Candle; use crate::traits::Indicator; /// TD Propulsion — 2-bar trend-continuation thrust detector. +/// # Example +/// +/// ``` +/// use wickra_core::{TdPropulsion, Candle, Indicator}; +/// +/// let mut indicator = TdPropulsion::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone, Default)] pub struct TdPropulsion { prev: Option, diff --git a/crates/wickra-core/src/indicators/td_risk_level.rs b/crates/wickra-core/src/indicators/td_risk_level.rs index daab9cf6..0403e044 100644 --- a/crates/wickra-core/src/indicators/td_risk_level.rs +++ b/crates/wickra-core/src/indicators/td_risk_level.rs @@ -50,6 +50,21 @@ struct ExtremeBar { } /// TD Risk Level — setup-derived protective-stop levels. +/// # Example +/// +/// ``` +/// use wickra_core::{TdRiskLevel, Candle, Indicator}; +/// +/// let mut indicator = TdRiskLevel::new(4, 9).unwrap(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct TdRiskLevel { lookback: usize, diff --git a/crates/wickra-core/src/indicators/td_sequential.rs b/crates/wickra-core/src/indicators/td_sequential.rs index bedd9a0e..9016190b 100644 --- a/crates/wickra-core/src/indicators/td_sequential.rs +++ b/crates/wickra-core/src/indicators/td_sequential.rs @@ -58,6 +58,21 @@ pub struct TdSequentialOutput { } /// TD Sequential state machine: combined Setup (1-9) + Countdown (1-13). +/// # Example +/// +/// ``` +/// use wickra_core::{TdSequential, Candle, Indicator}; +/// +/// let mut indicator = TdSequential::new(4, 9, 2, 13).unwrap(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct TdSequential { // Rolling window of recent candles. We need up to 5 closes back (for the diff --git a/crates/wickra-core/src/indicators/td_setup.rs b/crates/wickra-core/src/indicators/td_setup.rs index 3c5a3837..40da33d1 100644 --- a/crates/wickra-core/src/indicators/td_setup.rs +++ b/crates/wickra-core/src/indicators/td_setup.rs @@ -33,6 +33,21 @@ use crate::traits::Indicator; /// TD Setup state machine: counts consecutive bars meeting DeMark's setup /// comparison rule against the close `lookback` bars earlier. +/// # Example +/// +/// ``` +/// use wickra_core::{TdSetup, Candle, Indicator}; +/// +/// let mut indicator = TdSetup::new(4, 9).unwrap(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone)] pub struct TdSetup { lookback: usize, diff --git a/crates/wickra-core/src/indicators/td_trap.rs b/crates/wickra-core/src/indicators/td_trap.rs index 9a8188ec..68948ffe 100644 --- a/crates/wickra-core/src/indicators/td_trap.rs +++ b/crates/wickra-core/src/indicators/td_trap.rs @@ -19,6 +19,21 @@ use crate::ohlcv::Candle; use crate::traits::Indicator; /// TD Trap — inside-bar breakout signal detector. +/// # Example +/// +/// ``` +/// use wickra_core::{TdTrap, Candle, Indicator}; +/// +/// let mut indicator = TdTrap::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone, Default)] pub struct TdTrap { prev1: Option, diff --git a/crates/wickra-core/src/indicators/tower_top_bottom.rs b/crates/wickra-core/src/indicators/tower_top_bottom.rs index 436e558c..2e46887d 100644 --- a/crates/wickra-core/src/indicators/tower_top_bottom.rs +++ b/crates/wickra-core/src/indicators/tower_top_bottom.rs @@ -37,6 +37,21 @@ fn is_small(candle: Candle) -> bool { } /// Tower Top / Bottom — three-bar reversal detector. +/// # Example +/// +/// ``` +/// use wickra_core::{TowerTopBottom, Candle, Indicator}; +/// +/// let mut indicator = TowerTopBottom::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone, Default)] pub struct TowerTopBottom { c1: Option, diff --git a/crates/wickra-core/src/indicators/tristar.rs b/crates/wickra-core/src/indicators/tristar.rs index 6d43077d..86d298b0 100644 --- a/crates/wickra-core/src/indicators/tristar.rs +++ b/crates/wickra-core/src/indicators/tristar.rs @@ -30,6 +30,21 @@ fn is_doji(candle: Candle) -> bool { } /// Tristar — three-doji star reversal detector. +/// # Example +/// +/// ``` +/// use wickra_core::{Tristar, Candle, Indicator}; +/// +/// let mut indicator = Tristar::new(); +/// // `None` during warmup, then `Some(_)` once enough bars are seen. +/// let mut out = None; +/// for i in 0..40i64 { +/// let p = 100.0 + (i as f64 * 0.4).sin() * 5.0; +/// let candle = Candle::new(p, p + 1.5, p - 1.5, p + 0.3, 1_000.0, i).unwrap(); +/// out = indicator.update(candle); +/// } +/// let _ = out; +/// ``` #[derive(Debug, Clone, Default)] pub struct Tristar { c1: Option,