# Risk Management Architecture

This document describes the risk management system.

## Risk Management Components

```
Risk Manager
    ├──► Pre-Trade Checks
    │         │
    │         ├──► Position Sizing
    │         ├──► Daily Loss Limit
    │         └──► Portfolio Allocation
    │
    ├──► Real-Time Monitoring
    │         │
    │         ├──► Drawdown Monitoring
    │         ├──► Position Monitoring
    │         └──► Portfolio Monitoring
    │
    └──► Stop Loss Management
            │
            ├──► Stop Loss Orders
            └──► Trailing Stops
```

## Pre-Trade Risk Checks

Before executing any trade:

1. **Position Sizing Check**
   - Verify position size within limits
   - Check portfolio allocation
   - Validate against risk parameters

2. **Daily Loss Limit Check**
   - Calculate current daily P&L
   - Compare against daily loss limit
   - Block trades if limit exceeded

3. **Drawdown Check**
   - Calculate current drawdown
   - Compare against max drawdown limit
   - Block trades if limit exceeded

4. **Portfolio Allocation Check**
   - Verify total exposure within limits
   - Check per-asset allocation
   - Validate diversification requirements

## Position Sizing Methods

### Fixed Percentage

```python
position_size = capital * percentage
```

### Kelly Criterion

```python
f = (bp - q) / b
position_size = capital * f
```

### Volatility-Based

```python
position_size = (capital * risk_percentage) / (stop_loss_distance * price)
```

## Risk Limits

Configurable limits:

- **Max Drawdown**: Maximum allowed drawdown percentage
- **Daily Loss Limit**: Maximum daily loss percentage
- **Position Size Limit**: Maximum position value
- **Portfolio Exposure**: Maximum portfolio exposure percentage

## Stop Loss Management

### Stop Loss Types

- **Fixed Stop Loss**: Fixed price level
- **Trailing Stop**: Adjusts with price movement
  - Percentage-based: Adjusts by fixed percentage
  - ATR-based: Adjusts based on volatility (Average True Range)
- **Percentage Stop**: Percentage below entry
- **ATR-based Stop**: Based on Average True Range (volatility-adjusted)
  - Automatically calculates stop distance using ATR multiplier
  - Adapts to market volatility conditions
  - Configurable ATR period (default: 14) and multiplier (default: 2.0)
  - Works with both fixed and trailing stops

### ATR-Based Dynamic Stops

ATR-based stops provide better risk management in volatile markets:

```python
stop_loss_manager.set_stop_loss(
    position_id=1,
    stop_price=entry_price,
    use_atr=True,
    atr_multiplier=Decimal('2.0'),
    atr_period=14,
    ohlcv_data=market_data,
    trailing=True
)
```

**Benefits:**
- Adapts to market volatility
- Tighter stops in low volatility, wider in high volatility
- Reduces stop-outs during normal market noise
- Better risk-adjusted returns

**Calculation:**
- Stop distance = ATR × multiplier
- For long positions: stop_price = entry_price - (ATR × multiplier)
- For short positions: stop_price = entry_price + (ATR × multiplier)

### Stop Loss Execution

```
Price Update
    │
    ▼
Stop Loss Check
    │
    ├──► Stop Loss Triggered?
    │         │
    │         └──► Execute Market Sell
    │
    └──► Update Trailing Stop (if applicable)
```

## Real-Time Monitoring

Continuous monitoring of:

- Portfolio value
- Unrealized P&L
- Drawdown levels
- Position sizes
- Risk metrics

## Risk Alerts

Automatic alerts for:

- Drawdown threshold exceeded
- Daily loss limit reached
- Position size exceeded
- Portfolio exposure exceeded

## Integration Points

Risk management integrates with:

- **Trading Engine**: Pre-trade validation
- **Order Manager**: Position tracking
- **Portfolio Tracker**: Real-time monitoring
- **Alert System**: Risk alerts

