Regime Detection Integration Guide

Overview

This guide provides step-by-step instructions for properly integrating the Hidden Markov Model (HMM) regime detection system into the AlphaPulse trading flow.

Current State vs Target State

Current State (10% Integration)

Target State (100% Integration)

Integration Steps

Step 1: Modify API Startup (Priority: CRITICAL)

File: src/alpha_pulse/api/main.py

Add the following to the startup event:

from alpha_pulse.services.regime_detection_service import RegimeDetectionService
from alpha_pulse.integration.regime_integration import RegimeIntegrationHub

@app.on_event("startup")
async def startup_event():
    # ... existing initialization ...
    
    # Initialize regime detection
    regime_config = RegimeDetectionConfig(
        n_states=5,
        update_interval=300,  # 5 minutes
        min_confidence=0.6,
        features={
            'volatility_windows': [5, 10, 20, 60],
            'return_windows': [1, 5, 20, 60],
            'use_vix': True,
            'use_sentiment': True
        }
    )
    
    regime_service = RegimeDetectionService(
        config=regime_config,
        metrics_collector=app.state.metrics_collector,
        alert_manager=app.state.alert_manager,
        cache_manager=app.state.cache_manager
    )
    
    await regime_service.start()
    
    # Create integration hub
    regime_hub = RegimeIntegrationHub(regime_service)
    await regime_hub.initialize()
    
    app.state.regime_service = regime_service
    app.state.regime_hub = regime_hub
    
    logger.info("Regime detection system started")

Step 2: Update Agent Factory (Priority: HIGH)

File: src/alpha_pulse/agents/agent_factory.py

Modify agent creation to pass regime hub:

def create_agent(agent_type: str, config: Dict, regime_hub=None) -> BaseAgent:
    """Create agent with regime awareness."""
    
    agent_map = {
        'technical': RegimeAwareTechnicalAgent,
        'fundamental': RegimeAwareFundamentalAgent,
        'sentiment': RegimeAwareSentimentAgent,
        'value': RegimeAwareValueAgent,
        'activist': RegimeAwareActivistAgent
    }
    
    agent_class = agent_map.get(agent_type)
    if not agent_class:
        raise ValueError(f"Unknown agent type: {agent_type}")
    
    return agent_class(config, regime_hub)

Step 3: Modify Risk Manager (Priority: HIGH)

File: src/alpha_pulse/risk_management/risk_manager.py

Replace the existing RiskManager with RegimeIntegratedRiskManager:

from alpha_pulse.integration.portfolio_risk_regime_integration import RegimeIntegratedRiskManager

class RiskManager(RegimeIntegratedRiskManager):
    """Risk manager with full regime integration."""
    
    def __init__(self, config: Dict, regime_hub=None):
        super().__init__(config, regime_hub)
        # ... existing initialization ...

Step 4: Update Portfolio Optimization (Priority: HIGH)

File: src/alpha_pulse/portfolio/portfolio_optimizer.py

Integrate regime into optimization:

from alpha_pulse.integration.portfolio_risk_regime_integration import RegimeIntegratedPortfolioOptimizer

class PortfolioOptimizer(RegimeIntegratedPortfolioOptimizer):
    """Portfolio optimizer with regime awareness."""
    
    async def optimize(
        self,
        portfolio: Portfolio,
        signals: List[Signal],
        market_data: Dict[str, pd.DataFrame]
    ) -> Dict[str, float]:
        # Regime-aware optimization
        return await self.optimize_portfolio(
            portfolio, signals, market_data
        )

Step 5: Add Regime Endpoints (Priority: MEDIUM)

File: src/alpha_pulse/api/routes/regime.py

Create new regime endpoints:

from fastapi import APIRouter, Depends
from alpha_pulse.integration.regime_integration import RegimeIntegrationHub

router = APIRouter(prefix="/regime", tags=["regime"])

