Files
NexQuant/results
TPTBusiness e07a6df47f feat: Backtesting Engine + Risk Management + Results Database
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
2026-04-02 19:23:14 +02:00
..

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:

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

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

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

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

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