use crate::regimes::MarketRegime;
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct RegimeFeatures {
pub regime_vector: [f64; 5], pub regime_label: MarketRegime,
}
pub fn regime_to_features(regime: MarketRegime) -> RegimeFeatures {
let mut vec = [0.0; 5];
let idx = match regime {
MarketRegime::Bull => 0,
MarketRegime::Bear => 1,
MarketRegime::Crisis => 2,
MarketRegime::Steady => 3,
MarketRegime::Cluster(c) => 4.min(c as usize),
};
if idx < 5 {
vec[idx] = 1.0;
}
RegimeFeatures {
regime_vector: vec,
regime_label: regime,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_regime_to_features_bull() {
let f = regime_to_features(MarketRegime::Bull);
assert_eq!(f.regime_vector[0], 1.0);
assert_eq!(f.regime_label, MarketRegime::Bull);
}
}