@router.get("/current")
async def get_current_regime(
    regime_hub: RegimeIntegrationHub = Depends(get_regime_hub)
):
    """Get current market regime."""
    return {
        "regime": regime_hub.get_current_regime(),
        "confidence": regime_hub.get_regime_confidence(),
        "parameters": regime_hub.get_regime_params()
    }

@router.get("/history")
async def get_regime_history(
    hours: int = 24,
    regime_service = Depends(get_regime_service)
):
    """Get regime history."""
    return await regime_service.get_regime_history(hours=hours)

@router.post("/analyze")
async def analyze_regime(
    data: MarketDataRequest,
    regime_service = Depends(get_regime_service)
):
    """Analyze regime for given data."""
    return await regime_service.analyze_market_data(
        data.market_data,
        data.timestamp
    )

Step 6: Update Backtesting (Priority: MEDIUM)

File: src/alpha_pulse/backtesting/backtest_engine.py

Add regime tracking to backtesting:

class RegimeAwareBacktestEngine:
    """Backtesting engine with regime analysis."""
    
    def __init__(self, config: Dict):
        self.config = config
        self.regime_detector = MarketRegimeHMM(config)
        self.regime_history = []
    
    async def run_backtest(self, strategy, data):
        """Run backtest with regime tracking."""
        results = []
        
        for timestamp, market_data in data:
            # Detect regime
            regime = await self.regime_detector.detect_regime(
                market_data, timestamp
            )
            self.regime_history.append({
                'timestamp': timestamp,
                'regime': regime['regime'],
                'confidence': regime['confidence']
            })
            
            # Pass regime to strategy
            signals = await strategy.generate_signals(
                market_data, regime
            )
            
            # ... rest of backtesting logic ...
        
        # Add regime analysis to results
        results['regime_analysis'] = self._analyze_regime_performance()
        return results
    
    def _analyze_regime_performance(self):
        """Analyze performance by regime."""
        # Group results by regime
        # Calculate metrics per regime
        # Identify regime-specific patterns
        pass

Step 7: Update Configuration (Priority: LOW)

File: config/regime_detection.yaml

Create comprehensive regime configuration:

regime_detection:
  # Model parameters
  n_states: 5
  model_type: "gaussian_hmm"  # or "garch_hmm", "hierarchical_hmm"
  
  # Update frequency
  update_interval: 300  # seconds
  
  # Features
  features:
    volatility_windows: [5, 10, 20, 60]
    return_windows: [1, 5, 20, 60]
    volume_windows: [5, 20]
    use_vix: true
    use_sentiment: true
    use_market_breadth: true
    use_options_flow: true
  
  # Confidence thresholds
  min_confidence: 0.6
  high_confidence: 0.8
  
  # Alerts
  alert_on_regime_change: true
  alert_on_low_confidence: true
  alert_on_transition_probability: 0.3
  
  # Cache settings
  cache_ttl: 300
  cache_regime_history: true
  
  # Regime-specific parameters
  regime_parameters:
    bull:
      leverage_limit: 1.5
      position_limit: 0.15
      risk_tolerance: "high"
    bear:
      leverage_limit: 0.5
      position_limit: 0.08
      risk_tolerance: "low"
    sideways:
      leverage_limit: 1.0
      position_limit: 0.10
      risk_tolerance: "medium"
    crisis:
      leverage_limit: 0.2
      position_limit: 0.05
      risk_tolerance: "very_low"
    recovery:
      leverage_limit: 1.2
      position_limit: 0.12
      risk_tolerance: "medium_high"

Testing the Integration

1. Unit Tests

Create tests for regime integration:

# tests/test_regime_integration.py

async def test_regime_hub_initialization():
    """Test regime hub starts correctly."""
    regime_service = Mock()
    hub = RegimeIntegrationHub(regime_service)
    await hub.initialize()
    
    assert hub.get_current_regime() is not None

async def test_agent_regime_awareness():
    """Test agents respond to regime changes."""
    hub = Mock()
    hub.get_current_regime.return_value = MarketRegime.BULL
    hub.get_regime_confidence.return_value = 0.8
    
    agent = RegimeAwareTechnicalAgent({}, hub)
    assert agent.should_trade_in_regime()

