chore: backtest engine fee model, metrics, and strategy fixes
- main.py: add IBKR-style tiered fee schedule (fee_base + fee_per_share), PIT universe support, and open-to-close execution improvements - metrics.py: add raw_summary helper for JSON-safe metric export - Misc strategy fixes: deprecation warnings, NaN handling Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
15
metrics.py
15
metrics.py
@@ -52,6 +52,21 @@ def win_rate(returns: pd.Series) -> float:
|
||||
return (active > 0).sum() / len(active)
|
||||
|
||||
|
||||
def raw_summary(equity: pd.Series) -> dict:
|
||||
"""Return numeric metrics suitable for JSON serialization."""
|
||||
returns = equity.pct_change().dropna()
|
||||
return {
|
||||
"totalReturn": float(total_return(equity)),
|
||||
"annualizedReturn": float(annualized_return(equity)),
|
||||
"annualizedVolatility": float(annualized_volatility(returns)),
|
||||
"sharpeRatio": float(sharpe_ratio(returns)),
|
||||
"sortinoRatio": float(sortino_ratio(returns)),
|
||||
"maxDrawdown": float(max_drawdown(equity)),
|
||||
"calmarRatio": float(calmar_ratio(equity)),
|
||||
"winRate": float(win_rate(returns)),
|
||||
}
|
||||
|
||||
|
||||
def summary(equity: pd.Series, name: str = "Strategy") -> dict:
|
||||
returns = equity.pct_change().dropna()
|
||||
metrics = {
|
||||
|
||||
Reference in New Issue
Block a user