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)