Skip to content

Commit ce203e4

Browse files
authored
Merge pull request #43 from AKKI0511/add-real-time-position-manager-with-risk-controls
Add real-time position manager with intraday risk controls
2 parents 67ce939 + cd0b7ad commit ce203e4

File tree

12 files changed

+565
-37
lines changed

12 files changed

+565
-37
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
- 🤖 Models: ensemble VotingClassifier (LR, RF, XGBoost) with Optuna tuning
2424
- 📈 Backtesting: execution costs, slippage, liquidity limits, market impact modeling, portfolio helpers
2525
- 🛡️ Risk management: drawdown and turnover guards
26+
- 📟 Live trading: real-time position manager with intraday risk controls
2627
- 🛠️ CLI: end‑to‑end pipeline, evaluation, and model backtest in one place
2728

2829
## Quickstart
@@ -67,6 +68,7 @@ Artifacts are written to:
6768
- `config/backtest_config.yaml`: execution costs, slippage, liquidity
6869
- `config/risk_config.yaml`: drawdown protection and turnover limits
6970
- `config/streaming.yaml`: providers, auth, subscriptions (optional)
71+
- `config/position_manager.yaml`: live position tracking and impact parameters
7072

7173
Time‑aware evaluation rules:
7274
- If `data.test_start` and `data.test_end` set: train = dates < `test_start`; test = `test_start` ≤ dates ≤ `test_end`

config/position_manager.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
position_manager:
2+
risk_management:
3+
drawdown_protection:
4+
enabled: true
5+
max_drawdown_pct: 0.2
6+
impact:
7+
enabled: true
8+
model: linear
9+
alpha: 0.1
10+
beta: 0.05
11+
reconciliation:
12+
intraday: "1m"
13+
daily: "1d"
14+
mode: paper

docs/README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ The [API Documentation](api/) provides comprehensive coverage of:
4545
- **Feature Engineering** - Technical indicators and custom features
4646
- **Machine Learning Models** - MomentumClassifier and training utilities
4747
- **Backtesting Framework** - Trade simulation and performance metrics
48-
- **Trading Utilities** - Risk management and position sizing
48+
- **Trading Utilities** - Risk management, position sizing, real-time position control
4949
- **Utility Functions** - Metrics, visualization, and configuration schemas
5050
- **Configuration** - Model and feature configuration examples
5151

@@ -84,9 +84,10 @@ QuantTradeAI/
8484
│ ├── backtest/ # Backtesting
8585
│ │ └── backtester.py # Trade simulation
8686
│ ├── trading/ # Trading utilities
87-
│ │ ├── drawdown_guard.py # Drawdown protection
88-
│ │ ├── portfolio.py # Portfolio operations
89-
│ │ └── risk_manager.py # Risk coordination
87+
│ │ ├── drawdown_guard.py # Drawdown protection
88+
│ │ ├── portfolio.py # Portfolio operations
89+
│ │ ├── position_manager.py # Real-time position tracking
90+
│ │ └── risk_manager.py # Risk coordination
9091
│ └── utils/ # Utilities
9192
│ ├── metrics.py # Performance metrics
9293
│ ├── visualization.py # Plotting functions

docs/api/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Complete API documentation for QuantTradeAI.
99
- **[Feature Engineering](features.md)** - Technical indicators and custom features
1010
- **[Machine Learning](models.md)** - MomentumClassifier and training utilities
1111
- **[Backtesting](backtesting.md)** - Trade simulation, market impact models, and performance metrics
12-
- **[Trading Utilities](trading.md)** - Risk management and position sizing
12+
- **[Trading Utilities](trading.md)** - Risk management, position sizing, live position control
1313
- **[Streaming](streaming.md)** - Real-time WebSocket gateway, adapters, monitoring
1414

1515
## 🚀 Quick Navigation
@@ -19,7 +19,7 @@ Complete API documentation for QuantTradeAI.
1919
- **Feature Creation**: [Feature Engineering](features.md)
2020
- **Model Training**: [Machine Learning](models.md)
2121
- **Strategy Testing**: [Backtesting](backtesting.md)
22-
- **Risk Management**: [Trading Utilities](trading.md)
22+
- **Risk Management & Execution**: [Trading Utilities](trading.md)
2323
- **Real-time Data**: [Streaming](streaming.md)
2424

2525
### By Component

docs/api/trading.md

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,29 @@
11
# Trading Utilities
22

3-
API documentation for risk management and position sizing.
3+
API documentation for risk management, position sizing, and live position control.
4+
5+
## Position Manager
6+
7+
### `PositionManager(config_path: str)`
8+
9+
Thread-safe real-time position tracking that ties into the streaming gateway
10+
and enforces intraday risk limits.
11+
12+
**Parameters:**
13+
- `config_path` (str): Path to a YAML file matching `PositionManagerConfig`.
14+
15+
**Example:**
16+
```python
17+
from quanttradeai.streaming import StreamingGateway
18+
from quanttradeai.trading import PositionManager
19+
20+
gw = StreamingGateway("config/streaming.yaml")
21+
pm = PositionManager("config/position_manager.yaml", gateway=gw)
22+
pm.start()
23+
```
24+
25+
The manager reconciles intraday and daily positions while applying
26+
drawdown protection and market-impact-aware execution.
427

528
## Risk Management
629

