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