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 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,