* feat(family-08): add Classic, Fibonacci, Camarilla, Woodie and DeMark pivots + Williams Fractals + ZigZag
Seven new indicators land the previously empty Pivots & S/R family
(family 08), each implemented in wickra-core with the full Indicator
trait surface (update / reset / warmup_period / is_ready / name),
exposed across Python (PyO3), Node (napi-rs) and WASM (wasm-bindgen)
with the standard streaming + batch APIs, and covered by Rust unit
tests, Python streaming-vs-batch + reference-value tests, Node
streaming-vs-batch tests, the candle-input fuzz target and Rust
microbenchmarks.
- ClassicPivots (7 levels): PP = (H+L+C)/3, three R/S tiers per the
floor-trader formulas.
- FibonacciPivots (7 levels): PP plus R/S spaced by 0.382 / 0.618 /
1.000 of the prior range.
- Camarilla (9 levels): Nick Stott's four-tier `C +/- (H - L) * 1.1 /
{12, 6, 4, 2}` levels.
- WoodiePivots (5 levels): close-weighted PP = (H + L + 2*C) / 4 plus
two R/S tiers.
- DemarkPivots (3 levels): conditional X sum based on the previous
bar's open-vs-close relationship.
- WilliamsFractals: five-bar swing detector emitting optional up/down
fractal prices at the centre of each window.
- ZigZag: percent-threshold swing tracker, non-repainting; emits the
just-completed extreme and direction on confirmed reversals only.
README family table updated to nine families / 78 indicators;
CHANGELOG records the family-08 addition under [Unreleased].
* fix(family-08 tests): unify MULTI dict to 3-tuple (factory, batch_call, k)
The HEAD-side family-08 test parametrised MULTI[name] as
`(factory, batch_call, output_arity)` so that pivots with arity 3/5/7/9
fit the same harness. Main's entries arrived as 2-tuples; convert them
all to the 3-tuple shape so `make, batch_call, k = MULTI[name]` unpacks
cleanly. Lifecycle test now indexes the tuple instead of destructuring.
* test(zig_zag): tighten flat-oscillation test (drop dead counter branch)
The previous version of `small_oscillations_yield_no_swings` counted
emitted swings, but the assertion proves the counter never increments
so codecov flagged `emitted += 1` as uncovered. Switch to a per-bar
`assert!(...is_none())` — same coverage of the no-swing path, no dead
branch.
278 lines
7.1 KiB
Rust
278 lines
7.1 KiB
Rust
//! Built-in indicators. Every indicator implements [`crate::Indicator`].
|
|
//!
|
|
//! Modules are organised internally by category (trend, momentum, volatility,
|
|
//! volume) but every public name is also re-exported flat from this module and
|
|
//! from the crate root for convenience.
|
|
|
|
mod acceleration_bands;
|
|
mod accelerator_oscillator;
|
|
mod ad_oscillator;
|
|
mod adl;
|
|
mod adx;
|
|
mod adxr;
|
|
mod alligator;
|
|
mod alma;
|
|
mod anchored_vwap;
|
|
mod apo;
|
|
mod aroon;
|
|
mod aroon_oscillator;
|
|
mod atr;
|
|
mod atr_bands;
|
|
mod atr_trailing_stop;
|
|
mod awesome_oscillator;
|
|
mod awesome_oscillator_histogram;
|
|
mod balance_of_power;
|
|
mod bollinger;
|
|
mod bollinger_bandwidth;
|
|
mod camarilla_pivots;
|
|
mod cci;
|
|
mod cfo;
|
|
mod chaikin_oscillator;
|
|
mod chaikin_volatility;
|
|
mod chande_kroll_stop;
|
|
mod chandelier_exit;
|
|
mod choppiness_index;
|
|
mod classic_pivots;
|
|
mod cmf;
|
|
mod cmo;
|
|
mod connors_rsi;
|
|
mod coppock;
|
|
mod dema;
|
|
mod demand_index;
|
|
mod demark_pivots;
|
|
mod donchian;
|
|
mod donchian_stop;
|
|
mod double_bollinger;
|
|
mod dpo;
|
|
mod ease_of_movement;
|
|
mod elder_impulse;
|
|
mod ema;
|
|
mod evwma;
|
|
mod fibonacci_pivots;
|
|
mod force_index;
|
|
mod fractal_chaos_bands;
|
|
mod frama;
|
|
mod garman_klass;
|
|
mod hilo_activator;
|
|
mod historical_volatility;
|
|
mod hma;
|
|
mod hurst_channel;
|
|
mod inertia;
|
|
mod jma;
|
|
mod kama;
|
|
mod keltner;
|
|
mod kst;
|
|
mod kvo;
|
|
mod laguerre_rsi;
|
|
mod linreg;
|
|
mod linreg_angle;
|
|
mod linreg_channel;
|
|
mod linreg_slope;
|
|
mod ma_envelope;
|
|
mod macd;
|
|
mod market_facilitation_index;
|
|
mod mass_index;
|
|
mod mcginley_dynamic;
|
|
mod median_price;
|
|
mod mfi;
|
|
mod mom;
|
|
mod natr;
|
|
mod nvi;
|
|
mod obv;
|
|
mod parkinson;
|
|
mod percent_b;
|
|
mod percentage_trailing_stop;
|
|
mod pgo;
|
|
mod pmo;
|
|
mod ppo;
|
|
mod psar;
|
|
mod pvi;
|
|
mod renko_trailing_stop;
|
|
mod roc;
|
|
mod rogers_satchell;
|
|
mod rsi;
|
|
mod rvi;
|
|
mod rvi_volatility;
|
|
mod rwi;
|
|
mod sma;
|
|
mod smi;
|
|
mod smma;
|
|
mod standard_error_bands;
|
|
mod starc_bands;
|
|
mod stc;
|
|
mod std_dev;
|
|
mod step_trailing_stop;
|
|
mod stoch_rsi;
|
|
mod stochastic;
|
|
mod super_trend;
|
|
mod t3;
|
|
mod tema;
|
|
mod tii;
|
|
mod trima;
|
|
mod trix;
|
|
mod true_range;
|
|
mod tsi;
|
|
mod tsv;
|
|
mod ttm_squeeze;
|
|
mod typical_price;
|
|
mod ulcer_index;
|
|
mod ultimate_oscillator;
|
|
mod vertical_horizontal_filter;
|
|
mod vidya;
|
|
mod volty_stop;
|
|
mod volume_oscillator;
|
|
mod vortex;
|
|
mod vpt;
|
|
mod vwap;
|
|
mod vwap_stddev_bands;
|
|
mod vwma;
|
|
mod vzo;
|
|
mod wave_trend;
|
|
mod weighted_close;
|
|
mod williams_fractals;
|
|
mod williams_r;
|
|
mod wma;
|
|
mod woodie_pivots;
|
|
mod yang_zhang;
|
|
mod yoyo_exit;
|
|
mod z_score;
|
|
mod zero_lag_macd;
|
|
mod zig_zag;
|
|
mod zlema;
|
|
|
|
pub use acceleration_bands::{AccelerationBands, AccelerationBandsOutput};
|
|
pub use accelerator_oscillator::AcceleratorOscillator;
|
|
pub use ad_oscillator::AdOscillator;
|
|
pub use adl::Adl;
|
|
pub use adx::{Adx, AdxOutput};
|
|
pub use adxr::Adxr;
|
|
pub use alligator::{Alligator, AlligatorOutput};
|
|
pub use alma::Alma;
|
|
pub use anchored_vwap::AnchoredVwap;
|
|
pub use apo::Apo;
|
|
pub use aroon::{Aroon, AroonOutput};
|
|
pub use aroon_oscillator::AroonOscillator;
|
|
pub use atr::Atr;
|
|
pub use atr_bands::{AtrBands, AtrBandsOutput};
|
|
pub use atr_trailing_stop::AtrTrailingStop;
|
|
pub use awesome_oscillator::AwesomeOscillator;
|
|
pub use awesome_oscillator_histogram::AwesomeOscillatorHistogram;
|
|
pub use balance_of_power::BalanceOfPower;
|
|
pub use bollinger::{BollingerBands, BollingerOutput};
|
|
pub use bollinger_bandwidth::BollingerBandwidth;
|
|
pub use camarilla_pivots::{Camarilla, CamarillaPivotsOutput};
|
|
pub use cci::Cci;
|
|
pub use cfo::Cfo;
|
|
pub use chaikin_oscillator::ChaikinOscillator;
|
|
pub use chaikin_volatility::ChaikinVolatility;
|
|
pub use chande_kroll_stop::{ChandeKrollStop, ChandeKrollStopOutput};
|
|
pub use chandelier_exit::{ChandelierExit, ChandelierExitOutput};
|
|
pub use choppiness_index::ChoppinessIndex;
|
|
pub use classic_pivots::{ClassicPivots, ClassicPivotsOutput};
|
|
pub use cmf::ChaikinMoneyFlow;
|
|
pub use cmo::Cmo;
|
|
pub use connors_rsi::ConnorsRsi;
|
|
pub use coppock::Coppock;
|
|
pub use dema::Dema;
|
|
pub use demand_index::DemandIndex;
|
|
pub use demark_pivots::{DemarkPivots, DemarkPivotsOutput};
|
|
pub use donchian::{Donchian, DonchianOutput};
|
|
pub use donchian_stop::{DonchianStop, DonchianStopOutput};
|
|
pub use double_bollinger::{DoubleBollinger, DoubleBollingerOutput};
|
|
pub use dpo::Dpo;
|
|
pub use ease_of_movement::EaseOfMovement;
|
|
pub use elder_impulse::ElderImpulse;
|
|
pub use ema::Ema;
|
|
pub use evwma::Evwma;
|
|
pub use fibonacci_pivots::{FibonacciPivots, FibonacciPivotsOutput};
|
|
pub use force_index::ForceIndex;
|
|
pub use fractal_chaos_bands::{FractalChaosBands, FractalChaosBandsOutput};
|
|
pub use frama::Frama;
|
|
pub use garman_klass::GarmanKlassVolatility;
|
|
pub use hilo_activator::HiLoActivator;
|
|
pub use historical_volatility::HistoricalVolatility;
|
|
pub use hma::Hma;
|
|
pub use hurst_channel::{HurstChannel, HurstChannelOutput};
|
|
pub use inertia::Inertia;
|
|
pub use jma::Jma;
|
|
pub use kama::Kama;
|
|
pub use keltner::{Keltner, KeltnerOutput};
|
|
pub use kst::{Kst, KstOutput};
|
|
pub use kvo::Kvo;
|
|
pub use laguerre_rsi::LaguerreRsi;
|
|
pub use linreg::LinearRegression;
|
|
pub use linreg_angle::LinRegAngle;
|
|
pub use linreg_channel::{LinRegChannel, LinRegChannelOutput};
|
|
pub use linreg_slope::LinRegSlope;
|
|
pub use ma_envelope::{MaEnvelope, MaEnvelopeOutput};
|
|
pub use macd::{MacdIndicator, MacdOutput};
|
|
pub use market_facilitation_index::MarketFacilitationIndex;
|
|
pub use mass_index::MassIndex;
|
|
pub use mcginley_dynamic::McGinleyDynamic;
|
|
pub use median_price::MedianPrice;
|
|
pub use mfi::Mfi;
|
|
pub use mom::Mom;
|
|
pub use natr::Natr;
|
|
pub use nvi::Nvi;
|
|
pub use obv::Obv;
|
|
pub use parkinson::ParkinsonVolatility;
|
|
pub use percent_b::PercentB;
|
|
pub use percentage_trailing_stop::PercentageTrailingStop;
|
|
pub use pgo::Pgo;
|
|
pub use pmo::Pmo;
|
|
pub use ppo::Ppo;
|
|
pub use psar::Psar;
|
|
pub use pvi::Pvi;
|
|
pub use renko_trailing_stop::RenkoTrailingStop;
|
|
pub use roc::Roc;
|
|
pub use rogers_satchell::RogersSatchellVolatility;
|
|
pub use rsi::Rsi;
|
|
pub use rvi::Rvi;
|
|
pub use rvi_volatility::RviVolatility;
|
|
pub use rwi::{Rwi, RwiOutput};
|
|
pub use sma::Sma;
|
|
pub use smi::Smi;
|
|
pub use smma::Smma;
|
|
pub use standard_error_bands::{StandardErrorBands, StandardErrorBandsOutput};
|
|
pub use starc_bands::{StarcBands, StarcBandsOutput};
|
|
pub use stc::Stc;
|
|
pub use std_dev::StdDev;
|
|
pub use step_trailing_stop::StepTrailingStop;
|
|
pub use stoch_rsi::StochRsi;
|
|
pub use stochastic::{Stochastic, StochasticOutput};
|
|
pub use super_trend::{SuperTrend, SuperTrendOutput};
|
|
pub use t3::T3;
|
|
pub use tema::Tema;
|
|
pub use tii::Tii;
|
|
pub use trima::Trima;
|
|
pub use trix::Trix;
|
|
pub use true_range::TrueRange;
|
|
pub use tsi::Tsi;
|
|
pub use tsv::Tsv;
|
|
pub use ttm_squeeze::{TtmSqueeze, TtmSqueezeOutput};
|
|
pub use typical_price::TypicalPrice;
|
|
pub use ulcer_index::UlcerIndex;
|
|
pub use ultimate_oscillator::UltimateOscillator;
|
|
pub use vertical_horizontal_filter::VerticalHorizontalFilter;
|
|
pub use vidya::Vidya;
|
|
pub use volty_stop::VoltyStop;
|
|
pub use volume_oscillator::VolumeOscillator;
|
|
pub use vortex::{Vortex, VortexOutput};
|
|
pub use vpt::VolumePriceTrend;
|
|
pub use vwap::{RollingVwap, Vwap};
|
|
pub use vwap_stddev_bands::{VwapStdDevBands, VwapStdDevBandsOutput};
|
|
pub use vwma::Vwma;
|
|
pub use vzo::Vzo;
|
|
pub use wave_trend::{WaveTrend, WaveTrendOutput};
|
|
pub use weighted_close::WeightedClose;
|
|
pub use williams_fractals::{WilliamsFractals, WilliamsFractalsOutput};
|
|
pub use williams_r::WilliamsR;
|
|
pub use wma::Wma;
|
|
pub use woodie_pivots::{WoodiePivots, WoodiePivotsOutput};
|
|
pub use yang_zhang::YangZhangVolatility;
|
|
pub use yoyo_exit::YoyoExit;
|
|
pub use z_score::ZScore;
|
|
pub use zero_lag_macd::{ZeroLagMacd, ZeroLagMacdOutput};
|
|
pub use zig_zag::{ZigZag, ZigZagOutput};
|
|
pub use zlema::Zlema;
|