# Strategy Framework Architecture This document describes the strategy framework design. ## Strategy Hierarchy ``` BaseStrategy (Abstract) │ ├──► Technical Strategies │ ├──► RSIStrategy │ ├──► MACDStrategy │ ├──► MovingAverageStrategy │ ├──► ConfirmedStrategy (Multi-Indicator) │ ├──► DivergenceStrategy │ └──► BollingerMeanReversionStrategy │ ├──► Ensemble Strategies │ └──► ConsensusStrategy │ ├──► Other Strategies │ ├──► DCAStrategy │ ├──► GridStrategy │ └──► MomentumStrategy │ └──► CustomStrategy (user-defined) ``` ## Base Strategy Interface All strategies implement: ```python class BaseStrategy(ABC): async def on_data(new_data: pd.DataFrame) async def generate_signal() -> Dict[str, Any] async def calculate_position_size(capital, risk) -> float async def start() async def stop() ``` ## Strategy Lifecycle ``` 1. Initialization └──► __init__(parameters) 2. Activation └──► start() 3. Data Processing └──► on_data(new_data) └──► generate_signal() └──► Trading Engine 4. Deactivation └──► stop() ``` ## Strategy Registry Manages available strategies: ```python StrategyRegistry ├──► register_strategy(name, class) ├──► get_strategy_class(name) └──► list_available() ``` ## Multi-Timeframe Support Strategies can use multiple timeframes: ``` Primary Timeframe (1h) │ ├──► Signal Generation │ └──► Higher Timeframe (1d) - Trend Confirmation │ └──► Lower Timeframe (15m) - Entry Timing ``` ## Strategy Scheduling Strategies can be scheduled: - **Continuous**: Run on every new candle - **Time-based**: Run at specific times - **Condition-based**: Run when conditions met ## Signal Generation Signal flow: ``` Data Update │ ▼ Indicator Calculation │ ▼ Strategy Logic │ ▼ Signal Generation │ ├──► "buy" - Generate buy signal ├──► "sell" - Generate sell signal └──► "hold" - No action ``` ## Position Sizing Strategies calculate position sizes: - **Fixed Percentage**: Fixed % of capital - **Kelly Criterion**: Optimal position sizing based on win rate - **Volatility-Based**: Adjusts based on market volatility (ATR) ## Advanced Features ### Trend Filtering All strategies can optionally use ADX-based trend filtering: ```python signal = strategy.apply_trend_filter( signal, ohlcv_data, adx_period=14, min_adx=25.0 ) ``` This filters out signals when: - ADX < threshold (weak trend/chop) - Signal direction doesn't match trend direction ### Multi-Indicator Confirmation The ConfirmedStrategy requires multiple indicators to agree before generating signals, reducing false signals by 20-30%. ### Divergence Detection Divergence strategies detect price vs. indicator divergences: - Bullish divergence: Price lower low, indicator higher low → BUY - Bearish divergence: Price higher high, indicator lower high → SELL ### Ensemble Methods ConsensusStrategy aggregates signals from multiple strategies: - Weighted voting by strategy performance - Minimum consensus threshold - Dynamic weighting based on recent performance - **Kelly Criterion**: Optimal position sizing - **Volatility-based**: Based on ATR - **Risk-based**: Based on stop-loss distance ## Strategy Parameters Configurable parameters: - Strategy-specific parameters (e.g., RSI period) - Risk parameters (position size, stop-loss) - Timeframe settings - Symbol selection ## Strategy Execution Execution flow: ``` Strategy Signal │ ▼ Trading Engine │ ├──► Risk Check │ ├──► Position Sizing │ └──► Order Execution │ ├──► Paper Trading └──► Live Trading ``` ## Strategy Performance Performance tracking: - Win rate - Total return - Sharpe ratio - Max drawdown - Number of trades ## Extensibility Easy to add new strategies: 1. Inherit from `BaseStrategy` 2. Implement required methods 3. Register with `StrategyRegistry` 4. Configure and use