Narrow risk overlay frontier search

This commit is contained in:
2026-03-17 16:39:11 -07:00
parent 88c7c7790d
commit 86a793c561

View File

@@ -2,6 +2,7 @@ from __future__ import annotations
import json import json
import math import math
import os
import sys import sys
from dataclasses import asdict, dataclass from dataclasses import asdict, dataclass
from pathlib import Path 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]: def _candidate_space() -> list[RiskOverlayCandidate]:
space: list[RiskOverlayCandidate] = [] space: list[RiskOverlayCandidate] = []
for base_name in ("baseline", "blocker_025", "blocker_050"): grid_mode = os.getenv("STRATEGY32_RISK_OVERLAY_GRID", "frontier").strip().lower()
for vol_lookback_bars in (21, 42, 84): if grid_mode == "wide":
for vol_target_mult in (0.90, 1.00, 1.10): base_names = ("baseline", "blocker_025", "blocker_050")
for min_scale in (0.50, 0.75): vol_lookbacks = (21, 42, 84)
for max_scale in (1.00, 1.10): 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: if max_scale < min_scale:
continue continue
for dd_lookback_bars in (42, 84): for dd_lookback_bars in dd_lookbacks:
for dd_cut in (0.08, 0.12, 0.16): for dd_cut in dd_cuts:
for dd_scale in (0.25, 0.50, 0.75): for dd_scale in dd_scales:
space.append( space.append(
RiskOverlayCandidate( RiskOverlayCandidate(
base_name=base_name, base_name=base_name,