2025-05-26 13:25:56 +08:00

14 KiB

Real-Time Strategy Implementation Plan - Option 1: Incremental Calculation Architecture

Implementation Overview

This document outlines the step-by-step implementation plan for updating the trading strategy system to support real-time data processing with incremental calculations. The implementation is divided into phases to ensure stability and backward compatibility.

Phase 1: Foundation and Base Classes (Week 1-2) COMPLETED

1.1 Create Indicator State Classes COMPLETED

Priority: HIGH Files created:

  • cycles/IncStrategies/indicators/
    • __init__.py
    • base.py - Base IndicatorState class
    • moving_average.py - MovingAverageState
    • rsi.py - RSIState
    • supertrend.py - SupertrendState
    • bollinger_bands.py - BollingerBandsState
    • atr.py - ATRState (for Supertrend)

Tasks:

  • Create IndicatorState abstract base class
  • Implement MovingAverageState with incremental calculation
  • Implement RSIState with incremental calculation
  • Implement ATRState for Supertrend calculations
  • Implement SupertrendState with incremental calculation
  • Implement BollingerBandsState with incremental calculation
  • Add comprehensive unit tests for each indicator state (PENDING - Phase 4)
  • Validate accuracy against traditional batch calculations (PENDING - Phase 4)

Acceptance Criteria:

  • All indicator states produce identical results to batch calculations (within 0.01% tolerance)
  • Memory usage is constant regardless of data length
  • Update time is <0.1ms per data point
  • All indicators handle edge cases (NaN, zero values, etc.)

1.2 Update Base Strategy Class COMPLETED

Priority: HIGH Files created:

  • cycles/IncStrategies/base.py

Tasks:

  • Add new abstract methods to IncStrategyBase:
    • get_minimum_buffer_size()
    • calculate_on_data()
    • supports_incremental_calculation()
  • Add new properties:
    • calculation_mode
    • is_warmed_up
  • Add internal state management:
    • _calculation_mode
    • _is_warmed_up
    • _data_points_received
    • _timeframe_buffers
    • _timeframe_last_update
    • _indicator_states
    • _last_signals
    • _signal_history
  • Implement buffer management methods:
    • _update_timeframe_buffers()
    • _should_update_timeframe()
    • _get_timeframe_buffer()
  • Add error handling and recovery methods:
    • _validate_calculation_state()
    • _recover_from_state_corruption()
    • handle_data_gap()
  • Provide default implementations for backward compatibility

Acceptance Criteria:

  • Existing strategies continue to work without modification (compatibility layer)
  • New interface is fully documented
  • Buffer management is memory-efficient
  • Error recovery mechanisms are robust

1.3 Create Configuration System COMPLETED

Priority: MEDIUM Files created:

  • Configuration integrated into base classes

Tasks:

  • Define strategy configuration dataclass (integrated into base class)
  • Add incremental calculation settings
  • Add buffer size configuration
  • Add performance monitoring settings
  • Add error handling configuration

Phase 2: Strategy Implementation (Week 3-4) 🔄 IN PROGRESS

2.1 Update RandomStrategy (Simplest) COMPLETED

Priority: HIGH Files created:

  • cycles/IncStrategies/random_strategy.py
  • cycles/IncStrategies/test_random_strategy.py

Tasks:

  • Implement get_minimum_buffer_size() (return {"1min": 1})
  • Implement calculate_on_data() (minimal processing)
  • Implement supports_incremental_calculation() (return True)
  • Update signal generation to work without pre-calculated arrays
  • Add comprehensive testing
  • Validate against current implementation

Acceptance Criteria:

  • RandomStrategy works in both batch and incremental modes
  • Signal generation is identical between modes
  • Memory usage is minimal
  • Performance is optimal (0.006ms update, 0.048ms signal generation)

2.2 Update DefaultStrategy (Supertrend-based) 🔄 NEXT

Priority: HIGH Files to create:

  • cycles/IncStrategies/default_strategy.py

Tasks:

  • Implement get_minimum_buffer_size() based on timeframe
  • Implement _initialize_indicator_states() for three Supertrend indicators
  • Implement calculate_on_data() with incremental Supertrend updates
  • Update get_entry_signal() to work with current state instead of arrays
  • Update get_exit_signal() to work with current state instead of arrays
  • Implement meta-trend calculation from current Supertrend states
  • Add state validation and recovery
  • Comprehensive testing against current implementation

