diff --git a/scripts/run_current_cash_risk_overlay_search.py b/scripts/run_current_cash_risk_overlay_search.py index 6cb1a7f..8bec733 100644 --- a/scripts/run_current_cash_risk_overlay_search.py +++ b/scripts/run_current_cash_risk_overlay_search.py @@ -2,6 +2,7 @@ from __future__ import annotations import json import math +import os import sys from dataclasses import asdict, dataclass from pathlib import Path @@ -168,16 +169,36 @@ def _base_return_map(latest_bar: pd.Timestamp) -> tuple[dict[str, pd.Series], di def _candidate_space() -> list[RiskOverlayCandidate]: space: list[RiskOverlayCandidate] = [] - for base_name in ("baseline", "blocker_025", "blocker_050"): - for vol_lookback_bars in (21, 42, 84): - for vol_target_mult in (0.90, 1.00, 1.10): - for min_scale in (0.50, 0.75): - for max_scale in (1.00, 1.10): + grid_mode = os.getenv("STRATEGY32_RISK_OVERLAY_GRID", "frontier").strip().lower() + if grid_mode == "wide": + base_names = ("baseline", "blocker_025", "blocker_050") + vol_lookbacks = (21, 42, 84) + vol_targets = (0.90, 1.00, 1.10) + min_scales = (0.50, 0.75) + max_scales = (1.00, 1.10) + dd_lookbacks = (42, 84) + dd_cuts = (0.08, 0.12, 0.16) + dd_scales = (0.25, 0.50, 0.75) + else: + base_names = ("baseline", "blocker_050") + vol_lookbacks = (42,) + vol_targets = (0.95, 1.00, 1.05) + min_scales = (0.50, 0.75) + max_scales = (1.00,) + dd_lookbacks = (42,) + dd_cuts = (0.08, 0.12) + dd_scales = (0.50, 0.75) + + for base_name in base_names: + for vol_lookback_bars in vol_lookbacks: + for vol_target_mult in vol_targets: + for min_scale in min_scales: + for max_scale in max_scales: if max_scale < min_scale: continue - for dd_lookback_bars in (42, 84): - for dd_cut in (0.08, 0.12, 0.16): - for dd_scale in (0.25, 0.50, 0.75): + for dd_lookback_bars in dd_lookbacks: + for dd_cut in dd_cuts: + for dd_scale in dd_scales: space.append( RiskOverlayCandidate( base_name=base_name,