import pandas as pd,numpy as np,glob,os,json T='/workspace/research/flow-forensics-2026-10/recov/data/today/'; R='/workspace/research/flow-forensics-2026-10/recov' def rd(n): d=pd.read_csv(T+n+'.csv'); d['hm']=d.ts.str[11:16]; return d.set_index('hm') N=rd('NIFTY'); F=rd('NIFTYFUT'); BN=rd('BANKNIFTY'); V=rd('INDIAVIX'); BF=rd('BANKNIFTYFUT') df=pd.DataFrame({'nifty':N.close,'n_low':N.low,'fut':F.close,'fut_oi':F.oi,'fut_vol':F.volume,'bn':BN.close,'bn_low':BN.low,'vix':V.close}) df['basis']=df.fut-df.nifty for k in (22300,22400,22500): df[f'pe{k}_oi']=rd(f'OPT_{k}PE').oi for k in (22500,22600,22700): df[f'ce{k}_oi']=rd(f'OPT_{k}CE').oi df['ce22400']=rd('OPT_22400CE').close; df['ce22450']=rd('OPT_22450CE').close; df['ce22500']=rd('OPT_22500CE').close df['straddle22400']=rd('OPT_22400CE').close+rd('OPT_22400PE').close # breadth / heavyweights from 50 stocks keys=json.load(open('/workspace/research/flow-forensics-2026-10/data/keys.json')) stk=[s for s in keys if s not in('NIFTY','BANKNIFTY','NIFTYFUT','BANKNIFTYFUT','NIFTYFUT_NOV','INDIAVIX')] W=pd.read_csv('/workspace/research/flow-forensics-2026-10/data/implied_weights.csv'); print(W.head(2).to_string()) lowt={}; up=pd.DataFrame() for s in stk: x=rd(s); o=x.open.iloc[0] up[s]=(x.close>x.open.iloc[0]).astype(int) w=x.loc['09:15':'09:45']; lowt[s]=w.low.idxmin() df['adv_vs_open']=up.sum(axis=1) lt=pd.Series(lowt); print('stock low-time distribution (09:15-09:45):'); print(lt.value_counts().sort_index().to_string()) top=['HDFCBANK','RELIANCE','ICICIBANK','INFY','BHARTIARTL','LT','ITC','TCS','AXISBANK','KOTAKBANK','SBIN'] print('heavyweight low times:',{s:lowt.get(s) for s in top}) w=df.loc['09:15':'10:15']; pd.set_option('display.width',250); print(w.round(2).to_string()) df.to_csv(f'{R}/results/today_minutes.csv') print('Nifty low',N.low.min(),N.low.idxmin(),' BN low',BN.low.min(),BN.low.idxmin(),' fut low',F.low.min(),F.low.idxmin(),' VIX high',V.high.max(),V.high.idxmax(),' day high so far',N.high.max(),N.high.idxmax())