2025-12-26 01:15:43 -05:00
# Risk Management Architecture
2025-12-31 21:25:06 -05:00
## Overview
The risk management system provides comprehensive risk control mechanisms including position sizing, stop-loss management, drawdown limits, Value at Risk (VaR) calculation, and portfolio correlation analysis.
## Components
### Position Sizing
**Location**: `src/risk/position_sizing.py`
**Methods**:
- **Standard Position Sizing**: Percentage-based with fee accounting
- **Kelly Criterion**: Optimal position sizing with fractional Kelly (configurable)
- **Volatility-Adjusted**: ATR-based position sizing (lower vol = larger positions)
- **Regime-Aware**: Adjusts position size based on market regime
- **Confidence-Based**: ML model confidence-adjusted position sizing
**Usage**:
```python
from src.risk.position_sizing import PositionSizingManager
sizer = PositionSizingManager()
# Standard sizing
quantity = sizer.calculate_size(symbol, price, balance, risk_percent)
# Kelly Criterion (fractional)
kelly_pct = sizer.calculate_kelly_criterion(win_rate=0.6, avg_win=100, avg_loss=50, fractional=0.25)
# Volatility-adjusted
quantity = sizer.calculate_volatility_adjusted_size(symbol, price, balance, volatility_multiplier=0.8)
# Regime-aware
quantity = sizer.calculate_regime_aware_size(symbol, price, balance, market_regime="trending_up")
```
### Value at Risk (VaR)
**Location**: `src/risk/var_calculator.py`
**Methods**:
1. **Historical VaR ** : Uses historical portfolio returns distribution
2. **Parametric VaR ** : Assumes normal distribution (variance-covariance method)
3. **Monte Carlo VaR ** : Simulates future returns using estimated parameters
4. **Conditional VaR (CVaR) ** : Expected loss given that loss exceeds VaR
**Usage**:
```python
from src.risk.var_calculator import get_var_calculator
var_calc = get_var_calculator()
# Calculate all methods
results = await var_calc.calculate_all_var_methods(
portfolio_value=Decimal("10000.0"),
confidence_level=0.95,
holding_period_days=1
)
# Individual methods
historical_var = await var_calc.calculate_historical_var(...)
parametric_var = await var_calc.calculate_parametric_var(...)
monte_carlo_var = await var_calc.calculate_monte_carlo_var(...)
cvar = await var_calc.calculate_cvar(...)
```
### Portfolio Correlation Analysis
**Location**: `src/portfolio/correlation_analyzer.py`
**Features**:
- Correlation matrix calculation for portfolio symbols
- Diversification scoring (lower correlation = better)
- Concentration risk analysis
- Correlation-based position limits
**Usage**:
```python
from src.portfolio.correlation_analyzer import get_correlation_analyzer
analyzer = get_correlation_analyzer()
# Analyze current portfolio
analysis = await analyzer.analyze_portfolio_correlation(paper_trading=True)
# Check correlation limits before adding position
allowed, reason = await analyzer.check_correlation_limits(
symbol="ETH/USD",
new_position_value=Decimal("1000.0"),
max_correlation=0.8
)
```
### Stop-Loss Management
**Location**: `src/risk/stop_loss.py`
Provides dynamic stop-loss adjustment and management.
### Risk Limits
**Location**: `src/risk/limits.py`
Manages:
- Daily loss limits
- Maximum drawdown limits
- Portfolio allocation limits
### Risk Manager
**Location**: `src/risk/manager.py`
Orchestrates all risk management components and provides unified risk checking interface.
2025-12-26 01:15:43 -05:00
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