Acceptance Criteria:

  • Supertrend calculations are identical to batch mode
  • Meta-trend logic produces same signals
  • Memory usage is bounded by buffer size
  • Performance meets <1ms update target

2.3 Update BBRSStrategy (Bollinger Bands + RSI)

Priority: HIGH Files to create:

  • cycles/IncStrategies/bbrs_strategy.py

Tasks:

  • Implement get_minimum_buffer_size() based on BB and RSI periods
  • Implement _initialize_indicator_states() for BB, RSI, and market regime
  • Implement calculate_on_data() with incremental indicator updates
  • Update signal generation to work with current indicator states
  • Implement market regime detection with incremental updates
  • Add state validation and recovery
  • Comprehensive testing against current implementation

Acceptance Criteria:

  • BB and RSI calculations match batch mode exactly
  • Market regime detection works incrementally
  • Signal generation is identical between modes
  • Performance meets targets

Phase 3: Strategy Manager Updates (Week 5)

3.1 Update StrategyManager

Priority: HIGH Files to create:

  • cycles/IncStrategies/manager.py

Tasks:

  • Add process_new_data() method for coordinating incremental updates
  • Add buffer size calculation across all strategies
  • Add initialization mode detection and coordination
  • Update signal combination to work with incremental mode
  • Add performance monitoring and metrics collection
  • Add error handling for strategy failures
  • Add configuration management

Acceptance Criteria:

  • Manager coordinates multiple strategies efficiently
  • Buffer sizes are calculated correctly
  • Error handling is robust
  • Performance monitoring works

3.2 Add Performance Monitoring

Priority: MEDIUM Files to create:

  • cycles/IncStrategies/monitoring.py

Tasks:

  • Create performance metrics collection
  • Add latency measurement
  • Add memory usage tracking
  • Add signal generation frequency tracking
  • Add error rate monitoring
  • Create performance reporting

Phase 4: Integration and Testing (Week 6)

4.1 Update StrategyTrader Integration

Priority: HIGH Files to modify:

  • TraderFrontend/trader/strategy_trader.py

Tasks:

  • Update _process_strategies() to use incremental mode
  • Add buffer management for real-time data
  • Update initialization to support incremental mode
  • Add performance monitoring integration
  • Add error recovery mechanisms
  • Update configuration handling

Acceptance Criteria:

  • Real-time trading works with incremental strategies
  • Performance is significantly improved
  • Memory usage is bounded
  • Error recovery works correctly

4.2 Update Backtesting Integration

Priority: MEDIUM Files to modify:

  • cycles/backtest.py
  • main.py

Tasks:

  • Add support for incremental mode in backtesting
  • Maintain backward compatibility with batch mode
  • Add performance comparison between modes
  • Update configuration handling

Acceptance Criteria:

  • Backtesting works in both modes
  • Results are identical between modes
  • Performance comparison is available

4.3 Comprehensive Testing

Priority: HIGH Files to create:

  • tests/strategies/test_incremental_calculation.py
  • tests/strategies/test_indicator_states.py
  • tests/strategies/test_performance.py
  • tests/strategies/test_integration.py

Tasks:

  • Create unit tests for all indicator states
  • Create integration tests for strategy implementations
  • Create performance benchmarks
  • Create accuracy validation tests
  • Create memory usage tests
  • Create error recovery tests
  • Create real-time simulation tests

Acceptance Criteria:

  • All tests pass with 100% accuracy
  • Performance targets are met
  • Memory usage is within bounds
  • Error recovery works correctly

Phase 5: Optimization and Documentation (Week 7)

5.1 Performance Optimization

Priority: MEDIUM

Tasks:

  • Profile and optimize indicator calculations
  • Optimize buffer management
  • Optimize signal generation
  • Add caching where appropriate
  • Optimize memory allocation patterns

5.2 Documentation

Priority: MEDIUM

Tasks:

  • Update all docstrings
  • Create migration guide
  • Create performance guide
  • Create troubleshooting guide
  • Update README files

5.3 Configuration and Monitoring

Priority: LOW

Tasks:

  • Add configuration validation
  • Add runtime configuration updates
  • Add monitoring dashboards
  • Add alerting for performance issues

