quantwave_core/features/
regime.rs1use crate::regimes::MarketRegime;
12
13#[derive(Debug, Clone, Copy, PartialEq)]
16pub struct RegimeFeatures {
17 pub regime_vector: [f64; 5], pub regime_label: MarketRegime,
20}
21
22pub fn regime_to_features(regime: MarketRegime) -> RegimeFeatures {
23 let mut vec = [0.0; 5];
24 let idx = match regime {
25 MarketRegime::Bull => 0,
26 MarketRegime::Bear => 1,
27 MarketRegime::Crisis => 2,
28 MarketRegime::Steady => 3,
29 MarketRegime::Cluster(c) => 4.min(c as usize),
30 };
31 if idx < 5 {
32 vec[idx] = 1.0;
33 }
34 RegimeFeatures {
35 regime_vector: vec,
36 regime_label: regime,
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn test_regime_to_features_bull() {
46 let f = regime_to_features(MarketRegime::Bull);
47 assert_eq!(f.regime_vector[0], 1.0);
48 assert_eq!(f.regime_label, MarketRegime::Bull);
49 }
50}