@@ -202,12 +225,30 @@ print(f"Sortino Ratio: {risk_metrics['sortino_ratio']:.2f}")
202225
print(f"Calmar Ratio: {risk_metrics['calmar_ratio']:.2f}")
203226
```
204227

205-
## Configuration
206-
207-
### Risk Management Configuration
208-
```yaml
209-
trading:
210-
position_size: 0.2
228+
## Configuration
229+
230+
### Position Manager Configuration
231+
```yaml
232+
position_manager:
233+
risk_management:
234+
drawdown_protection:
235+
enabled: true
236+
max_drawdown_pct: 0.2
237+
impact:
238+
enabled: true
239+
model: linear
240+
alpha: 0.1
241+
beta: 0.05
242+
reconciliation:
243+
intraday: "1m"
244+
daily: "1d"
245+
mode: paper
246+
```
247+
248+
### Risk Management Configuration
249+
```yaml
250+
trading:
251+
position_size: 0.2
211252
stop_loss: 0.02
212253
take_profit: 0.04
213254
max_positions: 5

docs/configuration.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ The framework uses several configuration files:
1111
- **`config/backtest_config.yaml`** - Execution settings for backtests
1212
- **`config/impact_config.yaml`** - Market impact parameters by asset class
1313
- **`config/risk_config.yaml`** - Drawdown protection and turnover limits
14+
- **`config/position_manager.yaml`** - Live position tracking and intraday risk controls
1415

1516
## 🔧 Model Configuration
1617

@@ -122,6 +123,29 @@ The `impact` block activates market impact modeling. Parameters `alpha`,
122123
`beta`, and optional `gamma` control the chosen model, while `decay` and
123124
`spread` apply temporary impact decay and bid-ask spread costs. Default
124125
parameter sets per asset class can be defined in `config/impact_config.yaml`.
126+
127+
### Position Manager
128+
129+
```yaml
130+
position_manager:
131+
risk_management:
132+
drawdown_protection:
133+
enabled: true
134+
max_drawdown_pct: 0.2
135+
impact:
136+
enabled: true
137+
model: linear
138+
alpha: 0.1
139+
beta: 0.05
140+
reconciliation:
141+
intraday: "1m"
142+
daily: "1d"
143+
mode: paper
144+
```
145+
146+
Controls live position tracking and execution logic. The `impact` section
147+
reuses backtest models, while `reconciliation` intervals harmonize intraday and
148+
daily views. Set `mode` to `paper` or `live`.
125149

126150
## 🔧 Feature Configuration
127151

docs/quick-reference.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,17 @@ streaming:
254254
reconnect_attempts: 3
255255
health_check_interval: 30
256256
```
257+
258+
### Position Manager
259+
260+
```python
261+
from quanttradeai.streaming import StreamingGateway
262+
from quanttradeai.trading import PositionManager
263+
264+
gw = StreamingGateway("config/streaming.yaml")
265+
pm = PositionManager("config/position_manager.yaml", gateway=gw)
266+
pm.start()
267+
```
257268

258269
## 🚨 Error Handling
259270

quanttradeai/__init__.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,26 @@
3030
AlphaVantageDataSource,
3131
WebSocketDataSource,
3232
)
33+
34+
# Lazily import optional dependencies to keep lightweight usage possible
3335
from .data.loader import DataLoader
3436
from .data.processor import DataProcessor
35-
from .models.classifier import MomentumClassifier
37+
38+
try: # pragma: no cover - optional heavy dependency
39+
from .models.classifier import MomentumClassifier
40+
except Exception: # pragma: no cover - tolerate missing ML libs
41+
MomentumClassifier = None # type: ignore[assignment]
3642
from .trading.portfolio import PortfolioManager
3743
from .trading.risk import apply_stop_loss_take_profit, position_size
38-
from .backtest import (
39-
simulate_trades,
40-
compute_metrics,
41-
MarketImpactModel,
42-
LinearImpactModel,
43-
SquareRootImpactModel,
44-
AlmgrenChrissModel,
45-
ImpactCalculator,
46-
)
44+
from .backtest import (
45+
simulate_trades,
46+
compute_metrics,
47+
MarketImpactModel,
48+
LinearImpactModel,
49+
SquareRootImpactModel,
50+
AlmgrenChrissModel,
51+
ImpactCalculator,
52+
)
4753

4854
__all__ = [
4955
"DataSource",
@@ -53,14 +59,14 @@
5359
"DataLoader",
5460
"DataProcessor",
5561
"MomentumClassifier",
56-
"PortfolioManager",
57-
"apply_stop_loss_take_profit",
58-
"position_size",
59-
"simulate_trades",
60-
"compute_metrics",
61-
"MarketImpactModel",
62-
"LinearImpactModel",
63-
"SquareRootImpactModel",
64-
"AlmgrenChrissModel",
65-
"ImpactCalculator",
66-
]
62+
"PortfolioManager",
63+
"apply_stop_loss_take_profit",
64+
"position_size",
65+
"simulate_trades",
66+
"compute_metrics",
67+
"MarketImpactModel",
68+
"LinearImpactModel",
69+
"SquareRootImpactModel",
70+
"AlmgrenChrissModel",
71+
"ImpactCalculator",
72+
]

quanttradeai/trading/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818
from .risk import apply_stop_loss_take_profit, position_size
1919
from .drawdown_guard import DrawdownGuard
2020
from .risk_manager import RiskManager
21+
from .position_manager import PositionManager
2122

2223
__all__ = [
2324
"PortfolioManager",
2425
"apply_stop_loss_take_profit",
2526
"position_size",
2627
"DrawdownGuard",
2728
"RiskManager",
29+
"PositionManager",
2830
]

0 commit comments

Comments
 (0)