async def test_risk_manager_regime_adjustment():
    """Test risk manager adjusts for regime."""
    hub = Mock()
    hub.get_regime_params.return_value = {'leverage_multiplier': 0.5}
    
    risk_manager = RegimeIntegratedRiskManager({}, hub)
    assert risk_manager.get_leverage_limit() == 0.5

2. Integration Tests

Test full system with regime detection:

# tests/test_regime_system_integration.py

async def test_full_regime_integration():
    """Test complete system with regime detection."""
    # Start all services
    regime_service = RegimeDetectionService(config)
    await regime_service.start()
    
    hub = RegimeIntegrationHub(regime_service)
    await hub.initialize()
    
    # Create regime-aware components
    agents = [
        RegimeAwareTechnicalAgent({}, hub),
        RegimeAwareFundamentalAgent({}, hub)
    ]
    
    risk_manager = RegimeIntegratedRiskManager({}, hub)
    portfolio_optimizer = RegimeIntegratedPortfolioOptimizer({}, hub)
    
    # Subscribe all to regime updates
    for agent in agents:
        hub.subscribe(agent)
    hub.subscribe(risk_manager)
    hub.subscribe(portfolio_optimizer)
    
    # Simulate regime change
    await regime_service._trigger_regime_change(
        MarketRegime.BULL, MarketRegime.BEAR
    )
    
    # Verify all components updated
    assert risk_manager.get_leverage_limit() < 1.0

Monitoring and Validation

1. Regime Metrics

Add Prometheus metrics:

# Regime detection accuracy
regime_detection_accuracy = Histogram(
    'regime_detection_accuracy',
    'Accuracy of regime detection',
    ['regime']
)

# Regime duration
regime_duration = Histogram(
    'regime_duration_seconds',
    'Duration of market regimes',
    ['regime']
)

# Regime transition frequency
regime_transitions = Counter(
    'regime_transitions_total',
    'Total regime transitions',
    ['from_regime', 'to_regime']
)

2. Performance Metrics by Regime

Track performance per regime:

# Returns by regime
returns_by_regime = Histogram(
    'returns_by_regime',
    'Portfolio returns grouped by regime',
    ['regime']
)

# Risk metrics by regime
risk_by_regime = Histogram(
    'risk_metrics_by_regime',
    'Risk metrics grouped by regime',
    ['regime', 'metric']
)

3. Dashboard Integration

Add regime panel to monitoring dashboard:

Common Issues and Solutions

Issue 1: Regime Detection Service Not Starting

Symptom: No regime data available Solution: Check startup logs, ensure service initialization in API startup

Issue 2: Agents Not Receiving Regime Updates

Symptom: Agents using default parameters Solution: Verify agents are subscribed to regime hub

Issue 3: High Regime Switching Frequency

Symptom: Too many regime changes Solution: Increase min_confidence threshold, add transition smoothing

Issue 4: Poor Performance in Specific Regime

Symptom: Losses during certain regimes Solution: Review regime-specific parameters, adjust strategy selection

Performance Impact

Expected improvements with full integration:

Next Steps

  1. Immediate (Week 1):
    • Implement API startup changes
    • Update agent factory
    • Add regime endpoints
  2. Short-term (Week 2-3):
    • Integrate risk manager
    • Update portfolio optimizer
    • Add monitoring
  3. Medium-term (Month 1-2):
    • Complete backtesting integration
    • Add regime-specific strategies
    • Implement advanced features
  4. Long-term:
    • Machine learning optimization
    • Multi-timeframe regimes
    • Cross-asset regime correlation

Conclusion

Proper regime integration transforms AlphaPulse from a reactive to a proactive trading system. The infrastructure is already excellent - it just needs to be connected to the trading flow. Following this guide will unlock the full potential of the regime detection system and significantly improve trading performance across all market conditions.