Spaces:
Sleeping
Sleeping
File size: 1,319 Bytes
2106f78 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
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) |