//! Built-in indicators. Every indicator implements [`crate::Indicator`]. //! //! Modules are listed alphabetically; the canonical family taxonomy lives in //! [`FAMILIES`]. Every public name is re-exported flat from this module and //! from the crate root for convenience. // Internal shared building block for the chart- and harmonic-pattern detectors. // Declared `pub(crate)` (not `mod`) so it is excluded from the public-catalogue // counter (`grep -c '^mod '`) and re-exported nowhere. pub(crate) mod pattern_swing; mod abandoned_baby; mod abcd; mod absolute_breadth_index; mod acceleration_bands; mod accelerator_oscillator; mod ad_oscillator; mod ad_volume_line; mod adaptive_cci; mod adaptive_cycle; mod adaptive_laguerre_filter; mod adaptive_rsi; mod adl; mod advance_block; mod advance_decline; mod advance_decline_ratio; mod adx; mod adxr; mod alligator; mod alma; mod alpha; mod amihud_illiquidity; mod anchored_rsi; mod anchored_vwap; mod andrews_pitchfork; mod apo; mod aroon; mod aroon_oscillator; mod atr; mod atr_bands; mod atr_ratchet; mod atr_trailing_stop; mod auto_fib; mod autocorrelation; mod autocorrelation_periodogram; mod average_daily_range; mod average_drawdown; mod avg_price; mod awesome_oscillator; mod awesome_oscillator_histogram; mod balance_of_power; mod bandpass_filter; mod bat; mod belt_hold; mod beta; mod beta_neutral_spread; mod better_volume; mod bipower_variation; mod body_size_pct; mod bollinger; mod bollinger_bandwidth; mod bomar_bands; mod breadth_thrust; mod breakaway; mod bullish_percent_index; mod butterfly; mod calendar_spread; mod calmar_ratio; mod camarilla_pivots; mod candle_volume; mod cci; mod center_of_gravity; mod central_pivot_range; mod cfo; mod chaikin_oscillator; mod chaikin_volatility; mod chande_kroll_stop; mod chandelier_exit; mod choppiness_index; mod classic_pivots; mod close_vs_open; mod closing_marubozu; mod cmf; mod cmo; mod coefficient_of_variation; mod cointegration; mod concealing_baby_swallow; mod conditional_value_at_risk; mod connors_rsi; mod coppock; mod correlation_trend_indicator; mod counterattack; mod crab; mod cumulative_volume_index; mod cup_and_handle; mod cvd; mod cybernetic_cycle; mod cypher; mod day_of_week_profile; mod decycler; mod decycler_oscillator; mod dema; mod demand_index; mod demark_pivots; mod depth_slope; mod derivative_oscillator; mod detrended_std_dev; mod disparity_index; mod distance_ssd; mod doji; mod doji_star; mod donchian; mod donchian_stop; mod double_bollinger; mod double_top_bottom; mod downside_gap_three_methods; mod dpo; mod dragonfly_doji; mod drawdown_duration; mod dumpling_top; mod dx; mod dynamic_momentum_index; mod ease_of_movement; mod effective_spread; mod ehlers_stochastic; mod ehma; mod elder_impulse; mod elder_ray; mod elder_safezone; mod ema; mod empirical_mode_decomposition; mod engulfing; mod equivolume; mod estimated_leverage_ratio; mod even_better_sinewave; mod evening_doji_star; mod evwma; mod ewma_volatility; mod expectancy; mod falling_three_methods; mod fama; mod fib_arcs; mod fib_channel; mod fib_confluence; mod fib_extension; mod fib_fan; mod fib_projection; mod fib_retracement; mod fib_time_zones; mod fibonacci_pivots; mod fisher_rsi; mod fisher_transform; mod flag_pennant; mod footprint; mod force_index; mod fractal_chaos_bands; mod frama; mod fry_pan_bottom; mod funding_basis; mod funding_implied_apr; mod funding_rate; mod funding_rate_mean; mod funding_rate_zscore; mod gain_loss_ratio; mod gap_side_by_side_white; mod garch11; mod garman_klass; mod gartley; mod gator_oscillator; mod generalized_dema; mod geometric_ma; mod golden_pocket; mod granger_causality; mod gravestone_doji; mod hammer; mod hanging_man; mod harami; mod harami_cross; mod hasbrouck_information_share; mod head_and_shoulders; mod heikin_ashi; mod heikin_ashi_oscillator; mod high_low_index; mod high_low_range; mod high_wave; mod highpass_filter; mod hikkake; mod hikkake_modified; mod hilbert_dominant_cycle; mod hilo_activator; mod historical_volatility; mod hma; mod holt_winters; mod homing_pigeon; mod ht_dcphase; mod ht_phasor; mod ht_trendmode; mod hurst_channel; mod hurst_exponent; mod ichimoku; mod identical_three_crows; mod in_neck; mod inertia; mod information_ratio; mod initial_balance; mod instantaneous_trendline; mod intraday_intensity; mod intraday_momentum_index; mod intraday_volatility_profile; mod inverse_fisher_transform; mod inverted_hammer; mod jarque_bera; mod jma; mod jump_indicator; mod kagi_bars; mod kalman_hedge_ratio; mod kama; mod kase_devstop; mod kase_permission_stochastic; mod kelly_criterion; mod keltner; mod kendall_tau; mod kicking; mod kicking_by_length; mod kst; mod kurtosis; mod kvo; mod kyles_lambda; mod ladder_bottom; mod laguerre_rsi; mod lead_lag_cross_correlation; mod linreg; mod linreg_angle; mod linreg_channel; mod linreg_intercept; mod linreg_slope; mod liquidation_features; mod log_return; mod long_legged_doji; mod long_line; mod long_short_ratio; mod ma_envelope; mod macd; mod macd_ext; mod macd_fix; mod macd_histogram; mod mama; mod market_facilitation_index; mod marubozu; mod mass_index; mod mat_hold; mod matching_low; mod max_drawdown; mod mcclellan_oscillator; mod mcclellan_summation_index; mod mcginley_dynamic; mod median_absolute_deviation; mod median_channel; mod median_ma; mod median_price; mod mfi; mod microprice; mod mid_point; mod mid_price; mod minus_di; mod minus_dm; mod modified_ma_stop; mod mom; mod morning_doji_star; mod morning_evening_star; mod murrey_math_lines; mod natr; mod new_highs_new_lows; mod new_price_lines; mod nrtr; mod nvi; mod ob_imbalance_full; mod ob_imbalance_top1; mod ob_imbalance_topn; mod obv; mod oi_delta; mod oi_price_divergence; mod oi_to_volume_ratio; mod oi_weighted; mod omega_ratio; mod on_neck; mod open_interest_momentum; mod opening_marubozu; mod opening_range; mod order_flow_imbalance; mod ou_half_life; mod overnight_gap; mod overnight_intraday_return; mod pain_index; mod pair_spread_zscore; mod pairwise_beta; mod parkinson; mod pearson_correlation; mod percent_above_ma; mod percent_b; mod percentage_trailing_stop; mod perpetual_premium_index; mod pgo; mod piercing_dark_cloud; mod pin; mod pivot_reversal; mod plus_di; mod plus_dm; mod pmo; mod point_and_figure_bars; mod polarized_fractal_efficiency; mod ppo; mod ppo_histogram; mod profit_factor; mod projection_bands; mod projection_oscillator; mod psar; mod pvi; mod qqe; mod qstick; mod quartile_bands; mod quoted_spread; mod r_squared; mod realized_spread; mod realized_volatility; mod recovery_factor; mod rectangle_range; mod reflex; mod regime_label; mod relative_strength_ab; mod renko_bars; mod renko_trailing_stop; mod rickshaw_man; mod rising_three_methods; mod rmi; mod roc; mod rocp; mod rocr; mod rocr100; mod rogers_satchell; mod roll_measure; mod rolling_correlation; mod rolling_covariance; mod rolling_iqr; mod rolling_min_max_scaler; mod rolling_percentile_rank; mod rolling_quantile; mod roofing_filter; mod rsi; mod rsx; mod rvi; mod rvi_volatility; mod rwi; mod sample_entropy; mod sar_ext; mod seasonal_z_score; mod separating_lines; mod session_high_low; mod session_range; mod session_vwap; mod shannon_entropy; mod shark; mod sharpe_ratio; mod shooting_star; mod short_line; mod signed_volume; mod sine_wave; mod sine_weighted_ma; mod skewness; mod sma; mod smi; mod smma; mod smoothed_heikin_ashi; mod sortino_ratio; mod spearman_correlation; mod spinning_top; mod spread_ar1_coefficient; mod spread_bollinger_bands; mod spread_hurst; mod stalled_pattern; mod standard_error; mod standard_error_bands; mod starc_bands; mod stc; mod std_dev; mod step_trailing_stop; mod stick_sandwich; mod stoch_rsi; mod stochastic; mod stochastic_cci; mod super_smoother; mod super_trend; mod t3; mod taker_buy_sell_ratio; mod takuri; mod tasuki_gap; mod td_camouflage; mod td_clop; mod td_clopwin; mod td_combo; mod td_countdown; mod td_demarker; mod td_differential; mod td_dwave; mod td_lines; mod td_moving_average; mod td_open; mod td_pressure; mod td_propulsion; mod td_range_projection; mod td_rei; mod td_risk_level; mod td_sequential; mod td_setup; mod td_trap; mod tema; mod term_structure_basis; mod three_drives; mod three_inside; mod three_line_break; mod three_line_strike; mod three_outside; mod three_soldiers_or_crows; mod three_stars_in_south; mod thrusting; mod tick_index; mod tii; mod time_based_stop; mod time_of_day_return_profile; mod tower_top_bottom; mod tpo_profile; mod trade_imbalance; mod trade_sign_autocorrelation; mod trade_volume_index; mod trend_label; mod trend_strength_index; mod trendflex; mod treynor_ratio; mod triangle; mod trima; mod trin; mod triple_top_bottom; mod tristar; mod trix; mod true_range; mod tsf; mod tsf_oscillator; mod tsi; mod tsv; mod ttm_squeeze; mod ttm_trend; mod turn_of_month; mod tweezer; mod twiggs_money_flow; mod two_crows; mod typical_price; mod ulcer_index; mod ultimate_oscillator; mod unique_three_river; mod universal_oscillator; mod up_down_volume_ratio; mod upside_gap_three_methods; mod upside_gap_two_crows; mod value_area; mod value_at_risk; mod variance; mod variance_ratio; mod vertical_horizontal_filter; mod vidya; mod volatility_cone; mod volatility_of_volatility; mod volatility_ratio; mod volty_stop; mod volume_by_time_profile; mod volume_oscillator; mod volume_profile; mod volume_rsi; mod volume_weighted_macd; mod volume_weighted_sr; mod vortex; mod vpin; mod vpt; mod vwap; mod vwap_stddev_bands; mod vwma; mod vzo; mod wad; mod wave_pm; mod wave_trend; mod wedge; mod weighted_close; mod wick_ratio; mod williams_fractals; mod williams_r; mod win_rate; 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 abandoned_baby::AbandonedBaby; pub use abcd::Abcd; pub use absolute_breadth_index::AbsoluteBreadthIndex; pub use acceleration_bands::{AccelerationBands, AccelerationBandsOutput}; pub use accelerator_oscillator::AcceleratorOscillator; pub use ad_oscillator::AdOscillator; pub use ad_volume_line::AdVolumeLine; pub use adaptive_cci::AdaptiveCci; pub use adaptive_cycle::AdaptiveCycle; pub use adaptive_laguerre_filter::AdaptiveLaguerreFilter; pub use adaptive_rsi::AdaptiveRsi; pub use adl::Adl; pub use advance_block::AdvanceBlock; pub use advance_decline::AdvanceDecline; pub use advance_decline_ratio::AdvanceDeclineRatio; pub use adx::{Adx, AdxOutput}; pub use adxr::Adxr; pub use alligator::{Alligator, AlligatorOutput}; pub use alma::Alma; pub use alpha::Alpha; pub use amihud_illiquidity::AmihudIlliquidity; pub use anchored_rsi::AnchoredRsi; pub use anchored_vwap::AnchoredVwap; pub use andrews_pitchfork::{AndrewsPitchfork, AndrewsPitchforkOutput}; 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_ratchet::{AtrRatchet, AtrRatchetOutput}; pub use atr_trailing_stop::AtrTrailingStop; pub use auto_fib::{AutoFib, AutoFibOutput}; pub use autocorrelation::Autocorrelation; pub use autocorrelation_periodogram::AutocorrelationPeriodogram; pub use average_daily_range::AverageDailyRange; pub use average_drawdown::AverageDrawdown; pub use avg_price::AvgPrice; pub use awesome_oscillator::AwesomeOscillator; pub use awesome_oscillator_histogram::AwesomeOscillatorHistogram; pub use balance_of_power::BalanceOfPower; pub use bandpass_filter::BandpassFilter; pub use bat::Bat; pub use belt_hold::BeltHold; pub use beta::Beta; pub use beta_neutral_spread::BetaNeutralSpread; pub use better_volume::BetterVolume; pub use bipower_variation::BipowerVariation; pub use body_size_pct::BodySizePct; pub use bollinger::{BollingerBands, BollingerOutput}; pub use bollinger_bandwidth::BollingerBandwidth; pub use bomar_bands::{BomarBands, BomarBandsOutput}; pub use breadth_thrust::BreadthThrust; pub use breakaway::Breakaway; pub use bullish_percent_index::BullishPercentIndex; pub use butterfly::Butterfly; pub use calendar_spread::CalendarSpread; pub use calmar_ratio::CalmarRatio; pub use camarilla_pivots::{Camarilla, CamarillaPivotsOutput}; pub use candle_volume::{CandleVolume, CandleVolumeOutput}; pub use cci::Cci; pub use center_of_gravity::CenterOfGravity; pub use central_pivot_range::{CentralPivotRange, CentralPivotRangeOutput}; 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 close_vs_open::CloseVsOpen; pub use closing_marubozu::ClosingMarubozu; pub use cmf::ChaikinMoneyFlow; pub use cmo::Cmo; pub use coefficient_of_variation::CoefficientOfVariation; pub use cointegration::{Cointegration, CointegrationOutput}; pub use concealing_baby_swallow::ConcealingBabySwallow; pub use conditional_value_at_risk::ConditionalValueAtRisk; pub use connors_rsi::ConnorsRsi; pub use coppock::Coppock; pub use correlation_trend_indicator::CorrelationTrendIndicator; pub use counterattack::Counterattack; pub use crab::Crab; pub use cumulative_volume_index::CumulativeVolumeIndex; pub use cup_and_handle::CupAndHandle; pub use cvd::CumulativeVolumeDelta; pub use cybernetic_cycle::CyberneticCycle; pub use cypher::Cypher; pub use day_of_week_profile::{DayOfWeekProfile, DayOfWeekProfileOutput}; pub use decycler::Decycler; pub use decycler_oscillator::DecyclerOscillator; pub use dema::Dema; pub use demand_index::DemandIndex; pub use demark_pivots::{DemarkPivots, DemarkPivotsOutput}; pub use depth_slope::DepthSlope; pub use derivative_oscillator::DerivativeOscillator; pub use detrended_std_dev::DetrendedStdDev; pub use disparity_index::DisparityIndex; pub use distance_ssd::DistanceSsd; pub use doji::Doji; pub use doji_star::DojiStar; pub use donchian::{Donchian, DonchianOutput}; pub use donchian_stop::{DonchianStop, DonchianStopOutput}; pub use double_bollinger::{DoubleBollinger, DoubleBollingerOutput}; pub use double_top_bottom::DoubleTopBottom; pub use downside_gap_three_methods::DownsideGapThreeMethods; pub use dpo::Dpo; pub use dragonfly_doji::DragonflyDoji; pub use drawdown_duration::DrawdownDuration; pub use dumpling_top::DumplingTop; pub use dx::Dx; pub use dynamic_momentum_index::DynamicMomentumIndex; pub use ease_of_movement::EaseOfMovement; pub use effective_spread::EffectiveSpread; pub use ehlers_stochastic::EhlersStochastic; pub use ehma::Ehma; pub use elder_impulse::ElderImpulse; pub use elder_ray::{ElderRay, ElderRayOutput}; pub use elder_safezone::{ElderSafeZone, ElderSafeZoneOutput}; pub use ema::Ema; pub use empirical_mode_decomposition::EmpiricalModeDecomposition; pub use engulfing::Engulfing; pub use equivolume::{Equivolume, EquivolumeOutput}; pub use estimated_leverage_ratio::EstimatedLeverageRatio; pub use even_better_sinewave::EvenBetterSinewave; pub use evening_doji_star::EveningDojiStar; pub use evwma::Evwma; pub use ewma_volatility::EwmaVolatility; pub use expectancy::Expectancy; pub use falling_three_methods::FallingThreeMethods; pub use fama::Fama; pub use fib_arcs::{FibArcs, FibArcsOutput}; pub use fib_channel::{FibChannel, FibChannelOutput}; pub use fib_confluence::{FibConfluence, FibConfluenceOutput}; pub use fib_extension::{FibExtension, FibExtensionOutput}; pub use fib_fan::{FibFan, FibFanOutput}; pub use fib_projection::{FibProjection, FibProjectionOutput}; pub use fib_retracement::{FibRetracement, FibRetracementOutput}; pub use fib_time_zones::{FibTimeZones, FibTimeZonesOutput}; pub use fibonacci_pivots::{FibonacciPivots, FibonacciPivotsOutput}; pub use fisher_rsi::FisherRsi; pub use fisher_transform::FisherTransform; pub use flag_pennant::FlagPennant; pub use footprint::{Footprint, FootprintLevel, FootprintOutput}; pub use force_index::ForceIndex; pub use fractal_chaos_bands::{FractalChaosBands, FractalChaosBandsOutput}; pub use frama::Frama; pub use fry_pan_bottom::FryPanBottom; pub use funding_basis::FundingBasis; pub use funding_implied_apr::FundingImpliedApr; pub use funding_rate::FundingRate; pub use funding_rate_mean::FundingRateMean; pub use funding_rate_zscore::FundingRateZScore; pub use gain_loss_ratio::GainLossRatio; pub use gap_side_by_side_white::GapSideBySideWhite; pub use garch11::Garch11; pub use garman_klass::GarmanKlassVolatility; pub use gartley::Gartley; pub use gator_oscillator::{GatorOscillator, GatorOscillatorOutput}; pub use generalized_dema::GeneralizedDema; pub use geometric_ma::GeometricMa; pub use golden_pocket::{GoldenPocket, GoldenPocketOutput}; pub use granger_causality::GrangerCausality; pub use gravestone_doji::GravestoneDoji; pub use hammer::Hammer; pub use hanging_man::HangingMan; pub use harami::Harami; pub use harami_cross::HaramiCross; pub use hasbrouck_information_share::HasbrouckInformationShare; pub use head_and_shoulders::HeadAndShoulders; pub use heikin_ashi::{HeikinAshi, HeikinAshiOutput}; pub use heikin_ashi_oscillator::HeikinAshiOscillator; pub use high_low_index::HighLowIndex; pub use high_low_range::HighLowRange; pub use high_wave::HighWave; pub use highpass_filter::HighpassFilter; pub use hikkake::Hikkake; pub use hikkake_modified::HikkakeModified; pub use hilbert_dominant_cycle::HilbertDominantCycle; pub use hilo_activator::HiLoActivator; pub use historical_volatility::HistoricalVolatility; pub use hma::Hma; pub use holt_winters::HoltWinters; pub use homing_pigeon::HomingPigeon; pub use ht_dcphase::HtDcPhase; pub use ht_phasor::{HtPhasor, HtPhasorOutput}; pub use ht_trendmode::HtTrendMode; pub use hurst_channel::{HurstChannel, HurstChannelOutput}; pub use hurst_exponent::HurstExponent; pub use ichimoku::{Ichimoku, IchimokuOutput}; pub use identical_three_crows::IdenticalThreeCrows; pub use in_neck::InNeck; pub use inertia::Inertia; pub use information_ratio::InformationRatio; pub use initial_balance::{InitialBalance, InitialBalanceOutput}; pub use instantaneous_trendline::InstantaneousTrendline; pub use intraday_intensity::IntradayIntensity; pub use intraday_momentum_index::IntradayMomentumIndex; pub use intraday_volatility_profile::{IntradayVolatilityProfile, IntradayVolatilityProfileOutput}; pub use inverse_fisher_transform::InverseFisherTransform; pub use inverted_hammer::InvertedHammer; pub use jarque_bera::JarqueBera; pub use jma::Jma; pub use jump_indicator::JumpIndicator; pub use kagi_bars::{KagiBar, KagiBars}; pub use kalman_hedge_ratio::{KalmanHedgeRatio, KalmanHedgeRatioOutput}; pub use kama::Kama; pub use kase_devstop::{KaseDevStop, KaseDevStopOutput}; pub use kase_permission_stochastic::{KasePermissionStochastic, KasePermissionStochasticOutput}; pub use kelly_criterion::KellyCriterion; pub use keltner::{Keltner, KeltnerOutput}; pub use kendall_tau::KendallTau; pub use kicking::Kicking; pub use kicking_by_length::KickingByLength; pub use kst::{Kst, KstOutput}; pub use kurtosis::Kurtosis; pub use kvo::Kvo; pub use kyles_lambda::KylesLambda; pub use ladder_bottom::LadderBottom; pub use laguerre_rsi::LaguerreRsi; pub use lead_lag_cross_correlation::{LeadLagCrossCorrelation, LeadLagCrossCorrelationOutput}; pub use linreg::LinearRegression; pub use linreg_angle::LinRegAngle; pub use linreg_channel::{LinRegChannel, LinRegChannelOutput}; pub use linreg_intercept::LinRegIntercept; pub use linreg_slope::LinRegSlope; pub use liquidation_features::{LiquidationFeatures, LiquidationFeaturesOutput}; pub use log_return::LogReturn; pub use long_legged_doji::LongLeggedDoji; pub use long_line::LongLine; pub use long_short_ratio::LongShortRatio; pub use ma_envelope::{MaEnvelope, MaEnvelopeOutput}; pub use macd::{MacdIndicator, MacdOutput}; pub use macd_ext::{MaType, MacdExt}; pub use macd_fix::MacdFix; pub use macd_histogram::MacdHistogram; pub use mama::{Mama, MamaOutput}; pub use market_facilitation_index::MarketFacilitationIndex; pub use marubozu::Marubozu; pub use mass_index::MassIndex; pub use mat_hold::MatHold; pub use matching_low::MatchingLow; pub use max_drawdown::MaxDrawdown; pub use mcclellan_oscillator::McClellanOscillator; pub use mcclellan_summation_index::McClellanSummationIndex; pub use mcginley_dynamic::McGinleyDynamic; pub use median_absolute_deviation::MedianAbsoluteDeviation; pub use median_channel::{MedianChannel, MedianChannelOutput}; pub use median_ma::MedianMa; pub use median_price::MedianPrice; pub use mfi::Mfi; pub use microprice::Microprice; pub use mid_point::MidPoint; pub use mid_price::MidPrice; pub use minus_di::MinusDi; pub use minus_dm::MinusDm; pub use modified_ma_stop::{ModifiedMaStop, ModifiedMaStopOutput}; pub use mom::Mom; pub use morning_doji_star::MorningDojiStar; pub use morning_evening_star::MorningEveningStar; pub use murrey_math_lines::{MurreyMathLines, MurreyMathLinesOutput}; pub use natr::Natr; pub use new_highs_new_lows::NewHighsNewLows; pub use new_price_lines::NewPriceLines; pub use nrtr::{Nrtr, NrtrOutput}; pub use nvi::Nvi; pub use ob_imbalance_full::OrderBookImbalanceFull; pub use ob_imbalance_top1::OrderBookImbalanceTop1; pub use ob_imbalance_topn::OrderBookImbalanceTopN; pub use obv::Obv; pub use oi_delta::OpenInterestDelta; pub use oi_price_divergence::OIPriceDivergence; pub use oi_to_volume_ratio::OiToVolumeRatio; pub use oi_weighted::OIWeighted; pub use omega_ratio::OmegaRatio; pub use on_neck::OnNeck; pub use open_interest_momentum::OpenInterestMomentum; pub use opening_marubozu::OpeningMarubozu; pub use opening_range::{OpeningRange, OpeningRangeOutput}; pub use order_flow_imbalance::OrderFlowImbalance; pub use ou_half_life::OuHalfLife; pub use overnight_gap::OvernightGap; pub use overnight_intraday_return::{OvernightIntradayReturn, OvernightIntradayReturnOutput}; pub use pain_index::PainIndex; pub use pair_spread_zscore::PairSpreadZScore; pub use pairwise_beta::PairwiseBeta; pub use parkinson::ParkinsonVolatility; pub use pearson_correlation::PearsonCorrelation; pub use percent_above_ma::PercentAboveMa; pub use percent_b::PercentB; pub use percentage_trailing_stop::PercentageTrailingStop; pub use perpetual_premium_index::PerpetualPremiumIndex; pub use pgo::Pgo; pub use piercing_dark_cloud::PiercingDarkCloud; pub use pin::Pin; pub use pivot_reversal::PivotReversal; pub use plus_di::PlusDi; pub use plus_dm::PlusDm; pub use pmo::Pmo; pub use point_and_figure_bars::{PnfColumn, PointAndFigureBars}; pub use polarized_fractal_efficiency::PolarizedFractalEfficiency; pub use ppo::Ppo; pub use ppo_histogram::PpoHistogram; pub use profit_factor::ProfitFactor; pub use projection_bands::{ProjectionBands, ProjectionBandsOutput}; pub use projection_oscillator::ProjectionOscillator; pub use psar::Psar; pub use pvi::Pvi; pub use qqe::{Qqe, QqeOutput}; pub use qstick::Qstick; pub use quartile_bands::{QuartileBands, QuartileBandsOutput}; pub use quoted_spread::QuotedSpread; pub use r_squared::RSquared; pub use realized_spread::RealizedSpread; pub use realized_volatility::RealizedVolatility; pub use recovery_factor::RecoveryFactor; pub use rectangle_range::RectangleRange; pub use reflex::Reflex; pub use regime_label::RegimeLabel; pub use relative_strength_ab::{RelativeStrengthAB, RelativeStrengthOutput}; pub use renko_bars::{RenkoBars, RenkoBrick}; pub use renko_trailing_stop::RenkoTrailingStop; pub use rickshaw_man::RickshawMan; pub use rising_three_methods::RisingThreeMethods; pub use rmi::Rmi; pub use roc::Roc; pub use rocp::Rocp; pub use rocr::Rocr; pub use rocr100::Rocr100; pub use rogers_satchell::RogersSatchellVolatility; pub use roll_measure::RollMeasure; pub use rolling_correlation::RollingCorrelation; pub use rolling_covariance::RollingCovariance; pub use rolling_iqr::RollingIqr; pub use rolling_min_max_scaler::RollingMinMaxScaler; pub use rolling_percentile_rank::RollingPercentileRank; pub use rolling_quantile::RollingQuantile; pub use roofing_filter::RoofingFilter; pub use rsi::Rsi; pub use rsx::Rsx; pub use rvi::Rvi; pub use rvi_volatility::RviVolatility; pub use rwi::{Rwi, RwiOutput}; pub use sample_entropy::SampleEntropy; pub use sar_ext::SarExt; pub use seasonal_z_score::SeasonalZScore; pub use separating_lines::SeparatingLines; pub use session_high_low::{SessionHighLow, SessionHighLowOutput}; pub use session_range::{SessionRange, SessionRangeOutput}; pub use session_vwap::SessionVwap; pub use shannon_entropy::ShannonEntropy; pub use shark::Shark; pub use sharpe_ratio::SharpeRatio; pub use shooting_star::ShootingStar; pub use short_line::ShortLine; pub use signed_volume::SignedVolume; pub use sine_wave::SineWave; pub use sine_weighted_ma::SineWeightedMa; pub use skewness::Skewness; pub use sma::Sma; pub use smi::Smi; pub use smma::Smma; pub use smoothed_heikin_ashi::{SmoothedHeikinAshi, SmoothedHeikinAshiOutput}; pub use sortino_ratio::SortinoRatio; pub use spearman_correlation::SpearmanCorrelation; pub use spinning_top::SpinningTop; pub use spread_ar1_coefficient::SpreadAr1Coefficient; pub use spread_bollinger_bands::{SpreadBollingerBands, SpreadBollingerBandsOutput}; pub use spread_hurst::SpreadHurst; pub use stalled_pattern::StalledPattern; pub use standard_error::StandardError; 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 stick_sandwich::StickSandwich; pub use stoch_rsi::StochRsi; pub use stochastic::{Stochastic, StochasticOutput}; pub use stochastic_cci::StochasticCci; pub use super_smoother::SuperSmoother; pub use super_trend::{SuperTrend, SuperTrendOutput}; pub use t3::T3; pub use taker_buy_sell_ratio::TakerBuySellRatio; pub use takuri::Takuri; pub use tasuki_gap::TasukiGap; pub use td_camouflage::TdCamouflage; pub use td_clop::TdClop; pub use td_clopwin::TdClopwin; pub use td_combo::TdCombo; pub use td_countdown::TdCountdown; pub use td_demarker::TdDeMarker; pub use td_differential::TdDifferential; pub use td_dwave::TdDWave; pub use td_lines::{TdLines, TdLinesOutput}; pub use td_moving_average::{TdMovingAverage, TdMovingAverageOutput}; pub use td_open::TdOpen; pub use td_pressure::TdPressure; pub use td_propulsion::TdPropulsion; pub use td_range_projection::{TdRangeProjection, TdRangeProjectionOutput}; pub use td_rei::TdRei; pub use td_risk_level::{TdRiskLevel, TdRiskLevelOutput}; pub use td_sequential::{TdSequential, TdSequentialOutput}; pub use td_setup::TdSetup; pub use td_trap::TdTrap; pub use tema::Tema; pub use term_structure_basis::TermStructureBasis; pub use three_drives::ThreeDrives; pub use three_inside::ThreeInside; pub use three_line_break::ThreeLineBreak; pub use three_line_strike::ThreeLineStrike; pub use three_outside::ThreeOutside; pub use three_soldiers_or_crows::ThreeSoldiersOrCrows; pub use three_stars_in_south::ThreeStarsInSouth; pub use thrusting::Thrusting; pub use tick_index::TickIndex; pub use tii::Tii; pub use time_based_stop::TimeBasedStop; pub use time_of_day_return_profile::{TimeOfDayReturnProfile, TimeOfDayReturnProfileOutput}; pub use tower_top_bottom::TowerTopBottom; pub use tpo_profile::{TpoProfile, TpoProfileOutput}; pub use trade_imbalance::TradeImbalance; pub use trade_sign_autocorrelation::TradeSignAutocorrelation; pub use trade_volume_index::TradeVolumeIndex; pub use trend_label::TrendLabel; pub use trend_strength_index::TrendStrengthIndex; pub use trendflex::Trendflex; pub use treynor_ratio::TreynorRatio; pub use triangle::Triangle; pub use trima::Trima; pub use trin::Trin; pub use triple_top_bottom::TripleTopBottom; pub use tristar::Tristar; pub use trix::Trix; pub use true_range::TrueRange; pub use tsf::Tsf; pub use tsf_oscillator::TsfOscillator; pub use tsi::Tsi; pub use tsv::Tsv; pub use ttm_squeeze::{TtmSqueeze, TtmSqueezeOutput}; pub use ttm_trend::TtmTrend; pub use turn_of_month::TurnOfMonth; pub use tweezer::Tweezer; pub use twiggs_money_flow::TwiggsMoneyFlow; pub use two_crows::TwoCrows; pub use typical_price::TypicalPrice; pub use ulcer_index::UlcerIndex; pub use ultimate_oscillator::UltimateOscillator; pub use unique_three_river::UniqueThreeRiver; pub use universal_oscillator::UniversalOscillator; pub use up_down_volume_ratio::UpDownVolumeRatio; pub use upside_gap_three_methods::UpsideGapThreeMethods; pub use upside_gap_two_crows::UpsideGapTwoCrows; pub use value_area::{ValueArea, ValueAreaOutput}; pub use value_at_risk::ValueAtRisk; pub use variance::Variance; pub use variance_ratio::VarianceRatio; pub use vertical_horizontal_filter::VerticalHorizontalFilter; pub use vidya::Vidya; pub use volatility_cone::{VolatilityCone, VolatilityConeOutput}; pub use volatility_of_volatility::VolatilityOfVolatility; pub use volatility_ratio::VolatilityRatio; pub use volty_stop::VoltyStop; pub use volume_by_time_profile::{VolumeByTimeProfile, VolumeByTimeProfileOutput}; pub use volume_oscillator::VolumeOscillator; pub use volume_profile::{VolumeProfile, VolumeProfileOutput}; pub use volume_rsi::VolumeRsi; pub use volume_weighted_macd::{VolumeWeightedMacd, VolumeWeightedMacdOutput}; pub use volume_weighted_sr::{VolumeWeightedSr, VolumeWeightedSrOutput}; pub use vortex::{Vortex, VortexOutput}; pub use vpin::Vpin; 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 wad::Wad; pub use wave_pm::WavePm; pub use wave_trend::{WaveTrend, WaveTrendOutput}; pub use wedge::Wedge; pub use weighted_close::WeightedClose; pub use wick_ratio::WickRatio; pub use williams_fractals::{WilliamsFractals, WilliamsFractalsOutput}; pub use williams_r::WilliamsR; pub use win_rate::WinRate; 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; /// Family classification of every built-in indicator. The (family, /// indicators) list is the single source of truth used by `family_tests` /// below; README and Wiki taxonomy tables should be kept in sync with it. /// /// Each indicator appears in exactly one family. Names are the public /// struct identifiers re-exported from this module (and the crate root). pub const FAMILIES: &[(&str, &[&str])] = &[ ( "Moving Averages", &[ "Sma", "Ema", "Wma", "Dema", "Tema", "Hma", "Kama", "Smma", "Trima", "Zlema", "T3", "Vwma", "Alma", "McGinleyDynamic", "Frama", "Vidya", "Jma", "Alligator", "Evwma", "SineWeightedMa", "GeometricMa", "Ehma", "MedianMa", "AdaptiveLaguerreFilter", "GeneralizedDema", "HoltWinters", ], ), ( "Momentum Oscillators", &[ "Rsi", "AnchoredRsi", "Stochastic", "Cci", "Roc", "WilliamsR", "Mfi", "AwesomeOscillator", "Mom", "Cmo", "Tsi", "Pmo", "StochRsi", "UltimateOscillator", "Rvi", "Pgo", "Kst", "Smi", "LaguerreRsi", "ConnorsRsi", "Inertia", "Rocp", "Rocr", "Rocr100", "DisparityIndex", "FisherRsi", "Rsx", "DynamicMomentumIndex", "StochasticCci", "Rmi", "DerivativeOscillator", "ElderRay", "IntradayMomentumIndex", "Qqe", ], ), ( "Trend & Directional", &[ "MacdIndicator", "MacdFix", "MacdExt", "Adx", "Adxr", "Aroon", "Trix", "AroonOscillator", "Vortex", "Rwi", "Tii", "WaveTrend", "MassIndex", "ChoppinessIndex", "VerticalHorizontalFilter", "PlusDm", "MinusDm", "PlusDi", "MinusDi", "Dx", "TrendLabel", "TtmTrend", "TrendStrengthIndex", "Qstick", "PolarizedFractalEfficiency", "WavePm", "GatorOscillator", "KasePermissionStochastic", ], ), ( "Price Oscillators", &[ "Ppo", "Dpo", "Coppock", "AcceleratorOscillator", "BalanceOfPower", "Apo", "AwesomeOscillatorHistogram", "Cfo", "ZeroLagMacd", "ElderImpulse", "Stc", "TsfOscillator", "MacdHistogram", "PpoHistogram", ], ), ( "Volatility & Bands", &[ "Atr", "BollingerBands", "Keltner", "Donchian", "Natr", "StdDev", "UlcerIndex", "HistoricalVolatility", "BollingerBandwidth", "PercentB", "TrueRange", "ChaikinVolatility", "RviVolatility", "ParkinsonVolatility", "GarmanKlassVolatility", "RogersSatchellVolatility", "YangZhangVolatility", "JumpIndicator", "RegimeLabel", "EwmaVolatility", "Garch11", "VolatilityOfVolatility", "BipowerVariation", "VolatilityRatio", "VolatilityCone", ], ), ( "Bands & Channels", &[ "MaEnvelope", "AccelerationBands", "StarcBands", "AtrBands", "HurstChannel", "LinRegChannel", "StandardErrorBands", "DoubleBollinger", "TtmSqueeze", "FractalChaosBands", "VwapStdDevBands", "QuartileBands", "BomarBands", "MedianChannel", "ProjectionBands", "ProjectionOscillator", ], ), ( "Trailing Stops", &[ "Psar", "SuperTrend", "ChandelierExit", "ChandeKrollStop", "AtrTrailingStop", "HiLoActivator", "VoltyStop", "YoyoExit", "DonchianStop", "PercentageTrailingStop", "StepTrailingStop", "RenkoTrailingStop", "SarExt", "KaseDevStop", "ElderSafeZone", "AtrRatchet", "Nrtr", "TimeBasedStop", "ModifiedMaStop", ], ), ( "Volume", &[ "Obv", "Vwap", "RollingVwap", "Adl", "VolumePriceTrend", "ChaikinMoneyFlow", "ChaikinOscillator", "ForceIndex", "EaseOfMovement", "Kvo", "VolumeOscillator", "Nvi", "Pvi", "AdOscillator", "AnchoredVwap", "DemandIndex", "Tsv", "Vzo", "MarketFacilitationIndex", "VolumeRsi", "Wad", "TwiggsMoneyFlow", "TradeVolumeIndex", "IntradayIntensity", "BetterVolume", "VolumeWeightedMacd", ], ), ( "Price Statistics", &[ "TypicalPrice", "MedianPrice", "WeightedClose", "LinearRegression", "LinRegSlope", "ZScore", "LinRegAngle", "Variance", "CoefficientOfVariation", "Skewness", "Kurtosis", "StandardError", "DetrendedStdDev", "RSquared", "MedianAbsoluteDeviation", "Autocorrelation", "HurstExponent", "PearsonCorrelation", "Beta", "SpearmanCorrelation", "Cointegration", "LeadLagCrossCorrelation", "PairSpreadZScore", "PairwiseBeta", "RelativeStrengthAB", "MidPrice", "MidPoint", "AvgPrice", "LinRegIntercept", "Tsf", "RollingCorrelation", "RollingCovariance", "OuHalfLife", "SpreadHurst", "DistanceSsd", "BetaNeutralSpread", "VarianceRatio", "GrangerCausality", "KalmanHedgeRatio", "SpreadBollingerBands", "LogReturn", "RealizedVolatility", "RollingIqr", "RollingPercentileRank", "RollingQuantile", "SpreadAr1Coefficient", "CloseVsOpen", "BodySizePct", "WickRatio", "HighLowRange", "JarqueBera", "RollingMinMaxScaler", "ShannonEntropy", "SampleEntropy", "KendallTau", ], ), ( "Ehlers / Cycle (DSP)", &[ "Mama", "Fama", "FisherTransform", "InverseFisherTransform", "SuperSmoother", "HilbertDominantCycle", "HtDcPhase", "HtPhasor", "HtTrendMode", "SineWave", "Decycler", "DecyclerOscillator", "RoofingFilter", "CenterOfGravity", "CyberneticCycle", "AdaptiveCycle", "EmpiricalModeDecomposition", "EhlersStochastic", "InstantaneousTrendline", "HighpassFilter", "Reflex", "Trendflex", "CorrelationTrendIndicator", "AdaptiveRsi", "UniversalOscillator", "AdaptiveCci", "BandpassFilter", "EvenBetterSinewave", "AutocorrelationPeriodogram", ], ), ( "Pivots & S/R", &[ "ClassicPivots", "FibonacciPivots", "Camarilla", "WoodiePivots", "DemarkPivots", "WilliamsFractals", "ZigZag", "CentralPivotRange", "MurreyMathLines", "AndrewsPitchfork", "VolumeWeightedSr", "PivotReversal", ], ), ( "DeMark", &[ "TdSetup", "TdSequential", "TdDeMarker", "TdRei", "TdPressure", "TdCombo", "TdCountdown", "TdLines", "TdRangeProjection", "TdDifferential", "TdOpen", "TdRiskLevel", "TdCamouflage", "TdClop", "TdClopwin", "TdPropulsion", "TdTrap", "TdDWave", "TdMovingAverage", ], ), ( "Ichimoku & Charts", &[ "Ichimoku", "HeikinAshi", "HeikinAshiOscillator", "ThreeLineBreak", "SmoothedHeikinAshi", "Equivolume", "CandleVolume", ], ), ( "Candlestick Patterns", &[ "Doji", "Hammer", "InvertedHammer", "HangingMan", "ShootingStar", "Engulfing", "Harami", "MorningEveningStar", "ThreeSoldiersOrCrows", "PiercingDarkCloud", "Marubozu", "Tweezer", "SpinningTop", "ThreeInside", "ThreeOutside", "TwoCrows", "UpsideGapTwoCrows", "IdenticalThreeCrows", "ThreeLineStrike", "ThreeStarsInSouth", "AbandonedBaby", "AdvanceBlock", "BeltHold", "Breakaway", "Counterattack", "DojiStar", "DragonflyDoji", "GravestoneDoji", "LongLeggedDoji", "RickshawMan", "EveningDojiStar", "MorningDojiStar", "GapSideBySideWhite", "HighWave", "Hikkake", "HikkakeModified", "HomingPigeon", "OnNeck", "InNeck", "Thrusting", "SeparatingLines", "Kicking", "KickingByLength", "LadderBottom", "MatHold", "MatchingLow", "LongLine", "ShortLine", "RisingThreeMethods", "FallingThreeMethods", "UpsideGapThreeMethods", "DownsideGapThreeMethods", "StalledPattern", "StickSandwich", "Takuri", "ClosingMarubozu", "OpeningMarubozu", "TasukiGap", "UniqueThreeRiver", "ConcealingBabySwallow", "Tristar", "HaramiCross", "TowerTopBottom", "FryPanBottom", "DumplingTop", "NewPriceLines", ], ), ( "Microstructure", &[ "OrderBookImbalanceTop1", "OrderBookImbalanceTopN", "OrderBookImbalanceFull", "Microprice", "QuotedSpread", "DepthSlope", "SignedVolume", "CumulativeVolumeDelta", "TradeImbalance", "EffectiveSpread", "RealizedSpread", "KylesLambda", "Footprint", "OrderFlowImbalance", "Vpin", "AmihudIlliquidity", "RollMeasure", "TradeSignAutocorrelation", "Pin", "HasbrouckInformationShare", ], ), ( "Derivatives", &[ "FundingRate", "FundingRateMean", "FundingRateZScore", "FundingBasis", "OpenInterestDelta", "OIPriceDivergence", "OIWeighted", "LongShortRatio", "TakerBuySellRatio", "LiquidationFeatures", "TermStructureBasis", "CalendarSpread", "EstimatedLeverageRatio", "OiToVolumeRatio", "PerpetualPremiumIndex", "FundingImpliedApr", "OpenInterestMomentum", ], ), ( "Market Profile", &[ "ValueArea", "InitialBalance", "OpeningRange", "VolumeProfile", "TpoProfile", ], ), ( "Risk / Performance", &[ "SharpeRatio", "SortinoRatio", "CalmarRatio", "OmegaRatio", "MaxDrawdown", "AverageDrawdown", "DrawdownDuration", "PainIndex", "ValueAtRisk", "ConditionalValueAtRisk", "ProfitFactor", "GainLossRatio", "RecoveryFactor", "KellyCriterion", "TreynorRatio", "InformationRatio", "Alpha", "WinRate", "Expectancy", ], ), ( "Alt-Chart Bars", &["RenkoBars", "KagiBars", "PointAndFigureBars"], ), ( "Market Breadth", &[ "AdvanceDecline", "AdvanceDeclineRatio", "AdVolumeLine", "McClellanOscillator", "McClellanSummationIndex", "Trin", "BreadthThrust", "NewHighsNewLows", "HighLowIndex", "PercentAboveMa", "UpDownVolumeRatio", "BullishPercentIndex", "CumulativeVolumeIndex", "AbsoluteBreadthIndex", "TickIndex", ], ), ( "Seasonality & Session", &[ "SessionVwap", "SessionHighLow", "SessionRange", "AverageDailyRange", "OvernightGap", "OvernightIntradayReturn", "TurnOfMonth", "SeasonalZScore", "TimeOfDayReturnProfile", "DayOfWeekProfile", "IntradayVolatilityProfile", "VolumeByTimeProfile", ], ), ( "Chart Patterns", &[ "DoubleTopBottom", "TripleTopBottom", "HeadAndShoulders", "Triangle", "Wedge", "FlagPennant", "RectangleRange", "CupAndHandle", ], ), ( "Harmonic Patterns", &[ "Abcd", "Gartley", "Butterfly", "Bat", "Crab", "Shark", "Cypher", "ThreeDrives", ], ), ( "Fibonacci", &[ "FibRetracement", "FibExtension", "FibProjection", "AutoFib", "GoldenPocket", "FibConfluence", "FibFan", "FibArcs", "FibChannel", "FibTimeZones", ], ), ]; #[cfg(test)] mod family_tests { use super::FAMILIES; #[test] fn no_duplicates_across_families() { let mut names: Vec<&str> = FAMILIES .iter() .flat_map(|(_, ns)| ns.iter().copied()) .collect(); let len_before = names.len(); names.sort_unstable(); names.dedup(); assert_eq!( names.len(), len_before, "duplicate indicator across families" ); } #[test] fn total_count_matches_expected() { // Bump together with new indicators. Drift between this number and // the actual indicator count is the early-warning signal that an // indicator was added without being assigned a family. let total: usize = FAMILIES.iter().map(|(_, ns)| ns.len()).sum(); assert_eq!(total, 493, "FAMILIES total drifted from indicator count"); } }