Implementation Status Summary

Completed (Phase 1 & 2.1)

  • Foundation Infrastructure: Complete incremental indicator system
  • Base Classes: Full IncStrategyBase with buffer management and error handling
  • Indicator States: All required indicators (MA, RSI, ATR, Supertrend, Bollinger Bands)
  • Memory Management: Bounded buffer system with configurable sizes
  • Error Handling: State validation, corruption recovery, data gap handling
  • Performance Monitoring: Built-in metrics collection and timing
  • IncRandomStrategy: Complete implementation with testing (0.006ms updates, 0.048ms signals)

🔄 Current Focus (Phase 2.2)

  • DefaultStrategy Implementation: Converting Supertrend-based strategy to incremental mode
  • Meta-trend Logic: Adapting meta-trend calculation to work with current state
  • Performance Validation: Ensuring <1ms update targets are met

📋 Remaining Work

  • DefaultStrategy and BBRSStrategy implementations
  • Strategy manager updates
  • Integration with existing systems
  • Comprehensive testing suite
  • Performance optimization
  • Documentation updates

Implementation Details

Buffer Size Calculations

DefaultStrategy

def get_minimum_buffer_size(self) -> Dict[str, int]:
    primary_tf = self.params.get("timeframe", "15min")
    
    # Supertrend needs 50 periods for reliable calculation
    if primary_tf == "15min":
        return {"15min": 50, "1min": 750}  # 50 * 15 = 750 minutes
    elif primary_tf == "5min":
        return {"5min": 50, "1min": 250}   # 50 * 5 = 250 minutes
    elif primary_tf == "30min":
        return {"30min": 50, "1min": 1500} # 50 * 30 = 1500 minutes
    elif primary_tf == "1h":
        return {"1h": 50, "1min": 3000}    # 50 * 60 = 3000 minutes
    else:  # 1min
        return {"1min": 50}

BBRSStrategy

def get_minimum_buffer_size(self) -> Dict[str, int]:
    bb_period = self.params.get("bb_period", 20)
    rsi_period = self.params.get("rsi_period", 14)
    
    # Need max of BB and RSI periods plus warmup
    min_periods = max(bb_period, rsi_period) + 10
    return {"1min": min_periods}

Error Recovery Strategy

  1. State Validation: Periodic validation of indicator states
  2. Graceful Degradation: Fall back to batch calculation if incremental fails
  3. Automatic Recovery: Reinitialize from buffer data when corruption detected
  4. Monitoring: Track error rates and performance metrics

Performance Targets

  • Incremental Update: <1ms per data point
  • Signal Generation: <10ms per strategy
  • Memory Usage: <100MB per strategy (bounded by buffer size)
  • Accuracy: 99.99% identical to batch calculations

Testing Strategy

  1. Unit Tests: Test each component in isolation
  2. Integration Tests: Test strategy combinations
  3. Performance Tests: Benchmark against current implementation
  4. Accuracy Tests: Validate against known good results
  5. Stress Tests: Test with high-frequency data
  6. Memory Tests: Validate memory usage bounds

Risk Mitigation

Technical Risks

  • Accuracy Issues: Comprehensive testing and validation
  • Performance Regression: Benchmarking and optimization
  • Memory Leaks: Careful buffer management and testing
  • State Corruption: Validation and recovery mechanisms

Implementation Risks

  • Complexity: Phased implementation with incremental testing
  • Breaking Changes: Backward compatibility layer
  • Timeline: Conservative estimates with buffer time

Operational Risks

  • Production Issues: Gradual rollout with monitoring
  • Data Quality: Robust error handling and validation
  • System Load: Performance monitoring and alerting

Success Criteria

Functional Requirements

  • All strategies work in incremental mode
  • Signal generation is identical to batch mode
  • Real-time performance is significantly improved
  • Memory usage is bounded and predictable

Performance Requirements

  • 10x improvement in processing speed for real-time data
  • 90% reduction in memory usage for long-running systems
  • <1ms latency for incremental updates
  • <10ms latency for signal generation

Quality Requirements

  • 100% test coverage for new code
  • 99.99% accuracy compared to batch calculations
  • Zero memory leaks in long-running tests
  • Robust error handling and recovery

This implementation plan provides a structured approach to implementing the incremental calculation architecture while maintaining system stability and backward compatibility.