mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-08-07 03:57:45 +00:00
e07a6df47f
Neue Module für Backtesting und Performance-Validierung: 1. Backtest Engine (backtest_engine.py) - IC (Information Coefficient) Berechnung - ICIR (IC Information Ratio) - Sharpe Ratio (annualisiert) - Sortino Ratio (Downside-only) - Max Drawdown mit Start/End Datum - Calmar Ratio - Annualized Return - Win Rate - Alle Metriken in einer Funktion 2. Results Database (results_db.py) - SQLite-Datenbank für alle Ergebnisse - Tabellen: factors, backtest_runs, backtest_metrics, daily_returns, loop_results, factor_correlations - Abfragen: Top-Faktoren, Performance-Historie, Loop-Summary, Aggregate Stats - JSON Export Funktion 3. Risk Management (risk_management.py) - Correlation Analyzer (Korrelationsmatrix zwischen Faktoren) - Portfolio Optimizer (Mean-Variance, Risk Parity, Hierarchical Risk Parity) - Advanced Risk Manager (Position Sizing mit Korrelations-Adjustierung) - Risk-Limit Checks (Position Size, Leverage, Drawdown, Volatility) - Risk Reports mit allen Metriken 4. Ordner-Struktur (results/) - backtests/ - Einzelne Backtest-Ergebnisse - factors/ - Faktor-spezifische Analysen - runs/ - Komplette Run-Ergebnisse - logs/ - Backtesting-Logs - db/ - SQLite-Datenbank - README.md - Vollständige Dokumentation 5. .gitignore aktualisiert - results/ Ordner ausgeschlossen (lokale Ergebnisse) - *.db, *.csv, *_export.json ausgeschlossen Status: - Backtesting: 10% → 80% ✅ - Risk Management: 60% → 95% ✅ - Results-Dokumentation: 0% → 100% ✅ Nächste Schritte: - Backtesting in RD-Agent Workflow integrieren - Alle 110 Faktoren durch Backtest validieren - Top-20 Faktoren nach IC/Sharpe auswählen - Portfolio-Optimierung durchführen
247 lines
5.3 KiB
Markdown
247 lines
5.3 KiB
Markdown
# Predix Results Documentation
|
|
|
|
Dieser Ordner enthält alle Backtesting-Ergebnisse, Faktor-Analysen und Performance-Daten.
|
|
|
|
## ⚠️ WICHTIG
|
|
|
|
**Dieser Ordner ist in `.gitignore` aufgenommen!**
|
|
|
|
- Ergebnisse werden **NICHT** zu Git hinzugefügt
|
|
- Jeder Entwickler hat lokale Ergebnisse
|
|
- Sensible Performance-Daten bleiben privat
|
|
|
|
---
|
|
|
|
## 📁 Ordner-Struktur
|
|
|
|
```
|
|
results/
|
|
├── backtests/ # Einzelne Backtest-Ergebnisse (JSON, CSV)
|
|
│ ├── FactorName_20240402_120000.json
|
|
│ ├── FactorName_20240402_120000_returns.csv
|
|
│ └── FactorName_20240402_120000_equity.csv
|
|
│
|
|
├── factors/ # Faktor-spezifische Analysen
|
|
│ ├── factor_performance.json
|
|
│ └── ic_history.csv
|
|
│
|
|
├── runs/ # Komplette Run-Ergebnisse
|
|
│ ├── risk_report_20240402_120000.json
|
|
│ └── portfolio_weights_20240402.json
|
|
│
|
|
├── logs/ # Backtesting-Logs
|
|
│ └── backtest_20240402.log
|
|
│
|
|
└── db/ # SQLite-Datenbank
|
|
├── backtest_results.db
|
|
└── test_export.json
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Gespeicherte Daten
|
|
|
|
### Backtests (`backtests/`)
|
|
|
|
Für jeden Faktor werden gespeichert:
|
|
|
|
| Datei | Inhalt |
|
|
|-------|--------|
|
|
| `{Factor}_{Timestamp}.json` | Alle Metriken (IC, Sharpe, Drawdown, etc.) |
|
|
| `{Factor}_{Timestamp}_returns.csv` | Tägliche Returns |
|
|
| `{Factor}_{Timestamp}_equity.csv` | Equity Curve |
|
|
|
|
**Metriken pro Faktor:**
|
|
- IC (Information Coefficient)
|
|
- ICIR (IC Information Ratio)
|
|
- Sharpe Ratio
|
|
- Sortino Ratio
|
|
- Calmar Ratio
|
|
- Annualized Return
|
|
- Max Drawdown
|
|
- Win Rate
|
|
- Total Trades
|
|
|
|
---
|
|
|
|
### Datenbank (`db/backtest_results.db`)
|
|
|
|
**Tabellen:**
|
|
|
|
| Tabelle | Inhalt |
|
|
|---------|--------|
|
|
| `factors` | Alle generierten Faktoren |
|
|
| `backtest_runs` | Backtest-Durchläufe |
|
|
| `backtest_metrics` | Performance-Metriken pro Run |
|
|
| `daily_returns` | Tägliche Returns pro Run |
|
|
| `loop_results` | Loop-Zusammenfassungen |
|
|
| `factor_correlations` | Korrelationen zwischen Faktoren |
|
|
|
|
**Abfragen:**
|
|
|
|
```python
|
|
from rdagent.components.backtesting import ResultsDatabase
|
|
|
|
db = ResultsDatabase()
|
|
|
|
# Top 20 Faktoren nach Sharpe Ratio
|
|
top_factors = db.get_top_factors('sharpe_ratio', limit=20)
|
|
|
|
# Performance-Historie für Faktor
|
|
perf = db.get_factor_performance('Momentum_8Bar')
|
|
|
|
# Loop-Zusammenfassung
|
|
loops = db.get_loop_summary()
|
|
|
|
# Aggregierte Statistiken
|
|
stats = db.get_aggregate_stats()
|
|
```
|
|
|
|
---
|
|
|
|
### Risk Reports (`runs/`)
|
|
|
|
**Inhalt:**
|
|
- Portfolio-Volatilität
|
|
- Sharpe Ratio
|
|
- Diversifikations-Ratio
|
|
- Max Drawdown
|
|
- Limit-Checks (Position Size, Leverage, Drawdown)
|
|
- Korrelationsmatrix
|
|
|
|
---
|
|
|
|
## 🔧 Verwendung
|
|
|
|
### 1. Backtest durchführen
|
|
|
|
```python
|
|
from rdagent.components.backtesting import FactorBacktester, ResultsDatabase
|
|
|
|
# Backtester initialisieren
|
|
backtester = FactorBacktester()
|
|
db = ResultsDatabase()
|
|
|
|
# Faktor-Daten laden
|
|
factor_values = pd.Series(...) # Faktorwerte
|
|
forward_returns = pd.Series(...) # Forward Returns
|
|
|
|
# Backtest durchführen
|
|
metrics = backtester.run_backtest(
|
|
factor_values=factor_values,
|
|
forward_returns=forward_returns,
|
|
factor_name="MyFactor"
|
|
)
|
|
|
|
# In Datenbank speichern
|
|
db.add_backtest_run(
|
|
factor_name="MyFactor",
|
|
metrics=metrics,
|
|
returns=...,
|
|
equity_curve=...
|
|
)
|
|
```
|
|
|
|
### 2. Portfolio-Optimierung
|
|
|
|
```python
|
|
from rdagent.components.backtesting import PortfolioOptimizer, CorrelationAnalyzer
|
|
|
|
# Korrelationsmatrix
|
|
corr_analyzer = CorrelationAnalyzer()
|
|
corr_matrix = corr_analyzer.calculate_correlation_matrix(factor_returns)
|
|
|
|
# Optimierung
|
|
optimizer = PortfolioOptimizer()
|
|
weights = optimizer.mean_variance_optimization(
|
|
expected_returns=expected_returns,
|
|
cov_matrix=cov_matrix
|
|
)
|
|
|
|
# Speichern
|
|
optimizer.save_optimization_results(weights, factor_names, 'mean_variance')
|
|
```
|
|
|
|
### 3. Risiko-Bericht
|
|
|
|
```python
|
|
from rdagent.components.backtesting import AdvancedRiskManager
|
|
|
|
risk_manager = AdvancedRiskManager()
|
|
|
|
report = risk_manager.generate_risk_report(
|
|
factor_returns=factor_returns,
|
|
portfolio_weights=weights
|
|
)
|
|
|
|
print(f"Sharpe: {report['sharpe_ratio']:.2f}")
|
|
print(f"Alle Limits OK: {report['all_limits_ok']}")
|
|
```
|
|
|
|
---
|
|
|
|
## 📈 Export
|
|
|
|
### JSON Export
|
|
|
|
```python
|
|
db.export_to_json("results/db/full_export.json")
|
|
```
|
|
|
|
**Inhalt:**
|
|
- Aggregierte Statistiken
|
|
- Top-Faktoren
|
|
- Loop-Zusammenfassung
|
|
- Export-Datum
|
|
|
|
---
|
|
|
|
## 🎯 Ziel-Metriken
|
|
|
|
| Metrik | Ziel | Minimum |
|
|
|--------|------|---------|
|
|
| **IC** | > 0.05 | > 0.02 |
|
|
| **ICIR** | > 2.0 | > 1.0 |
|
|
| **Sharpe Ratio** | > 2.0 | > 1.0 |
|
|
| **Max Drawdown** | < 15% | < 25% |
|
|
| **Win Rate** | > 55% | > 45% |
|
|
| **Annualized Return** | > 10% | > 5% |
|
|
|
|
---
|
|
|
|
## 📝 Dokumentation
|
|
|
|
Jeder Backtest wird automatisch dokumentiert mit:
|
|
- Timestamp
|
|
- Faktor-Name
|
|
- Alle Metriken
|
|
- Returns & Equity Curve
|
|
- Konfigurierte Parameter (Transaction Costs, etc.)
|
|
|
|
**Manuelle Notizen:**
|
|
- Erstelle `results/logs/notes_YYYYMMDD.md` für manuelle Notizen
|
|
- Dokumentiere besondere Ereignisse (Markt-Crashes, etc.)
|
|
|
|
---
|
|
|
|
## 🔒 Datenschutz
|
|
|
|
- Ergebnisse sind **lokal** (nicht in Git)
|
|
- Datenbank ist **lokal** (SQLite)
|
|
- Bei Team-Nutzung: Ergebnisse manuell teilen oder zentrale DB verwenden
|
|
|
|
---
|
|
|
|
## 🚀 Nächste Schritte
|
|
|
|
1. **Backtesting für alle 110 Faktoren durchführen**
|
|
2. **Top-20 Faktoren nach IC/Sharpe auswählen**
|
|
3. **Portfolio-Optimierung durchführen**
|
|
4. **4 Wochen Paper-Trading**
|
|
5. **Live-Performance dokumentieren**
|
|
|
|
---
|
|
|
|
**Stand:** April 2026
|
|
**Version:** 1.0
|