pub struct AdvancedZigZagEngine { /* private fields */ }Expand description
Advanced ZigZag engine with backstep, ATR-mode deviation, and explicit confirmation status.
Over the last 2 · depth + 1 bars the middle bar is a pivot high when no other high is above
its own and a pivot low when no other low is below its own; ties count, and one bar can be
both. A pivot of the same kind as the running (unconfirmed) node — or the very first pivot —
extends the leg: the running node moves to it if it is more extreme, and a first pivot starts
one. A pivot of the other kind confirms the running node and starts a new running node at its
own price, once its change from the running node reaches the deviation threshold and the pivot
bar lies at least backstep bars after the pivot bar of the last confirmation (checked once
per bar, before either pivot is applied). Each confirmation raises a zigzag_pivot_confirmed
alert.
In ZigZagDeviationMode::Percent the relative change |price - running| / |running| must
reach pct / 100. In ZigZagDeviationMode::AtrMultiple the price distance
|price - running| must reach mult · ATR, a Wilder ATR of the true range over atr_len as
of the current bar; nothing confirms before the ATR exists.
value: the price of the newest node, or the middle bar’s close before any; state:
"running" while the newest node is unconfirmed, "confirmed" otherwise. First output with
bar 2 · depth + 1.
Implementations§
Source§impl AdvancedZigZagEngine
impl AdvancedZigZagEngine
pub fn new( depth: usize, backstep: usize, deviation: ZigZagDeviationMode, atr_len: usize, ) -> Self
pub fn with_defaults() -> Self
Sourcepub fn nodes(&self) -> &[ZigZagNode]
pub fn nodes(&self) -> &[ZigZagNode]
Confirmed swing history, oldest first.
Sourcepub fn current_leg(&self) -> Option<&ZigZagNode>
pub fn current_leg(&self) -> Option<&ZigZagNode>
The still-forming leg’s current extreme, if any (may not yet be in Self::nodes or may
be the unconfirmed last entry there).
Sourcepub fn reduce(nodes: &[ZigZagNode], deviation_pct: f64) -> Vec<ZigZagNode>
pub fn reduce(nodes: &[ZigZagNode], deviation_pct: f64) -> Vec<ZigZagNode>
Recursively re-simplifies an already-reduced node sequence at a coarser deviation threshold, the “dual-/recursive levels” swing-degree technique: apply the same alternating-extreme simplification to the higher-degree input instead of raw bars.
Sourcepub fn project_to_timeframe(
nodes: &[ZigZagNode],
target_tf: Timeframe,
utc_offset_seconds: i32,
) -> Vec<ZigZagNode>
pub fn project_to_timeframe( nodes: &[ZigZagNode], target_tf: Timeframe, utc_offset_seconds: i32, ) -> Vec<ZigZagNode>
Projects a node sequence onto a higher timeframe’s bucket grid, keeping only the most extreme high/low node per bucket per side — the confirmed HTF-equivalent swing points an LTF zigzag implies.
Trait Implementations§
Source§impl Indicator for AdvancedZigZagEngine
impl Indicator for AdvancedZigZagEngine
fn name(&self) -> &str
fn warmup_period(&self) -> usize
fn reset(&mut self)
fn on_bar(&mut self, bar: &Bar) -> Option<IndicatorOutput>
fn alerts(&self) -> Vec<IndicatorAlert>
Source§fn on_checked_bar(
&mut self,
bar: &Bar,
) -> Result<Option<IndicatorOutput>, BarValidationError>
fn on_checked_bar( &mut self, bar: &Bar, ) -> Result<Option<IndicatorOutput>, BarValidationError>
Indicator::on_bar.