"""Part C — gamma-wall policies on the forward GEX archive (pre-reg 2026-09-09).""" import gzip, json, glob, os, numpy as np, pandas as pd, warnings warnings.filterwarnings("ignore") src=open("crown_policies.py").read().split("\ndf=run()")[0]; cp={}; exec(src, cp) FP=cp["FP"]; d=cp["load_nq"](); QUAD=cp["QUAD"] def f(x): try: return float(x) except: return 0.0 def compute_gamma(rows, spot, window=0.06): sks=sorted([(f(r["strike"]),f(r["call_gex"]),f(r["put_gex"])) for r in rows if f(r["strike"])>0]) if not sks: return None net=[c+p for _,c,p in sks]; gross=sum(abs(c)+abs(p) for _,c,p in sks); tilt=sum(net)/gross if gross>0 else 0 regime="neutral" if abs(tilt)<0.08 else ("long" if tilt>0 else "short") lo,hi=spot*(1-window),spot*(1+window); near=[s for s in sks if lo<=s[0]<=hi]; win=near or sks above=[s for s in win if s[0]>=spot]; below=[s for s in win if s[0]<=spot]; buf=spot*0.003 def nearest_sig(c, gex, min_gap=0): pool=[s for s in c if abs(s[0]-spot)>=min_gap] if min_gap else c; use=pool or c if not use: return None peak=max(gex(s) for s in use) if peak<=0: return max(use,key=gex)[0] sig=[s for s in use if gex(s)>=0.5*peak] return min(sig,key=lambda s:abs(s[0]-spot))[0] if sig else max(use,key=gex)[0] cw=nearest_sig(above or win, lambda s:s[1], buf) or spot; pw=nearest_sig(below or win, lambda s:-s[2], buf) or spot run=0; flip=win[0][0]; mn=float("inf") for s in win: run+=s[1]+s[2] if run=570)&(g["min"]<960)].reset_index(drop=True) if len(rth)<300 or sday in QUAD: continue gm=snaps[sday]; o=rth.iloc[0]["open"]; k=o/gm["spot"]; cw=gm["call"]*k; pw=gm["put"]*k; flip=gm["flip"]*k f5=cp["five_min"](rth); c=f5.c.values def fade(i): if i==0: return 0 if c[i-1]>cw and c[i]<=cw: return -1 if c[i-1]=pw: return 1 return 0 brk=lambda i: (1 if c[i]>cw else (-1 if c[i]