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