import matplotlib; matplotlib.use('Agg'); import matplotlib.pyplot as plt,numpy as np,pandas as pd,sys,os sys.path.insert(0,os.path.dirname(__file__)); from cwlib import * DD=load(); D=DD[pd.Timestamp('2026-10-26')]; k=np.where(D['K']==22500)[0][0]; x=np.arange(375) fig,ax=plt.subplots(3,1,figsize=(12,9),sharex=True) ax[0].plot(x,D['c'],'k',lw=1); ax[0].axhline(22500,color='gray',ls='--'); ax[0].set_ylabel('Nifty spot') for i,lab,col in [(37,'09:52 plain cross','tab:blue'),(38,'09:53 OI-drop signal (X1-3, Y10/25)','tab:green')]: ax[0].axvline(i,color=col,lw=1); ax[0].text(i+2,22420+ (0 if col=='tab:blue' else 40),lab,color=col,fontsize=8) ax[0].axvline(2,color='tab:red',lw=.8); ax[0].axvline(10,color='tab:red',lw=.8); ax[0].text(12,22700,'put-side crosses 09:17 (22500) & 09:25 (22400): no PE-OI drop',color='tab:red',fontsize=8) ax[1].plot(x,D['oi_CE'][:,k]/1e6,label='CE22500 OI'); ax[1].plot(x,D['oi_PE'][:,k]/1e6,label='PE22500 OI'); ax[1].legend(fontsize=8); ax[1].set_ylabel('OI (M)') ax[2].plot(x,D['fut']-D['c'],color='tab:purple'); ax[2].set_ylabel('basis (fut−spot)') t=[i for i in range(0,375,30)]; ax[2].set_xticks(t); ax[2].set_xticklabels([HM[i] for i in t]); ax[0].set_title('26-Oct-2026: call-wall cross at 22,500 (spot after 15:14 missing)') plt.tight_layout(); plt.savefig(f'{C}/charts/today_callwall.png',dpi=90) A=pd.read_csv(f'{C}/results/rule_trades.csv',parse_dates=['date']).sort_values(['date','hm_sig']) fig,ax=plt.subplots(1,2,figsize=(12,3.8)) for a,side in zip(ax,('call','put')): g=A[A.side==side]; a.plot(g.date,g.pnl_rs_lot.cumsum()); a.axvline(pd.Timestamp('2026-01-01'),color='r',ls='--'); a.set_title(f'{side} rule: cumulative ₹/lot after costs (red = test start)',fontsize=9); a.axhline(0,color='gray',lw=.5) plt.tight_layout(); plt.savefig(f'{C}/charts/rule_cum.png',dpi=90); print('ok')