Files
PythagorasGoal/scripts/research/skyhook/grid.py
T
2026-06-23 14:46:47 +00:00

27 lines
1.3 KiB
Python

"""Combined grid over the scout-winning levers -> rank by min-asset HOLD-OUT (gate minFull>=0.5)."""
import sys, itertools
from dataclasses import replace
sys.path.insert(0, "/opt/docker/PythagorasGoal/scripts/research/skyhook")
import skyhooklib as sk
from src.strategies.skyhook import SkyhookParams
base = SkyhookParams()
def quick(p):
rs = {a: sk.run_asset(a, p, sk.FEE_RT) for a in sk.CERTIFIED}
return (min(rs[a]["full"]["sharpe"] for a in rs),
min(rs[a]["holdout"]["sharpe"] for a in rs),
min(rs[a]["full"]["n_trades"] for a in rs),
round(sum(rs[a]["full"]["maxdd"] for a in rs)/2,3))
rows=[]
for ptn_n,(sl,tp),vol_lo,(vlo,vhi) in itertools.product(
(8,21,55), ((2.0,5.0),(2.5,6.0),(3.0,8.0)), (0.0,40.0,50.0), ((35.0,95.0),(25.0,95.0))):
p=replace(base, ptn_n=ptn_n, sl_atr=sl, tp_atr=tp, vol_lo=vol_lo, vola_lo=vlo, vola_hi=vhi)
mf,mh,mt,dd=quick(p)
rows.append((mh,mf,mt,dd,ptn_n,sl,tp,vol_lo,vlo,vhi))
rows.sort(reverse=True)
print(f"{'minH':>6s}{'minF':>6s}{'tr':>5s}{'dd':>5s} ptn sl tp vlo vola")
for mh,mf,mt,dd,ptn_n,sl,tp,vol_lo,vlo,vhi in rows[:18]:
gate = "PASS" if (mf>=0.5 and mh>=0.2 and mt>=20) else ""
print(f"{mh:>+6.2f}{mf:>+6.2f}{mt:>5d}{dd*100:>4.0f}% {ptn_n:>3d} {sl:>3.1f} {tp:>4.1f} {vol_lo:>4.0f} [{vlo:.0f},{vhi:.0f}] {gate}")