# 26-Oct-2026 case: signals + trail-50 trades on today's full-session Upstox intraday data (read-only fetch_today26.py). Spot 15:15+ missing. import sys,glob,os; sys.path.insert(0,'/workspace/research/buyer-method-audit/scripts'); import lib; from lib_trail import * D='/workspace/research/buyer-method-audit/data/today26/'; d0=pd.Timestamp('2026-10-26') def rd(f): x=pd.read_csv(f); x['i']=x.ts.str[11:16].map(hm2i); return x[(x.i>=0)&(x.i=14.46)] X=signals({k:S[k] for k in sorted(S) if k>=pd.Timestamp('2026-09-01')},PC,rb); X=X[X.date==d0]; print(X.to_string()) # option arrays for 26-Oct from fresh full-session files (expiry 27-Oct, DTE 1) OP={} for fn in glob.glob(D+'OPT_*.csv'): nm=os.path.basename(fn)[4:-4]; x=rd(fn); r=np.full((4,NM),np.nan) for j,c in enumerate(['open','high','low','close']): r[j,x.i.values]=x[c].values OP[(nm[-2:],float(nm[:-2]))]=r lib.oarr=lambda d,e,typ,K: OP.get((typ,K)) if d==d0 else None import lib_trail; lib_trail.oarr=lib.oarr lib.nexp=lambda d,skip0=True: pd.Timestamp('2026-10-27'); lib_trail.nexp=lib.nexp rows=[] for r in X.itertuples(): for mode,so,lab in (('spot',0,'ATM'),('prem',0,'ATM'))+((('spot',2,'ITM2'),) if r.cand in('B15','B30') and r.dir<0 else ()): z=sim_trail(a,d0,r.m,r.dir,r.entry,r.stop,r.R,mode,strike_off=so) rows.append(dict(cand=r.cand if lab=='ATM' else 'L'+r.cand[1:],signal=i2hm(r.m),dir=r.dir,entry_spot=r.entry,stop=round(r.stop,2),R=round(r.R,1),mode=mode,inst=lab,spot_pts=round(spot_proxy_trail(a,r.m,r.dir,r.entry,r.stop,r.R),1),**(z or {}))) for ex in ('E0','E1','E2','E4'): z=lib.sim(a,d0,r.m,r.dir,r.entry,r.stop,r.R,ex,'REAL'); rows.append(dict(cand=r.cand,signal=i2hm(r.m),dir=r.dir,mode='old_'+ex,inst='ATM',**(z or {}))) Tt=pd.DataFrame(rows); Tt.to_csv('results/trail50_today_20261026.csv',index=False); pd.set_option('display.width',250) print(Tt[['cand','signal','dir','R','mode','inst','K','typ','fill','exit_min','why','pnl','pnl_rs','spot_pts']].round(2).to_string())