Skip to main content

wickra_core/indicators/
mod.rs

1//! Built-in indicators. Every indicator implements [`crate::Indicator`].
2//!
3//! Modules are listed alphabetically; the canonical family taxonomy lives in
4//! [`FAMILIES`]. Every public name is re-exported flat from this module and
5//! from the crate root for convenience.
6
7// Internal shared building block for the chart- and harmonic-pattern detectors.
8// Declared `pub(crate)` (not `mod`) so it is excluded from the public-catalogue
9// counter (`grep -c '^mod '`) and re-exported nowhere.
10pub(crate) mod pattern_swing;
11
12mod abandoned_baby;
13mod abcd;
14mod absolute_breadth_index;
15mod acceleration_bands;
16mod accelerator_oscillator;
17mod ad_oscillator;
18mod ad_volume_line;
19mod adaptive_cci;
20mod adaptive_cycle;
21mod adaptive_laguerre_filter;
22mod adaptive_rsi;
23mod adl;
24mod advance_block;
25mod advance_decline;
26mod advance_decline_ratio;
27mod adx;
28mod adxr;
29mod alligator;
30mod alma;
31mod alpha;
32mod amihud_illiquidity;
33mod anchored_rsi;
34mod anchored_vwap;
35mod andrews_pitchfork;
36mod apo;
37mod aroon;
38mod aroon_oscillator;
39mod atr;
40mod atr_bands;
41mod atr_ratchet;
42mod atr_trailing_stop;
43mod auto_fib;
44mod autocorrelation;
45mod autocorrelation_periodogram;
46mod average_daily_range;
47mod average_drawdown;
48mod avg_price;
49mod awesome_oscillator;
50mod awesome_oscillator_histogram;
51mod balance_of_power;
52mod bandpass_filter;
53mod bat;
54mod belt_hold;
55mod beta;
56mod beta_neutral_spread;
57mod better_volume;
58mod bipower_variation;
59mod body_size_pct;
60mod bollinger;
61mod bollinger_bandwidth;
62mod bomar_bands;
63mod breadth_thrust;
64mod breakaway;
65mod bullish_percent_index;
66mod butterfly;
67mod calendar_spread;
68mod calmar_ratio;
69mod camarilla_pivots;
70mod candle_volume;
71mod cci;
72mod center_of_gravity;
73mod central_pivot_range;
74mod cfo;
75mod chaikin_oscillator;
76mod chaikin_volatility;
77mod chande_kroll_stop;
78mod chandelier_exit;
79mod choppiness_index;
80mod classic_pivots;
81mod close_vs_open;
82mod closing_marubozu;
83mod cmf;
84mod cmo;
85mod coefficient_of_variation;
86mod cointegration;
87mod composite_profile;
88mod concealing_baby_swallow;
89mod conditional_value_at_risk;
90mod connors_rsi;
91mod coppock;
92mod correlation_trend_indicator;
93mod counterattack;
94mod crab;
95mod cumulative_volume_index;
96mod cup_and_handle;
97mod cvd;
98mod cybernetic_cycle;
99mod cypher;
100mod day_of_week_profile;
101mod decycler;
102mod decycler_oscillator;
103mod dema;
104mod demand_index;
105mod demark_pivots;
106mod depth_slope;
107mod derivative_oscillator;
108mod detrended_std_dev;
109mod disparity_index;
110mod distance_ssd;
111mod doji;
112mod doji_star;
113mod donchian;
114mod donchian_stop;
115mod double_bollinger;
116mod double_top_bottom;
117mod downside_gap_three_methods;
118mod dpo;
119mod dragonfly_doji;
120mod drawdown_duration;
121mod dumpling_top;
122mod dx;
123mod dynamic_momentum_index;
124mod ease_of_movement;
125mod effective_spread;
126mod ehlers_stochastic;
127mod ehma;
128mod elder_impulse;
129mod elder_ray;
130mod elder_safezone;
131mod ema;
132mod empirical_mode_decomposition;
133mod engulfing;
134mod equivolume;
135mod estimated_leverage_ratio;
136mod even_better_sinewave;
137mod evening_doji_star;
138mod evwma;
139mod ewma_volatility;
140mod expectancy;
141mod falling_three_methods;
142mod fama;
143mod fib_arcs;
144mod fib_channel;
145mod fib_confluence;
146mod fib_extension;
147mod fib_fan;
148mod fib_projection;
149mod fib_retracement;
150mod fib_time_zones;
151mod fibonacci_pivots;
152mod fisher_rsi;
153mod fisher_transform;
154mod flag_pennant;
155mod footprint;
156mod force_index;
157mod fractal_chaos_bands;
158mod frama;
159mod fry_pan_bottom;
160mod funding_basis;
161mod funding_implied_apr;
162mod funding_rate;
163mod funding_rate_mean;
164mod funding_rate_zscore;
165mod gain_loss_ratio;
166mod gap_side_by_side_white;
167mod garch11;
168mod garman_klass;
169mod gartley;
170mod gator_oscillator;
171mod generalized_dema;
172mod geometric_ma;
173mod golden_pocket;
174mod granger_causality;
175mod gravestone_doji;
176mod hammer;
177mod hanging_man;
178mod harami;
179mod harami_cross;
180mod hasbrouck_information_share;
181mod head_and_shoulders;
182mod heikin_ashi;
183mod heikin_ashi_oscillator;
184mod high_low_index;
185mod high_low_range;
186mod high_low_volume_nodes;
187mod high_wave;
188mod highpass_filter;
189mod hikkake;
190mod hikkake_modified;
191mod hilbert_dominant_cycle;
192mod hilo_activator;
193mod historical_volatility;
194mod hma;
195mod holt_winters;
196mod homing_pigeon;
197mod ht_dcphase;
198mod ht_phasor;
199mod ht_trendmode;
200mod hurst_channel;
201mod hurst_exponent;
202mod ichimoku;
203mod identical_three_crows;
204mod in_neck;
205mod inertia;
206mod information_ratio;
207mod initial_balance;
208mod instantaneous_trendline;
209mod intraday_intensity;
210mod intraday_momentum_index;
211mod intraday_volatility_profile;
212mod inverse_fisher_transform;
213mod inverted_hammer;
214mod jarque_bera;
215mod jma;
216mod jump_indicator;
217mod kagi_bars;
218mod kalman_hedge_ratio;
219mod kama;
220mod kase_devstop;
221mod kase_permission_stochastic;
222mod kelly_criterion;
223mod keltner;
224mod kendall_tau;
225mod kicking;
226mod kicking_by_length;
227mod kst;
228mod kurtosis;
229mod kvo;
230mod kyles_lambda;
231mod ladder_bottom;
232mod laguerre_rsi;
233mod lead_lag_cross_correlation;
234mod linreg;
235mod linreg_angle;
236mod linreg_channel;
237mod linreg_intercept;
238mod linreg_slope;
239mod liquidation_features;
240mod log_return;
241mod long_legged_doji;
242mod long_line;
243mod long_short_ratio;
244mod ma_envelope;
245mod macd;
246mod macd_ext;
247mod macd_fix;
248mod macd_histogram;
249mod mama;
250mod market_facilitation_index;
251mod marubozu;
252mod mass_index;
253mod mat_hold;
254mod matching_low;
255mod max_drawdown;
256mod mcclellan_oscillator;
257mod mcclellan_summation_index;
258mod mcginley_dynamic;
259mod median_absolute_deviation;
260mod median_channel;
261mod median_ma;
262mod median_price;
263mod mfi;
264mod microprice;
265mod mid_point;
266mod mid_price;
267mod minus_di;
268mod minus_dm;
269mod modified_ma_stop;
270mod mom;
271mod morning_doji_star;
272mod morning_evening_star;
273mod murrey_math_lines;
274mod naked_poc;
275mod natr;
276mod new_highs_new_lows;
277mod new_price_lines;
278mod nrtr;
279mod nvi;
280mod ob_imbalance_full;
281mod ob_imbalance_top1;
282mod ob_imbalance_topn;
283mod obv;
284mod oi_delta;
285mod oi_price_divergence;
286mod oi_to_volume_ratio;
287mod oi_weighted;
288mod omega_ratio;
289mod on_neck;
290mod open_interest_momentum;
291mod opening_marubozu;
292mod opening_range;
293mod order_flow_imbalance;
294mod ou_half_life;
295mod overnight_gap;
296mod overnight_intraday_return;
297mod pain_index;
298mod pair_spread_zscore;
299mod pairwise_beta;
300mod parkinson;
301mod pearson_correlation;
302mod percent_above_ma;
303mod percent_b;
304mod percentage_trailing_stop;
305mod perpetual_premium_index;
306mod pgo;
307mod piercing_dark_cloud;
308mod pin;
309mod pivot_reversal;
310mod plus_di;
311mod plus_dm;
312mod pmo;
313mod point_and_figure_bars;
314mod polarized_fractal_efficiency;
315mod ppo;
316mod ppo_histogram;
317mod profile_shape;
318mod profit_factor;
319mod projection_bands;
320mod projection_oscillator;
321mod psar;
322mod pvi;
323mod qqe;
324mod qstick;
325mod quartile_bands;
326mod quoted_spread;
327mod r_squared;
328mod realized_spread;
329mod realized_volatility;
330mod recovery_factor;
331mod rectangle_range;
332mod reflex;
333mod regime_label;
334mod relative_strength_ab;
335mod renko_bars;
336mod renko_trailing_stop;
337mod rickshaw_man;
338mod rising_three_methods;
339mod rmi;
340mod roc;
341mod rocp;
342mod rocr;
343mod rocr100;
344mod rogers_satchell;
345mod roll_measure;
346mod rolling_correlation;
347mod rolling_covariance;
348mod rolling_iqr;
349mod rolling_min_max_scaler;
350mod rolling_percentile_rank;
351mod rolling_quantile;
352mod roofing_filter;
353mod rsi;
354mod rsx;
355mod rvi;
356mod rvi_volatility;
357mod rwi;
358mod sample_entropy;
359mod sar_ext;
360mod seasonal_z_score;
361mod separating_lines;
362mod session_high_low;
363mod session_range;
364mod session_vwap;
365mod shannon_entropy;
366mod shark;
367mod sharpe_ratio;
368mod shooting_star;
369mod short_line;
370mod signed_volume;
371mod sine_wave;
372mod sine_weighted_ma;
373mod single_prints;
374mod skewness;
375mod sma;
376mod smi;
377mod smma;
378mod smoothed_heikin_ashi;
379mod sortino_ratio;
380mod spearman_correlation;
381mod spinning_top;
382mod spread_ar1_coefficient;
383mod spread_bollinger_bands;
384mod spread_hurst;
385mod stalled_pattern;
386mod standard_error;
387mod standard_error_bands;
388mod starc_bands;
389mod stc;
390mod std_dev;
391mod step_trailing_stop;
392mod stick_sandwich;
393mod stoch_rsi;
394mod stochastic;
395mod stochastic_cci;
396mod super_smoother;
397mod super_trend;
398mod t3;
399mod taker_buy_sell_ratio;
400mod takuri;
401mod tasuki_gap;
402mod td_camouflage;
403mod td_clop;
404mod td_clopwin;
405mod td_combo;
406mod td_countdown;
407mod td_demarker;
408mod td_differential;
409mod td_dwave;
410mod td_lines;
411mod td_moving_average;
412mod td_open;
413mod td_pressure;
414mod td_propulsion;
415mod td_range_projection;
416mod td_rei;
417mod td_risk_level;
418mod td_sequential;
419mod td_setup;
420mod td_trap;
421mod tema;
422mod term_structure_basis;
423mod three_drives;
424mod three_inside;
425mod three_line_break;
426mod three_line_strike;
427mod three_outside;
428mod three_soldiers_or_crows;
429mod three_stars_in_south;
430mod thrusting;
431mod tick_index;
432mod tii;
433mod time_based_stop;
434mod time_of_day_return_profile;
435mod tower_top_bottom;
436mod tpo_profile;
437mod trade_imbalance;
438mod trade_sign_autocorrelation;
439mod trade_volume_index;
440mod trend_label;
441mod trend_strength_index;
442mod trendflex;
443mod treynor_ratio;
444mod triangle;
445mod trima;
446mod trin;
447mod triple_top_bottom;
448mod tristar;
449mod trix;
450mod true_range;
451mod tsf;
452mod tsf_oscillator;
453mod tsi;
454mod tsv;
455mod ttm_squeeze;
456mod ttm_trend;
457mod turn_of_month;
458mod tweezer;
459mod twiggs_money_flow;
460mod two_crows;
461mod typical_price;
462mod ulcer_index;
463mod ultimate_oscillator;
464mod unique_three_river;
465mod universal_oscillator;
466mod up_down_volume_ratio;
467mod upside_gap_three_methods;
468mod upside_gap_two_crows;
469mod value_area;
470mod value_at_risk;
471mod variance;
472mod variance_ratio;
473mod vertical_horizontal_filter;
474mod vidya;
475mod volatility_cone;
476mod volatility_of_volatility;
477mod volatility_ratio;
478mod volty_stop;
479mod volume_by_time_profile;
480mod volume_oscillator;
481mod volume_profile;
482mod volume_rsi;
483mod volume_weighted_macd;
484mod volume_weighted_sr;
485mod vortex;
486mod vpin;
487mod vpt;
488mod vwap;
489mod vwap_stddev_bands;
490mod vwma;
491mod vzo;
492mod wad;
493mod wave_pm;
494mod wave_trend;
495mod wedge;
496mod weighted_close;
497mod wick_ratio;
498mod williams_fractals;
499mod williams_r;
500mod win_rate;
501mod wma;
502mod woodie_pivots;
503mod yang_zhang;
504mod yoyo_exit;
505mod z_score;
506mod zero_lag_macd;
507mod zig_zag;
508mod zlema;
509
510pub use abandoned_baby::AbandonedBaby;
511pub use abcd::Abcd;
512pub use absolute_breadth_index::AbsoluteBreadthIndex;
513pub use acceleration_bands::{AccelerationBands, AccelerationBandsOutput};
514pub use accelerator_oscillator::AcceleratorOscillator;
515pub use ad_oscillator::AdOscillator;
516pub use ad_volume_line::AdVolumeLine;
517pub use adaptive_cci::AdaptiveCci;
518pub use adaptive_cycle::AdaptiveCycle;
519pub use adaptive_laguerre_filter::AdaptiveLaguerreFilter;
520pub use adaptive_rsi::AdaptiveRsi;
521pub use adl::Adl;
522pub use advance_block::AdvanceBlock;
523pub use advance_decline::AdvanceDecline;
524pub use advance_decline_ratio::AdvanceDeclineRatio;
525pub use adx::{Adx, AdxOutput};
526pub use adxr::Adxr;
527pub use alligator::{Alligator, AlligatorOutput};
528pub use alma::Alma;
529pub use alpha::Alpha;
530pub use amihud_illiquidity::AmihudIlliquidity;
531pub use anchored_rsi::AnchoredRsi;
532pub use anchored_vwap::AnchoredVwap;
533pub use andrews_pitchfork::{AndrewsPitchfork, AndrewsPitchforkOutput};
534pub use apo::Apo;
535pub use aroon::{Aroon, AroonOutput};
536pub use aroon_oscillator::AroonOscillator;
537pub use atr::Atr;
538pub use atr_bands::{AtrBands, AtrBandsOutput};
539pub use atr_ratchet::{AtrRatchet, AtrRatchetOutput};
540pub use atr_trailing_stop::AtrTrailingStop;
541pub use auto_fib::{AutoFib, AutoFibOutput};
542pub use autocorrelation::Autocorrelation;
543pub use autocorrelation_periodogram::AutocorrelationPeriodogram;
544pub use average_daily_range::AverageDailyRange;
545pub use average_drawdown::AverageDrawdown;
546pub use avg_price::AvgPrice;
547pub use awesome_oscillator::AwesomeOscillator;
548pub use awesome_oscillator_histogram::AwesomeOscillatorHistogram;
549pub use balance_of_power::BalanceOfPower;
550pub use bandpass_filter::BandpassFilter;
551pub use bat::Bat;
552pub use belt_hold::BeltHold;
553pub use beta::Beta;
554pub use beta_neutral_spread::BetaNeutralSpread;
555pub use better_volume::BetterVolume;
556pub use bipower_variation::BipowerVariation;
557pub use body_size_pct::BodySizePct;
558pub use bollinger::{BollingerBands, BollingerOutput};
559pub use bollinger_bandwidth::BollingerBandwidth;
560pub use bomar_bands::{BomarBands, BomarBandsOutput};
561pub use breadth_thrust::BreadthThrust;
562pub use breakaway::Breakaway;
563pub use bullish_percent_index::BullishPercentIndex;
564pub use butterfly::Butterfly;
565pub use calendar_spread::CalendarSpread;
566pub use calmar_ratio::CalmarRatio;
567pub use camarilla_pivots::{Camarilla, CamarillaPivotsOutput};
568pub use candle_volume::{CandleVolume, CandleVolumeOutput};
569pub use cci::Cci;
570pub use center_of_gravity::CenterOfGravity;
571pub use central_pivot_range::{CentralPivotRange, CentralPivotRangeOutput};
572pub use cfo::Cfo;
573pub use chaikin_oscillator::ChaikinOscillator;
574pub use chaikin_volatility::ChaikinVolatility;
575pub use chande_kroll_stop::{ChandeKrollStop, ChandeKrollStopOutput};
576pub use chandelier_exit::{ChandelierExit, ChandelierExitOutput};
577pub use choppiness_index::ChoppinessIndex;
578pub use classic_pivots::{ClassicPivots, ClassicPivotsOutput};
579pub use close_vs_open::CloseVsOpen;
580pub use closing_marubozu::ClosingMarubozu;
581pub use cmf::ChaikinMoneyFlow;
582pub use cmo::Cmo;
583pub use coefficient_of_variation::CoefficientOfVariation;
584pub use cointegration::{Cointegration, CointegrationOutput};
585pub use composite_profile::{CompositeProfile, CompositeProfileOutput};
586pub use concealing_baby_swallow::ConcealingBabySwallow;
587pub use conditional_value_at_risk::ConditionalValueAtRisk;
588pub use connors_rsi::ConnorsRsi;
589pub use coppock::Coppock;
590pub use correlation_trend_indicator::CorrelationTrendIndicator;
591pub use counterattack::Counterattack;
592pub use crab::Crab;
593pub use cumulative_volume_index::CumulativeVolumeIndex;
594pub use cup_and_handle::CupAndHandle;
595pub use cvd::CumulativeVolumeDelta;
596pub use cybernetic_cycle::CyberneticCycle;
597pub use cypher::Cypher;
598pub use day_of_week_profile::{DayOfWeekProfile, DayOfWeekProfileOutput};
599pub use decycler::Decycler;
600pub use decycler_oscillator::DecyclerOscillator;
601pub use dema::Dema;
602pub use demand_index::DemandIndex;
603pub use demark_pivots::{DemarkPivots, DemarkPivotsOutput};
604pub use depth_slope::DepthSlope;
605pub use derivative_oscillator::DerivativeOscillator;
606pub use detrended_std_dev::DetrendedStdDev;
607pub use disparity_index::DisparityIndex;
608pub use distance_ssd::DistanceSsd;
609pub use doji::Doji;
610pub use doji_star::DojiStar;
611pub use donchian::{Donchian, DonchianOutput};
612pub use donchian_stop::{DonchianStop, DonchianStopOutput};
613pub use double_bollinger::{DoubleBollinger, DoubleBollingerOutput};
614pub use double_top_bottom::DoubleTopBottom;
615pub use downside_gap_three_methods::DownsideGapThreeMethods;
616pub use dpo::Dpo;
617pub use dragonfly_doji::DragonflyDoji;
618pub use drawdown_duration::DrawdownDuration;
619pub use dumpling_top::DumplingTop;
620pub use dx::Dx;
621pub use dynamic_momentum_index::DynamicMomentumIndex;
622pub use ease_of_movement::EaseOfMovement;
623pub use effective_spread::EffectiveSpread;
624pub use ehlers_stochastic::EhlersStochastic;
625pub use ehma::Ehma;
626pub use elder_impulse::ElderImpulse;
627pub use elder_ray::{ElderRay, ElderRayOutput};
628pub use elder_safezone::{ElderSafeZone, ElderSafeZoneOutput};
629pub use ema::Ema;
630pub use empirical_mode_decomposition::EmpiricalModeDecomposition;
631pub use engulfing::Engulfing;
632pub use equivolume::{Equivolume, EquivolumeOutput};
633pub use estimated_leverage_ratio::EstimatedLeverageRatio;
634pub use even_better_sinewave::EvenBetterSinewave;
635pub use evening_doji_star::EveningDojiStar;
636pub use evwma::Evwma;
637pub use ewma_volatility::EwmaVolatility;
638pub use expectancy::Expectancy;
639pub use falling_three_methods::FallingThreeMethods;
640pub use fama::Fama;
641pub use fib_arcs::{FibArcs, FibArcsOutput};
642pub use fib_channel::{FibChannel, FibChannelOutput};
643pub use fib_confluence::{FibConfluence, FibConfluenceOutput};
644pub use fib_extension::{FibExtension, FibExtensionOutput};
645pub use fib_fan::{FibFan, FibFanOutput};
646pub use fib_projection::{FibProjection, FibProjectionOutput};
647pub use fib_retracement::{FibRetracement, FibRetracementOutput};
648pub use fib_time_zones::{FibTimeZones, FibTimeZonesOutput};
649pub use fibonacci_pivots::{FibonacciPivots, FibonacciPivotsOutput};
650pub use fisher_rsi::FisherRsi;
651pub use fisher_transform::FisherTransform;
652pub use flag_pennant::FlagPennant;
653pub use footprint::{Footprint, FootprintLevel, FootprintOutput};
654pub use force_index::ForceIndex;
655pub use fractal_chaos_bands::{FractalChaosBands, FractalChaosBandsOutput};
656pub use frama::Frama;
657pub use fry_pan_bottom::FryPanBottom;
658pub use funding_basis::FundingBasis;
659pub use funding_implied_apr::FundingImpliedApr;
660pub use funding_rate::FundingRate;
661pub use funding_rate_mean::FundingRateMean;
662pub use funding_rate_zscore::FundingRateZScore;
663pub use gain_loss_ratio::GainLossRatio;
664pub use gap_side_by_side_white::GapSideBySideWhite;
665pub use garch11::Garch11;
666pub use garman_klass::GarmanKlassVolatility;
667pub use gartley::Gartley;
668pub use gator_oscillator::{GatorOscillator, GatorOscillatorOutput};
669pub use generalized_dema::GeneralizedDema;
670pub use geometric_ma::GeometricMa;
671pub use golden_pocket::{GoldenPocket, GoldenPocketOutput};
672pub use granger_causality::GrangerCausality;
673pub use gravestone_doji::GravestoneDoji;
674pub use hammer::Hammer;
675pub use hanging_man::HangingMan;
676pub use harami::Harami;
677pub use harami_cross::HaramiCross;
678pub use hasbrouck_information_share::HasbrouckInformationShare;
679pub use head_and_shoulders::HeadAndShoulders;
680pub use heikin_ashi::{HeikinAshi, HeikinAshiOutput};
681pub use heikin_ashi_oscillator::HeikinAshiOscillator;
682pub use high_low_index::HighLowIndex;
683pub use high_low_range::HighLowRange;
684pub use high_low_volume_nodes::{HighLowVolumeNodes, HighLowVolumeNodesOutput};
685pub use high_wave::HighWave;
686pub use highpass_filter::HighpassFilter;
687pub use hikkake::Hikkake;
688pub use hikkake_modified::HikkakeModified;
689pub use hilbert_dominant_cycle::HilbertDominantCycle;
690pub use hilo_activator::HiLoActivator;
691pub use historical_volatility::HistoricalVolatility;
692pub use hma::Hma;
693pub use holt_winters::HoltWinters;
694pub use homing_pigeon::HomingPigeon;
695pub use ht_dcphase::HtDcPhase;
696pub use ht_phasor::{HtPhasor, HtPhasorOutput};
697pub use ht_trendmode::HtTrendMode;
698pub use hurst_channel::{HurstChannel, HurstChannelOutput};
699pub use hurst_exponent::HurstExponent;
700pub use ichimoku::{Ichimoku, IchimokuOutput};
701pub use identical_three_crows::IdenticalThreeCrows;
702pub use in_neck::InNeck;
703pub use inertia::Inertia;
704pub use information_ratio::InformationRatio;
705pub use initial_balance::{InitialBalance, InitialBalanceOutput};
706pub use instantaneous_trendline::InstantaneousTrendline;
707pub use intraday_intensity::IntradayIntensity;
708pub use intraday_momentum_index::IntradayMomentumIndex;
709pub use intraday_volatility_profile::{IntradayVolatilityProfile, IntradayVolatilityProfileOutput};
710pub use inverse_fisher_transform::InverseFisherTransform;
711pub use inverted_hammer::InvertedHammer;
712pub use jarque_bera::JarqueBera;
713pub use jma::Jma;
714pub use jump_indicator::JumpIndicator;
715pub use kagi_bars::{KagiBar, KagiBars};
716pub use kalman_hedge_ratio::{KalmanHedgeRatio, KalmanHedgeRatioOutput};
717pub use kama::Kama;
718pub use kase_devstop::{KaseDevStop, KaseDevStopOutput};
719pub use kase_permission_stochastic::{KasePermissionStochastic, KasePermissionStochasticOutput};
720pub use kelly_criterion::KellyCriterion;
721pub use keltner::{Keltner, KeltnerOutput};
722pub use kendall_tau::KendallTau;
723pub use kicking::Kicking;
724pub use kicking_by_length::KickingByLength;
725pub use kst::{Kst, KstOutput};
726pub use kurtosis::Kurtosis;
727pub use kvo::Kvo;
728pub use kyles_lambda::KylesLambda;
729pub use ladder_bottom::LadderBottom;
730pub use laguerre_rsi::LaguerreRsi;
731pub use lead_lag_cross_correlation::{LeadLagCrossCorrelation, LeadLagCrossCorrelationOutput};
732pub use linreg::LinearRegression;
733pub use linreg_angle::LinRegAngle;
734pub use linreg_channel::{LinRegChannel, LinRegChannelOutput};
735pub use linreg_intercept::LinRegIntercept;
736pub use linreg_slope::LinRegSlope;
737pub use liquidation_features::{LiquidationFeatures, LiquidationFeaturesOutput};
738pub use log_return::LogReturn;
739pub use long_legged_doji::LongLeggedDoji;
740pub use long_line::LongLine;
741pub use long_short_ratio::LongShortRatio;
742pub use ma_envelope::{MaEnvelope, MaEnvelopeOutput};
743pub use macd::{MacdIndicator, MacdOutput};
744pub use macd_ext::{MaType, MacdExt};
745pub use macd_fix::MacdFix;
746pub use macd_histogram::MacdHistogram;
747pub use mama::{Mama, MamaOutput};
748pub use market_facilitation_index::MarketFacilitationIndex;
749pub use marubozu::Marubozu;
750pub use mass_index::MassIndex;
751pub use mat_hold::MatHold;
752pub use matching_low::MatchingLow;
753pub use max_drawdown::MaxDrawdown;
754pub use mcclellan_oscillator::McClellanOscillator;
755pub use mcclellan_summation_index::McClellanSummationIndex;
756pub use mcginley_dynamic::McGinleyDynamic;
757pub use median_absolute_deviation::MedianAbsoluteDeviation;
758pub use median_channel::{MedianChannel, MedianChannelOutput};
759pub use median_ma::MedianMa;
760pub use median_price::MedianPrice;
761pub use mfi::Mfi;
762pub use microprice::Microprice;
763pub use mid_point::MidPoint;
764pub use mid_price::MidPrice;
765pub use minus_di::MinusDi;
766pub use minus_dm::MinusDm;
767pub use modified_ma_stop::{ModifiedMaStop, ModifiedMaStopOutput};
768pub use mom::Mom;
769pub use morning_doji_star::MorningDojiStar;
770pub use morning_evening_star::MorningEveningStar;
771pub use murrey_math_lines::{MurreyMathLines, MurreyMathLinesOutput};
772pub use naked_poc::NakedPoc;
773pub use natr::Natr;
774pub use new_highs_new_lows::NewHighsNewLows;
775pub use new_price_lines::NewPriceLines;
776pub use nrtr::{Nrtr, NrtrOutput};
777pub use nvi::Nvi;
778pub use ob_imbalance_full::OrderBookImbalanceFull;
779pub use ob_imbalance_top1::OrderBookImbalanceTop1;
780pub use ob_imbalance_topn::OrderBookImbalanceTopN;
781pub use obv::Obv;
782pub use oi_delta::OpenInterestDelta;
783pub use oi_price_divergence::OIPriceDivergence;
784pub use oi_to_volume_ratio::OiToVolumeRatio;
785pub use oi_weighted::OIWeighted;
786pub use omega_ratio::OmegaRatio;
787pub use on_neck::OnNeck;
788pub use open_interest_momentum::OpenInterestMomentum;
789pub use opening_marubozu::OpeningMarubozu;
790pub use opening_range::{OpeningRange, OpeningRangeOutput};
791pub use order_flow_imbalance::OrderFlowImbalance;
792pub use ou_half_life::OuHalfLife;
793pub use overnight_gap::OvernightGap;
794pub use overnight_intraday_return::{OvernightIntradayReturn, OvernightIntradayReturnOutput};
795pub use pain_index::PainIndex;
796pub use pair_spread_zscore::PairSpreadZScore;
797pub use pairwise_beta::PairwiseBeta;
798pub use parkinson::ParkinsonVolatility;
799pub use pearson_correlation::PearsonCorrelation;
800pub use percent_above_ma::PercentAboveMa;
801pub use percent_b::PercentB;
802pub use percentage_trailing_stop::PercentageTrailingStop;
803pub use perpetual_premium_index::PerpetualPremiumIndex;
804pub use pgo::Pgo;
805pub use piercing_dark_cloud::PiercingDarkCloud;
806pub use pin::Pin;
807pub use pivot_reversal::PivotReversal;
808pub use plus_di::PlusDi;
809pub use plus_dm::PlusDm;
810pub use pmo::Pmo;
811pub use point_and_figure_bars::{PnfColumn, PointAndFigureBars};
812pub use polarized_fractal_efficiency::PolarizedFractalEfficiency;
813pub use ppo::Ppo;
814pub use ppo_histogram::PpoHistogram;
815pub use profile_shape::ProfileShape;
816pub use profit_factor::ProfitFactor;
817pub use projection_bands::{ProjectionBands, ProjectionBandsOutput};
818pub use projection_oscillator::ProjectionOscillator;
819pub use psar::Psar;
820pub use pvi::Pvi;
821pub use qqe::{Qqe, QqeOutput};
822pub use qstick::Qstick;
823pub use quartile_bands::{QuartileBands, QuartileBandsOutput};
824pub use quoted_spread::QuotedSpread;
825pub use r_squared::RSquared;
826pub use realized_spread::RealizedSpread;
827pub use realized_volatility::RealizedVolatility;
828pub use recovery_factor::RecoveryFactor;
829pub use rectangle_range::RectangleRange;
830pub use reflex::Reflex;
831pub use regime_label::RegimeLabel;
832pub use relative_strength_ab::{RelativeStrengthAB, RelativeStrengthOutput};
833pub use renko_bars::{RenkoBars, RenkoBrick};
834pub use renko_trailing_stop::RenkoTrailingStop;
835pub use rickshaw_man::RickshawMan;
836pub use rising_three_methods::RisingThreeMethods;
837pub use rmi::Rmi;
838pub use roc::Roc;
839pub use rocp::Rocp;
840pub use rocr::Rocr;
841pub use rocr100::Rocr100;
842pub use rogers_satchell::RogersSatchellVolatility;
843pub use roll_measure::RollMeasure;
844pub use rolling_correlation::RollingCorrelation;
845pub use rolling_covariance::RollingCovariance;
846pub use rolling_iqr::RollingIqr;
847pub use rolling_min_max_scaler::RollingMinMaxScaler;
848pub use rolling_percentile_rank::RollingPercentileRank;
849pub use rolling_quantile::RollingQuantile;
850pub use roofing_filter::RoofingFilter;
851pub use rsi::Rsi;
852pub use rsx::Rsx;
853pub use rvi::Rvi;
854pub use rvi_volatility::RviVolatility;
855pub use rwi::{Rwi, RwiOutput};
856pub use sample_entropy::SampleEntropy;
857pub use sar_ext::SarExt;
858pub use seasonal_z_score::SeasonalZScore;
859pub use separating_lines::SeparatingLines;
860pub use session_high_low::{SessionHighLow, SessionHighLowOutput};
861pub use session_range::{SessionRange, SessionRangeOutput};
862pub use session_vwap::SessionVwap;
863pub use shannon_entropy::ShannonEntropy;
864pub use shark::Shark;
865pub use sharpe_ratio::SharpeRatio;
866pub use shooting_star::ShootingStar;
867pub use short_line::ShortLine;
868pub use signed_volume::SignedVolume;
869pub use sine_wave::SineWave;
870pub use sine_weighted_ma::SineWeightedMa;
871pub use single_prints::SinglePrints;
872pub use skewness::Skewness;
873pub use sma::Sma;
874pub use smi::Smi;
875pub use smma::Smma;
876pub use smoothed_heikin_ashi::{SmoothedHeikinAshi, SmoothedHeikinAshiOutput};
877pub use sortino_ratio::SortinoRatio;
878pub use spearman_correlation::SpearmanCorrelation;
879pub use spinning_top::SpinningTop;
880pub use spread_ar1_coefficient::SpreadAr1Coefficient;
881pub use spread_bollinger_bands::{SpreadBollingerBands, SpreadBollingerBandsOutput};
882pub use spread_hurst::SpreadHurst;
883pub use stalled_pattern::StalledPattern;
884pub use standard_error::StandardError;
885pub use standard_error_bands::{StandardErrorBands, StandardErrorBandsOutput};
886pub use starc_bands::{StarcBands, StarcBandsOutput};
887pub use stc::Stc;
888pub use std_dev::StdDev;
889pub use step_trailing_stop::StepTrailingStop;
890pub use stick_sandwich::StickSandwich;
891pub use stoch_rsi::StochRsi;
892pub use stochastic::{Stochastic, StochasticOutput};
893pub use stochastic_cci::StochasticCci;
894pub use super_smoother::SuperSmoother;
895pub use super_trend::{SuperTrend, SuperTrendOutput};
896pub use t3::T3;
897pub use taker_buy_sell_ratio::TakerBuySellRatio;
898pub use takuri::Takuri;
899pub use tasuki_gap::TasukiGap;
900pub use td_camouflage::TdCamouflage;
901pub use td_clop::TdClop;
902pub use td_clopwin::TdClopwin;
903pub use td_combo::TdCombo;
904pub use td_countdown::TdCountdown;
905pub use td_demarker::TdDeMarker;
906pub use td_differential::TdDifferential;
907pub use td_dwave::TdDWave;
908pub use td_lines::{TdLines, TdLinesOutput};
909pub use td_moving_average::{TdMovingAverage, TdMovingAverageOutput};
910pub use td_open::TdOpen;
911pub use td_pressure::TdPressure;
912pub use td_propulsion::TdPropulsion;
913pub use td_range_projection::{TdRangeProjection, TdRangeProjectionOutput};
914pub use td_rei::TdRei;
915pub use td_risk_level::{TdRiskLevel, TdRiskLevelOutput};
916pub use td_sequential::{TdSequential, TdSequentialOutput};
917pub use td_setup::TdSetup;
918pub use td_trap::TdTrap;
919pub use tema::Tema;
920pub use term_structure_basis::TermStructureBasis;
921pub use three_drives::ThreeDrives;
922pub use three_inside::ThreeInside;
923pub use three_line_break::ThreeLineBreak;
924pub use three_line_strike::ThreeLineStrike;
925pub use three_outside::ThreeOutside;
926pub use three_soldiers_or_crows::ThreeSoldiersOrCrows;
927pub use three_stars_in_south::ThreeStarsInSouth;
928pub use thrusting::Thrusting;
929pub use tick_index::TickIndex;
930pub use tii::Tii;
931pub use time_based_stop::TimeBasedStop;
932pub use time_of_day_return_profile::{TimeOfDayReturnProfile, TimeOfDayReturnProfileOutput};
933pub use tower_top_bottom::TowerTopBottom;
934pub use tpo_profile::{TpoProfile, TpoProfileOutput};
935pub use trade_imbalance::TradeImbalance;
936pub use trade_sign_autocorrelation::TradeSignAutocorrelation;
937pub use trade_volume_index::TradeVolumeIndex;
938pub use trend_label::TrendLabel;
939pub use trend_strength_index::TrendStrengthIndex;
940pub use trendflex::Trendflex;
941pub use treynor_ratio::TreynorRatio;
942pub use triangle::Triangle;
943pub use trima::Trima;
944pub use trin::Trin;
945pub use triple_top_bottom::TripleTopBottom;
946pub use tristar::Tristar;
947pub use trix::Trix;
948pub use true_range::TrueRange;
949pub use tsf::Tsf;
950pub use tsf_oscillator::TsfOscillator;
951pub use tsi::Tsi;
952pub use tsv::Tsv;
953pub use ttm_squeeze::{TtmSqueeze, TtmSqueezeOutput};
954pub use ttm_trend::TtmTrend;
955pub use turn_of_month::TurnOfMonth;
956pub use tweezer::Tweezer;
957pub use twiggs_money_flow::TwiggsMoneyFlow;
958pub use two_crows::TwoCrows;
959pub use typical_price::TypicalPrice;
960pub use ulcer_index::UlcerIndex;
961pub use ultimate_oscillator::UltimateOscillator;
962pub use unique_three_river::UniqueThreeRiver;
963pub use universal_oscillator::UniversalOscillator;
964pub use up_down_volume_ratio::UpDownVolumeRatio;
965pub use upside_gap_three_methods::UpsideGapThreeMethods;
966pub use upside_gap_two_crows::UpsideGapTwoCrows;
967pub use value_area::{ValueArea, ValueAreaOutput};
968pub use value_at_risk::ValueAtRisk;
969pub use variance::Variance;
970pub use variance_ratio::VarianceRatio;
971pub use vertical_horizontal_filter::VerticalHorizontalFilter;
972pub use vidya::Vidya;
973pub use volatility_cone::{VolatilityCone, VolatilityConeOutput};
974pub use volatility_of_volatility::VolatilityOfVolatility;
975pub use volatility_ratio::VolatilityRatio;
976pub use volty_stop::VoltyStop;
977pub use volume_by_time_profile::{VolumeByTimeProfile, VolumeByTimeProfileOutput};
978pub use volume_oscillator::VolumeOscillator;
979pub use volume_profile::{VolumeProfile, VolumeProfileOutput};
980pub use volume_rsi::VolumeRsi;
981pub use volume_weighted_macd::{VolumeWeightedMacd, VolumeWeightedMacdOutput};
982pub use volume_weighted_sr::{VolumeWeightedSr, VolumeWeightedSrOutput};
983pub use vortex::{Vortex, VortexOutput};
984pub use vpin::Vpin;
985pub use vpt::VolumePriceTrend;
986pub use vwap::{RollingVwap, Vwap};
987pub use vwap_stddev_bands::{VwapStdDevBands, VwapStdDevBandsOutput};
988pub use vwma::Vwma;
989pub use vzo::Vzo;
990pub use wad::Wad;
991pub use wave_pm::WavePm;
992pub use wave_trend::{WaveTrend, WaveTrendOutput};
993pub use wedge::Wedge;
994pub use weighted_close::WeightedClose;
995pub use wick_ratio::WickRatio;
996pub use williams_fractals::{WilliamsFractals, WilliamsFractalsOutput};
997pub use williams_r::WilliamsR;
998pub use win_rate::WinRate;
999pub use wma::Wma;
1000pub use woodie_pivots::{WoodiePivots, WoodiePivotsOutput};
1001pub use yang_zhang::YangZhangVolatility;
1002pub use yoyo_exit::YoyoExit;
1003pub use z_score::ZScore;
1004pub use zero_lag_macd::{ZeroLagMacd, ZeroLagMacdOutput};
1005pub use zig_zag::{ZigZag, ZigZagOutput};
1006pub use zlema::Zlema;
1007
1008/// Family classification of every built-in indicator. The (family,
1009/// indicators) list is the single source of truth used by `family_tests`
1010/// below; README and Wiki taxonomy tables should be kept in sync with it.
1011///
1012/// Each indicator appears in exactly one family. Names are the public
1013/// struct identifiers re-exported from this module (and the crate root).
1014pub const FAMILIES: &[(&str, &[&str])] = &[
1015    (
1016        "Moving Averages",
1017        &[
1018            "Sma",
1019            "Ema",
1020            "Wma",
1021            "Dema",
1022            "Tema",
1023            "Hma",
1024            "Kama",
1025            "Smma",
1026            "Trima",
1027            "Zlema",
1028            "T3",
1029            "Vwma",
1030            "Alma",
1031            "McGinleyDynamic",
1032            "Frama",
1033            "Vidya",
1034            "Jma",
1035            "Alligator",
1036            "Evwma",
1037            "SineWeightedMa",
1038            "GeometricMa",
1039            "Ehma",
1040            "MedianMa",
1041            "AdaptiveLaguerreFilter",
1042            "GeneralizedDema",
1043            "HoltWinters",
1044        ],
1045    ),
1046    (
1047        "Momentum Oscillators",
1048        &[
1049            "Rsi",
1050            "AnchoredRsi",
1051            "Stochastic",
1052            "Cci",
1053            "Roc",
1054            "WilliamsR",
1055            "Mfi",
1056            "AwesomeOscillator",
1057            "Mom",
1058            "Cmo",
1059            "Tsi",
1060            "Pmo",
1061            "StochRsi",
1062            "UltimateOscillator",
1063            "Rvi",
1064            "Pgo",
1065            "Kst",
1066            "Smi",
1067            "LaguerreRsi",
1068            "ConnorsRsi",
1069            "Inertia",
1070            "Rocp",
1071            "Rocr",
1072            "Rocr100",
1073            "DisparityIndex",
1074            "FisherRsi",
1075            "Rsx",
1076            "DynamicMomentumIndex",
1077            "StochasticCci",
1078            "Rmi",
1079            "DerivativeOscillator",
1080            "ElderRay",
1081            "IntradayMomentumIndex",
1082            "Qqe",
1083        ],
1084    ),
1085    (
1086        "Trend & Directional",
1087        &[
1088            "MacdIndicator",
1089            "MacdFix",
1090            "MacdExt",
1091            "Adx",
1092            "Adxr",
1093            "Aroon",
1094            "Trix",
1095            "AroonOscillator",
1096            "Vortex",
1097            "Rwi",
1098            "Tii",
1099            "WaveTrend",
1100            "MassIndex",
1101            "ChoppinessIndex",
1102            "VerticalHorizontalFilter",
1103            "PlusDm",
1104            "MinusDm",
1105            "PlusDi",
1106            "MinusDi",
1107            "Dx",
1108            "TrendLabel",
1109            "TtmTrend",
1110            "TrendStrengthIndex",
1111            "Qstick",
1112            "PolarizedFractalEfficiency",
1113            "WavePm",
1114            "GatorOscillator",
1115            "KasePermissionStochastic",
1116        ],
1117    ),
1118    (
1119        "Price Oscillators",
1120        &[
1121            "Ppo",
1122            "Dpo",
1123            "Coppock",
1124            "AcceleratorOscillator",
1125            "BalanceOfPower",
1126            "Apo",
1127            "AwesomeOscillatorHistogram",
1128            "Cfo",
1129            "ZeroLagMacd",
1130            "ElderImpulse",
1131            "Stc",
1132            "TsfOscillator",
1133            "MacdHistogram",
1134            "PpoHistogram",
1135        ],
1136    ),
1137    (
1138        "Volatility & Bands",
1139        &[
1140            "Atr",
1141            "BollingerBands",
1142            "Keltner",
1143            "Donchian",
1144            "Natr",
1145            "StdDev",
1146            "UlcerIndex",
1147            "HistoricalVolatility",
1148            "BollingerBandwidth",
1149            "PercentB",
1150            "TrueRange",
1151            "ChaikinVolatility",
1152            "RviVolatility",
1153            "ParkinsonVolatility",
1154            "GarmanKlassVolatility",
1155            "RogersSatchellVolatility",
1156            "YangZhangVolatility",
1157            "JumpIndicator",
1158            "RegimeLabel",
1159            "EwmaVolatility",
1160            "Garch11",
1161            "VolatilityOfVolatility",
1162            "BipowerVariation",
1163            "VolatilityRatio",
1164            "VolatilityCone",
1165        ],
1166    ),
1167    (
1168        "Bands & Channels",
1169        &[
1170            "MaEnvelope",
1171            "AccelerationBands",
1172            "StarcBands",
1173            "AtrBands",
1174            "HurstChannel",
1175            "LinRegChannel",
1176            "StandardErrorBands",
1177            "DoubleBollinger",
1178            "TtmSqueeze",
1179            "FractalChaosBands",
1180            "VwapStdDevBands",
1181            "QuartileBands",
1182            "BomarBands",
1183            "MedianChannel",
1184            "ProjectionBands",
1185            "ProjectionOscillator",
1186        ],
1187    ),
1188    (
1189        "Trailing Stops",
1190        &[
1191            "Psar",
1192            "SuperTrend",
1193            "ChandelierExit",
1194            "ChandeKrollStop",
1195            "AtrTrailingStop",
1196            "HiLoActivator",
1197            "VoltyStop",
1198            "YoyoExit",
1199            "DonchianStop",
1200            "PercentageTrailingStop",
1201            "StepTrailingStop",
1202            "RenkoTrailingStop",
1203            "SarExt",
1204            "KaseDevStop",
1205            "ElderSafeZone",
1206            "AtrRatchet",
1207            "Nrtr",
1208            "TimeBasedStop",
1209            "ModifiedMaStop",
1210        ],
1211    ),
1212    (
1213        "Volume",
1214        &[
1215            "Obv",
1216            "Vwap",
1217            "RollingVwap",
1218            "Adl",
1219            "VolumePriceTrend",
1220            "ChaikinMoneyFlow",
1221            "ChaikinOscillator",
1222            "ForceIndex",
1223            "EaseOfMovement",
1224            "Kvo",
1225            "VolumeOscillator",
1226            "Nvi",
1227            "Pvi",
1228            "AdOscillator",
1229            "AnchoredVwap",
1230            "DemandIndex",
1231            "Tsv",
1232            "Vzo",
1233            "MarketFacilitationIndex",
1234            "VolumeRsi",
1235            "Wad",
1236            "TwiggsMoneyFlow",
1237            "TradeVolumeIndex",
1238            "IntradayIntensity",
1239            "BetterVolume",
1240            "VolumeWeightedMacd",
1241        ],
1242    ),
1243    (
1244        "Price Statistics",
1245        &[
1246            "TypicalPrice",
1247            "MedianPrice",
1248            "WeightedClose",
1249            "LinearRegression",
1250            "LinRegSlope",
1251            "ZScore",
1252            "LinRegAngle",
1253            "Variance",
1254            "CoefficientOfVariation",
1255            "Skewness",
1256            "Kurtosis",
1257            "StandardError",
1258            "DetrendedStdDev",
1259            "RSquared",
1260            "MedianAbsoluteDeviation",
1261            "Autocorrelation",
1262            "HurstExponent",
1263            "PearsonCorrelation",
1264            "Beta",
1265            "SpearmanCorrelation",
1266            "Cointegration",
1267            "LeadLagCrossCorrelation",
1268            "PairSpreadZScore",
1269            "PairwiseBeta",
1270            "RelativeStrengthAB",
1271            "MidPrice",
1272            "MidPoint",
1273            "AvgPrice",
1274            "LinRegIntercept",
1275            "Tsf",
1276            "RollingCorrelation",
1277            "RollingCovariance",
1278            "OuHalfLife",
1279            "SpreadHurst",
1280            "DistanceSsd",
1281            "BetaNeutralSpread",
1282            "VarianceRatio",
1283            "GrangerCausality",
1284            "KalmanHedgeRatio",
1285            "SpreadBollingerBands",
1286            "LogReturn",
1287            "RealizedVolatility",
1288            "RollingIqr",
1289            "RollingPercentileRank",
1290            "RollingQuantile",
1291            "SpreadAr1Coefficient",
1292            "CloseVsOpen",
1293            "BodySizePct",
1294            "WickRatio",
1295            "HighLowRange",
1296            "JarqueBera",
1297            "RollingMinMaxScaler",
1298            "ShannonEntropy",
1299            "SampleEntropy",
1300            "KendallTau",
1301        ],
1302    ),
1303    (
1304        "Ehlers / Cycle (DSP)",
1305        &[
1306            "Mama",
1307            "Fama",
1308            "FisherTransform",
1309            "InverseFisherTransform",
1310            "SuperSmoother",
1311            "HilbertDominantCycle",
1312            "HtDcPhase",
1313            "HtPhasor",
1314            "HtTrendMode",
1315            "SineWave",
1316            "Decycler",
1317            "DecyclerOscillator",
1318            "RoofingFilter",
1319            "CenterOfGravity",
1320            "CyberneticCycle",
1321            "AdaptiveCycle",
1322            "EmpiricalModeDecomposition",
1323            "EhlersStochastic",
1324            "InstantaneousTrendline",
1325            "HighpassFilter",
1326            "Reflex",
1327            "Trendflex",
1328            "CorrelationTrendIndicator",
1329            "AdaptiveRsi",
1330            "UniversalOscillator",
1331            "AdaptiveCci",
1332            "BandpassFilter",
1333            "EvenBetterSinewave",
1334            "AutocorrelationPeriodogram",
1335        ],
1336    ),
1337    (
1338        "Pivots & S/R",
1339        &[
1340            "ClassicPivots",
1341            "FibonacciPivots",
1342            "Camarilla",
1343            "WoodiePivots",
1344            "DemarkPivots",
1345            "WilliamsFractals",
1346            "ZigZag",
1347            "CentralPivotRange",
1348            "MurreyMathLines",
1349            "AndrewsPitchfork",
1350            "VolumeWeightedSr",
1351            "PivotReversal",
1352        ],
1353    ),
1354    (
1355        "DeMark",
1356        &[
1357            "TdSetup",
1358            "TdSequential",
1359            "TdDeMarker",
1360            "TdRei",
1361            "TdPressure",
1362            "TdCombo",
1363            "TdCountdown",
1364            "TdLines",
1365            "TdRangeProjection",
1366            "TdDifferential",
1367            "TdOpen",
1368            "TdRiskLevel",
1369            "TdCamouflage",
1370            "TdClop",
1371            "TdClopwin",
1372            "TdPropulsion",
1373            "TdTrap",
1374            "TdDWave",
1375            "TdMovingAverage",
1376        ],
1377    ),
1378    (
1379        "Ichimoku & Charts",
1380        &[
1381            "Ichimoku",
1382            "HeikinAshi",
1383            "HeikinAshiOscillator",
1384            "ThreeLineBreak",
1385            "SmoothedHeikinAshi",
1386            "Equivolume",
1387            "CandleVolume",
1388        ],
1389    ),
1390    (
1391        "Candlestick Patterns",
1392        &[
1393            "Doji",
1394            "Hammer",
1395            "InvertedHammer",
1396            "HangingMan",
1397            "ShootingStar",
1398            "Engulfing",
1399            "Harami",
1400            "MorningEveningStar",
1401            "ThreeSoldiersOrCrows",
1402            "PiercingDarkCloud",
1403            "Marubozu",
1404            "Tweezer",
1405            "SpinningTop",
1406            "ThreeInside",
1407            "ThreeOutside",
1408            "TwoCrows",
1409            "UpsideGapTwoCrows",
1410            "IdenticalThreeCrows",
1411            "ThreeLineStrike",
1412            "ThreeStarsInSouth",
1413            "AbandonedBaby",
1414            "AdvanceBlock",
1415            "BeltHold",
1416            "Breakaway",
1417            "Counterattack",
1418            "DojiStar",
1419            "DragonflyDoji",
1420            "GravestoneDoji",
1421            "LongLeggedDoji",
1422            "RickshawMan",
1423            "EveningDojiStar",
1424            "MorningDojiStar",
1425            "GapSideBySideWhite",
1426            "HighWave",
1427            "Hikkake",
1428            "HikkakeModified",
1429            "HomingPigeon",
1430            "OnNeck",
1431            "InNeck",
1432            "Thrusting",
1433            "SeparatingLines",
1434            "Kicking",
1435            "KickingByLength",
1436            "LadderBottom",
1437            "MatHold",
1438            "MatchingLow",
1439            "LongLine",
1440            "ShortLine",
1441            "RisingThreeMethods",
1442            "FallingThreeMethods",
1443            "UpsideGapThreeMethods",
1444            "DownsideGapThreeMethods",
1445            "StalledPattern",
1446            "StickSandwich",
1447            "Takuri",
1448            "ClosingMarubozu",
1449            "OpeningMarubozu",
1450            "TasukiGap",
1451            "UniqueThreeRiver",
1452            "ConcealingBabySwallow",
1453            "Tristar",
1454            "HaramiCross",
1455            "TowerTopBottom",
1456            "FryPanBottom",
1457            "DumplingTop",
1458            "NewPriceLines",
1459        ],
1460    ),
1461    (
1462        "Microstructure",
1463        &[
1464            "OrderBookImbalanceTop1",
1465            "OrderBookImbalanceTopN",
1466            "OrderBookImbalanceFull",
1467            "Microprice",
1468            "QuotedSpread",
1469            "DepthSlope",
1470            "SignedVolume",
1471            "CumulativeVolumeDelta",
1472            "TradeImbalance",
1473            "EffectiveSpread",
1474            "RealizedSpread",
1475            "KylesLambda",
1476            "Footprint",
1477            "OrderFlowImbalance",
1478            "Vpin",
1479            "AmihudIlliquidity",
1480            "RollMeasure",
1481            "TradeSignAutocorrelation",
1482            "Pin",
1483            "HasbrouckInformationShare",
1484        ],
1485    ),
1486    (
1487        "Derivatives",
1488        &[
1489            "FundingRate",
1490            "FundingRateMean",
1491            "FundingRateZScore",
1492            "FundingBasis",
1493            "OpenInterestDelta",
1494            "OIPriceDivergence",
1495            "OIWeighted",
1496            "LongShortRatio",
1497            "TakerBuySellRatio",
1498            "LiquidationFeatures",
1499            "TermStructureBasis",
1500            "CalendarSpread",
1501            "EstimatedLeverageRatio",
1502            "OiToVolumeRatio",
1503            "PerpetualPremiumIndex",
1504            "FundingImpliedApr",
1505            "OpenInterestMomentum",
1506        ],
1507    ),
1508    (
1509        "Market Profile",
1510        &[
1511            "ValueArea",
1512            "InitialBalance",
1513            "OpeningRange",
1514            "VolumeProfile",
1515            "TpoProfile",
1516            "NakedPoc",
1517            "SinglePrints",
1518            "ProfileShape",
1519            "HighLowVolumeNodes",
1520            "CompositeProfile",
1521        ],
1522    ),
1523    (
1524        "Risk / Performance",
1525        &[
1526            "SharpeRatio",
1527            "SortinoRatio",
1528            "CalmarRatio",
1529            "OmegaRatio",
1530            "MaxDrawdown",
1531            "AverageDrawdown",
1532            "DrawdownDuration",
1533            "PainIndex",
1534            "ValueAtRisk",
1535            "ConditionalValueAtRisk",
1536            "ProfitFactor",
1537            "GainLossRatio",
1538            "RecoveryFactor",
1539            "KellyCriterion",
1540            "TreynorRatio",
1541            "InformationRatio",
1542            "Alpha",
1543            "WinRate",
1544            "Expectancy",
1545        ],
1546    ),
1547    (
1548        "Alt-Chart Bars",
1549        &["RenkoBars", "KagiBars", "PointAndFigureBars"],
1550    ),
1551    (
1552        "Market Breadth",
1553        &[
1554            "AdvanceDecline",
1555            "AdvanceDeclineRatio",
1556            "AdVolumeLine",
1557            "McClellanOscillator",
1558            "McClellanSummationIndex",
1559            "Trin",
1560            "BreadthThrust",
1561            "NewHighsNewLows",
1562            "HighLowIndex",
1563            "PercentAboveMa",
1564            "UpDownVolumeRatio",
1565            "BullishPercentIndex",
1566            "CumulativeVolumeIndex",
1567            "AbsoluteBreadthIndex",
1568            "TickIndex",
1569        ],
1570    ),
1571    (
1572        "Seasonality & Session",
1573        &[
1574            "SessionVwap",
1575            "SessionHighLow",
1576            "SessionRange",
1577            "AverageDailyRange",
1578            "OvernightGap",
1579            "OvernightIntradayReturn",
1580            "TurnOfMonth",
1581            "SeasonalZScore",
1582            "TimeOfDayReturnProfile",
1583            "DayOfWeekProfile",
1584            "IntradayVolatilityProfile",
1585            "VolumeByTimeProfile",
1586        ],
1587    ),
1588    (
1589        "Chart Patterns",
1590        &[
1591            "DoubleTopBottom",
1592            "TripleTopBottom",
1593            "HeadAndShoulders",
1594            "Triangle",
1595            "Wedge",
1596            "FlagPennant",
1597            "RectangleRange",
1598            "CupAndHandle",
1599        ],
1600    ),
1601    (
1602        "Harmonic Patterns",
1603        &[
1604            "Abcd",
1605            "Gartley",
1606            "Butterfly",
1607            "Bat",
1608            "Crab",
1609            "Shark",
1610            "Cypher",
1611            "ThreeDrives",
1612        ],
1613    ),
1614    (
1615        "Fibonacci",
1616        &[
1617            "FibRetracement",
1618            "FibExtension",
1619            "FibProjection",
1620            "AutoFib",
1621            "GoldenPocket",
1622            "FibConfluence",
1623            "FibFan",
1624            "FibArcs",
1625            "FibChannel",
1626            "FibTimeZones",
1627        ],
1628    ),
1629];
1630
1631#[cfg(test)]
1632mod family_tests {
1633    use super::FAMILIES;
1634
1635    #[test]
1636    fn no_duplicates_across_families() {
1637        let mut names: Vec<&str> = FAMILIES
1638            .iter()
1639            .flat_map(|(_, ns)| ns.iter().copied())
1640            .collect();
1641        let len_before = names.len();
1642        names.sort_unstable();
1643        names.dedup();
1644        assert_eq!(
1645            names.len(),
1646            len_before,
1647            "duplicate indicator across families"
1648        );
1649    }
1650
1651    #[test]
1652    fn total_count_matches_expected() {
1653        // Bump together with new indicators. Drift between this number and
1654        // the actual indicator count is the early-warning signal that an
1655        // indicator was added without being assigned a family.
1656        let total: usize = FAMILIES.iter().map(|(_, ns)| ns.len()).sum();
1657        assert_eq!(total, 498, "FAMILIES total drifted from indicator count");
1658    }
1659}