ProfilingAI / src /models /backtest_results.py
Sandrine Guétin
Version propre de DeepVest
2106f78
raw
history blame
1.32 kB
from dataclasses import dataclass
from datetime import datetime
from typing import List, Dict, Optional
import pandas as pd
@dataclass
class EnhancedBacktestResult:
# Performance metrics
total_return: float
sharpe_ratio: float
max_drawdown: float
win_rate: float
# Time series data
equity_curve: pd.Series
positions: pd.DataFrame
trades: pd.DataFrame
# Additional metrics
annual_return: Optional[float] = None
volatility: Optional[float] = None
sortino_ratio: Optional[float] = None
calmar_ratio: Optional[float] = None
# Risk metrics
var_95: Optional[float] = None
expected_shortfall: Optional[float] = None
# Trading metrics
total_trades: Optional[int] = None
profitable_trades: Optional[int] = None
avg_trade_duration: Optional[float] = None
# Additional data
metadata: Optional[Dict] = None
def __post_init__(self):
# Convert pandas objects if they're passed as dictionaries
if isinstance(self.equity_curve, dict):
self.equity_curve = pd.Series(self.equity_curve)
if isinstance(self.positions, dict):
self.positions = pd.DataFrame(self.positions)
if isinstance(self.trades, dict):
self.trades = pd.DataFrame(self.trades)