indicators/lib.rs
1//! # indicators — Technical Indicators + Market Regime Detection
2//!
3//! Unified crate combining:
4//! - **Signal layers** (ported from `indicators.py`): VWAP, EMA, ML SuperTrend, Trend Speed,
5//! Liquidity Profile, Confluence Engine, Market Structure, CVD, AO, Hurst, Price Acceleration.
6//! - **Regime detection**: Indicator-based, HMM, and Ensemble detectors.
7//! - **Standalone batch functions**: `ema()`, `sma()`, `atr()`, `rsi()`, `macd()`.
8//!
9//! ## Quick start — signal engine
10//! ```rust,ignore
11//! use indicators::{Indicators, ConfluenceEngine, LiquidityProfile, MarketStructure,
12//! CVDTracker, VolatilityPercentile, SignalStreak, compute_signal,
13//! settings::BotSettings};
14//!
15//! let s = BotSettings::btc();
16//! let mut ind = Indicators::new(&s);
17//! let mut liq = LiquidityProfile::new(s.liq_period, s.liq_bins);
18//! let mut conf = ConfluenceEngine::new(s.conf_ema_fast, s.conf_ema_slow,
19//! s.conf_ema_trend, s.conf_rsi_len, s.conf_adx_len);
20//! let mut ms = MarketStructure::new(s.struct_swing_len, s.struct_atr_mult);
21//! let mut cvd = CVDTracker::new(s.cvd_slope_bars, s.cvd_div_lookback);
22//! let mut vol = VolatilityPercentile::new(200);
23//! let mut streak = SignalStreak::new(s.signal_confirm_bars);
24//!
25//! // per-candle update
26//! ind.update(&candle);
27//! liq.update(&candle);
28//! conf.update(&candle);
29//! ms.update(&candle);
30//! cvd.update(&candle);
31//! vol.update(ind.atr);
32//! let (raw, _) = compute_signal(candle.close, &ind, &liq, &conf, &ms, &s, Some(&cvd), Some(&vol));
33//! if streak.update(raw) { /* confirmed signal */ }
34//! ```
35//!
36//! ## Quick start — regime detection
37//! ```rust,ignore
38//! use indicators::EnsembleRegimeDetector;
39//! let mut det = EnsembleRegimeDetector::default_config();
40//! det.update(high, low, close);
41//! if det.is_ready() { println!("{}", det.regime()); }
42//! ```
43
44// ── Standalone batch indicator functions ─────────────────────────────────────
45pub mod functions;
46
47// ── Python-ported signal engine ───────────────────────────────────────────────
48pub mod confluence; // ConfluenceEngine (Layer 6)
49pub mod cvd; // CVDTracker (Layer 8)
50pub mod engine; // Indicators: VWAP, EMA, SuperTrend, TrendSpeed, Hurst, Accel
51pub mod liquidity; // LiquidityProfile (Layer 5)
52pub mod settings; // BotSettings + per-symbol defaults
53pub mod signal;
54pub mod structure; // MarketStructure + Fibonacci (Layer 7)
55pub mod vol_regime; // PercentileTracker, VolatilityPercentile, MarketRegimeTracker // compute_signal, SignalStreak
56
57// ── Regime detection system ───────────────────────────────────────────────────
58mod detector;
59mod ensemble;
60mod hmm;
61pub mod primitives; // ADX, BB, EMA, ATR, RSI used by regime detectors
62pub mod router;
63pub mod types; // MarketRegime enum, RegimeConfidence, RegimeConfig, etc.
64
65// ── Re-exports: signal engine ────────────────────────────────────────────────
66pub use confluence::ConfluenceEngine;
67pub use cvd::CVDTracker;
68pub use engine::Indicators;
69pub use liquidity::LiquidityProfile;
70pub use settings::BotSettings;
71pub use signal::{SignalComponents, SignalStreak, compute_signal};
72pub use structure::MarketStructure;
73pub use vol_regime::{MarketRegimeTracker, PercentileTracker, VolatilityPercentile};
74
75// ── Re-exports: batch functions ──────────────────────────────────────────────
76pub use functions::{IndicatorError, atr, ema, macd, rsi, sma, true_range};
77
78// ── Re-exports: incremental structs ─────────────────────────────────────────
79pub use functions::{ATR, EMA, IndicatorCalculator, StrategyIndicators};
80
81// ── Re-exports: regime detection ────────────────────────────────────────────
82pub use detector::RegimeDetector;
83pub use ensemble::{EnsembleConfig, EnsembleRegimeDetector, EnsembleResult, EnsembleStatus};
84pub use hmm::{HMMConfig, HMMRegimeDetector};
85pub use primitives::{ADX, BollingerBands, BollingerBandsValues, RSI};
86pub use router::{
87 ActiveStrategy, AssetSummary, DetectionMethod, EnhancedRouter, EnhancedRouterConfig,
88 RoutedSignal,
89};
90pub use types::{
91 MarketRegime, RecommendedStrategy, RegimeConfidence, RegimeConfig, TrendDirection,
92};