Spaces:
Runtime error
Runtime error
| from __future__ import annotations | |
| import pandas as pd | |
| from backtest.vol_backtest import backtest_realized_vol_signal | |
| def optimize_volatility_signal( | |
| prices: pd.Series, | |
| signal: str = "long_vol", | |
| short_windows: tuple[int, ...] = (5, 10, 15), | |
| long_windows: tuple[int, ...] = (20, 30, 60), | |
| holding_days_options: tuple[int, ...] = (3, 5, 10), | |
| ) -> dict: | |
| runs = [] | |
| for short_window in short_windows: | |
| for long_window in long_windows: | |
| if short_window >= long_window: | |
| continue | |
| for holding_days in holding_days_options: | |
| result = backtest_realized_vol_signal( | |
| prices=prices, | |
| short_window=short_window, | |
| long_window=long_window, | |
| holding_days=holding_days, | |
| signal=signal, | |
| ) | |
| runs.append( | |
| { | |
| "short_window": short_window, | |
| "long_window": long_window, | |
| "holding_days": holding_days, | |
| "trade_count": result["trade_count"], | |
| "win_rate": result["win_rate"], | |
| "total_return_proxy": result["total_return_proxy"], | |
| "max_drawdown_proxy": result["max_drawdown_proxy"], | |
| "avg_trade_pnl_proxy": result["avg_trade_pnl_proxy"], | |
| } | |
| ) | |
| runs.sort( | |
| key=lambda run: ( | |
| run["total_return_proxy"], | |
| -abs(run["max_drawdown_proxy"]), | |
| run["win_rate"], | |
| ), | |
| reverse=True, | |
| ) | |
| best = runs[0] if runs else None | |
| baseline = next( | |
| ( | |
| run | |
| for run in runs | |
| if run["short_window"] == 10 and run["long_window"] == 30 and run["holding_days"] == 5 | |
| ), | |
| runs[0] if runs else None, | |
| ) | |
| return { | |
| "signal": signal, | |
| "best": best, | |
| "baseline": baseline, | |
| "top_runs": runs[:10], | |
| "metrics_delta": ( | |
| { | |
| "total_return_proxy_delta": best["total_return_proxy"] - baseline["total_return_proxy"], | |
| "win_rate_delta": best["win_rate"] - baseline["win_rate"], | |
| "max_drawdown_proxy_delta": best["max_drawdown_proxy"] - baseline["max_drawdown_proxy"], | |
| } | |
| if best and baseline | |
| else None | |
| ), | |
| "anti_overfit_note": ( | |
| "This is an in-sample parameter scan. Use walk-forward or out-of-sample validation " | |
| "before trusting optimized parameters." | |
| ), | |
| } | |