2026-04-06 21:24:38,802 [INFO] ============================================================ 2026-04-06 21:24:38,802 [INFO] STUDY B v2: SPXW Trade Flow Direction During Spikes 2026-04-06 21:24:38,802 [INFO] ============================================================ 2026-04-06 21:24:38,808 [INFO] Events on signed-trade dates: 311 across 18 dates 2026-04-06 21:24:49,651 [INFO] 2026-03-03: 34 events, 3304453 trades 2026-04-06 21:24:49,861 [INFO] 2026-03-04: 7 events, 1300 trades 2026-04-06 21:24:58,560 [INFO] 2026-03-05: 20 events, 2680776 trades 2026-04-06 21:25:08,302 [INFO] 2026-03-06: 8 events, 2908897 trades 2026-04-06 21:25:18,456 [INFO] 2026-03-10: 16 events, 3111735 trades 2026-04-06 21:25:27,525 [INFO] 2026-03-11: 13 events, 2680171 trades 2026-04-06 21:25:37,088 [INFO] 2026-03-12: 18 events, 2871044 trades 2026-04-06 21:25:47,098 [INFO] 2026-03-13: 11 events, 2998040 trades 2026-04-06 21:25:55,808 [INFO] 2026-03-16: 18 events, 2676660 trades 2026-04-06 21:26:02,627 [INFO] 2026-03-17: 8 events, 1987690 trades 2026-04-06 21:26:03,855 [INFO] 2026-03-18: 16 events, 351905 trades 2026-04-06 21:26:03,909 [INFO] 2026-03-19: 16 events, 430 trades 2026-04-06 21:26:14,102 [INFO] 2026-03-20: 17 events, 3017833 trades 2026-04-06 21:26:23,094 [INFO] 2026-03-23: 35 events, 2713351 trades 2026-04-06 21:26:32,461 [INFO] 2026-03-24: 20 events, 2758140 trades 2026-04-06 21:26:41,084 [INFO] 2026-03-25: 15 events, 2595765 trades 2026-04-06 21:26:50,597 [INFO] 2026-03-26: 21 events, 2903543 trades 2026-04-06 21:27:00,848 [INFO] 2026-03-27: 18 events, 3025080 trades 2026-04-06 21:27:00,947 [INFO] Merged: 311 events with SPXW flow features 2026-04-06 21:27:00,947 [INFO] Non-zero flow direction (60s window): 178/311 2026-04-06 21:27:00,995 [INFO] --- NULL TESTS --- 2026-04-06 21:27:01,683 [INFO] w60 h10: real_rho=-0.0192, null_p=0.8015 2026-04-06 21:27:02,374 [INFO] w60 h30: real_rho=0.0384, null_p=0.5985 2026-04-06 21:27:02,380 [INFO] ============================================================ 2026-04-06 21:27:02,380 [INFO] ✅ STUDY B v2 COMPLETE in 144s 2026-04-06 21:27:02,380 [INFO] Results: 83 keys 2026-04-06 21:27:02,380 [INFO] NULL_w60_corr_h10: {'real_rho': np.float64(-0.0192), 'null_mean': np.float64(0.0042), 'null_p': 0.8015, 'n_shuffles': 2000} 2026-04-06 21:27:02,380 [INFO] NULL_w60_corr_h30: {'real_rho': np.float64(0.0384), 'null_mean': np.float64(0.0029), 'null_p': 0.5985, 'n_shuffles': 2000} 2026-04-06 21:27:02,380 [INFO] T1_w120_bear_h10: {'n': 100, 'spx_mean': np.float64(-0.621), 'spx_median': np.float64(-0.825), 'pct_up': np.float64(0.42)} 2026-04-06 21:27:02,380 [INFO] T1_w120_bear_h30: {'n': 100, 'spx_mean': np.float64(-1.25), 'spx_median': np.float64(-1.425), 'pct_up': np.float64(0.46)} 2026-04-06 21:27:02,380 [INFO] T1_w120_bear_h60: {'n': 100, 'spx_mean': np.float64(-1.209), 'spx_median': np.float64(-5.21), 'pct_up': np.float64(0.43)} 2026-04-06 21:27:02,380 [INFO] T1_w120_bull_h10: {'n': 103, 'spx_mean': np.float64(0.551), 'spx_median': np.float64(0.5), 'pct_up': np.float64(0.515)} 2026-04-06 21:27:02,380 [INFO] T1_w120_bull_h30: {'n': 103, 'spx_mean': np.float64(3.033), 'spx_median': np.float64(1.39), 'pct_up': np.float64(0.573)} 2026-04-06 21:27:02,380 [INFO] T1_w120_bull_h60: {'n': 103, 'spx_mean': np.float64(6.986), 'spx_median': np.float64(3.61), 'pct_up': np.float64(0.602)} 2026-04-06 21:27:02,380 [INFO] T1_w120_corr_h10: {'n': 203, 'spearman_rho': np.float64(0.1149), 'p_value': np.float64(0.1027)} 2026-04-06 21:27:02,380 [INFO] T1_w120_corr_h30: {'n': 203, 'spearman_rho': np.float64(0.16), 'p_value': np.float64(0.0226)} 2026-04-06 21:27:02,380 [INFO] T1_w120_corr_h60: {'n': 203, 'spearman_rho': np.float64(0.2404), 'p_value': np.float64(0.0006)} 2026-04-06 21:27:02,380 [INFO] T1_w120_ttest_h10: {'t_stat': np.float64(0.876), 'p_value': np.float64(0.3819)} 2026-04-06 21:27:02,380 [INFO] T1_w120_ttest_h30: {'t_stat': np.float64(1.89), 'p_value': np.float64(0.0602)} 2026-04-06 21:27:02,380 [INFO] T1_w120_ttest_h60: {'t_stat': np.float64(2.774), 'p_value': np.float64(0.0061)} 2026-04-06 21:27:02,380 [INFO] T1_w30_bear_h10: {'n': 67, 'spx_mean': np.float64(0.734), 'spx_median': np.float64(-0.7), 'pct_up': np.float64(0.433)} 2026-04-06 21:27:02,380 [INFO] T1_w30_bear_h30: {'n': 67, 'spx_mean': np.float64(2.04), 'spx_median': np.float64(2.41), 'pct_up': np.float64(0.582)} 2026-04-06 21:27:02,380 [INFO] T1_w30_bear_h60: {'n': 67, 'spx_mean': np.float64(2.334), 'spx_median': np.float64(3.61), 'pct_up': np.float64(0.552)} 2026-04-06 21:27:02,380 [INFO] T1_w30_bull_h10: {'n': 77, 'spx_mean': np.float64(-0.323), 'spx_median': np.float64(-1.43), 'pct_up': np.float64(0.468)} 2026-04-06 21:27:02,380 [INFO] T1_w30_bull_h30: {'n': 77, 'spx_mean': np.float64(0.153), 'spx_median': np.float64(-1.79), 'pct_up': np.float64(0.468)} 2026-04-06 21:27:02,380 [INFO] T1_w30_bull_h60: {'n': 77, 'spx_mean': np.float64(2.149), 'spx_median': np.float64(-0.72), 'pct_up': np.float64(0.494)} 2026-04-06 21:27:02,380 [INFO] T1_w30_corr_h10: {'n': 144, 'spearman_rho': np.float64(-0.0158), 'p_value': np.float64(0.8507)} 2026-04-06 21:27:02,380 [INFO] T1_w30_corr_h30: {'n': 144, 'spearman_rho': np.float64(0.0287), 'p_value': np.float64(0.7329)} 2026-04-06 21:27:02,380 [INFO] T1_w30_corr_h60: {'n': 144, 'spearman_rho': np.float64(0.0119), 'p_value': np.float64(0.8875)} 2026-04-06 21:27:02,380 [INFO] T1_w30_ttest_h10: {'t_stat': np.float64(-0.696), 'p_value': np.float64(0.4878)} 2026-04-06 21:27:02,380 [INFO] T1_w30_ttest_h30: {'t_stat': np.float64(-0.706), 'p_value': np.float64(0.4812)} 2026-04-06 21:27:02,380 [INFO] T1_w30_ttest_h60: {'t_stat': np.float64(-0.053), 'p_value': np.float64(0.9581)} 2026-04-06 21:27:02,380 [INFO] T1_w60_bear_h10: {'n': 87, 'spx_mean': np.float64(-0.096), 'spx_median': np.float64(-0.57), 'pct_up': np.float64(0.448)} 2026-04-06 21:27:02,380 [INFO] T1_w60_bear_h30: {'n': 87, 'spx_mean': np.float64(0.784), 'spx_median': np.float64(1.47), 'pct_up': np.float64(0.552)} 2026-04-06 21:27:02,380 [INFO] T1_w60_bear_h60: {'n': 87, 'spx_mean': np.float64(1.767), 'spx_median': np.float64(-0.13), 'pct_up': np.float64(0.494)} 2026-04-06 21:27:02,380 [INFO] T1_w60_bull_h10: {'n': 91, 'spx_mean': np.float64(-0.132), 'spx_median': np.float64(-2.15), 'pct_up': np.float64(0.44)} 2026-04-06 21:27:02,380 [INFO] T1_w60_bull_h30: {'n': 91, 'spx_mean': np.float64(1.127), 'spx_median': np.float64(-0.07), 'pct_up': np.float64(0.495)} 2026-04-06 21:27:02,380 [INFO] T1_w60_bull_h60: {'n': 91, 'spx_mean': np.float64(5.361), 'spx_median': np.float64(2.58), 'pct_up': np.float64(0.593)} 2026-04-06 21:27:02,380 [INFO] T1_w60_corr_h10: {'n': 178, 'spearman_rho': np.float64(-0.0192), 'p_value': np.float64(0.7994)} 2026-04-06 21:27:02,380 [INFO] T1_w60_corr_h30: {'n': 178, 'spearman_rho': np.float64(0.0384), 'p_value': np.float64(0.6109)} 2026-04-06 21:27:02,380 [INFO] T1_w60_corr_h60: {'n': 178, 'spearman_rho': np.float64(0.0982), 'p_value': np.float64(0.1923)} 2026-04-06 21:27:02,380 [INFO] T1_w60_ttest_h10: {'t_stat': np.float64(-0.026), 'p_value': np.float64(0.9795)} 2026-04-06 21:27:02,380 [INFO] T1_w60_ttest_h30: {'t_stat': np.float64(0.141), 'p_value': np.float64(0.8883)} 2026-04-06 21:27:02,380 [INFO] T1_w60_ttest_h60: {'t_stat': np.float64(1.118), 'p_value': np.float64(0.2649)} 2026-04-06 21:27:02,380 [INFO] T2_w120_agree_h10: {'n': 92, 'signed_mean': np.float64(-0.212), 'wr_in_spike_dir': np.float64(0.554), 'abs_mean': np.float64(7.839)} 2026-04-06 21:27:02,380 [INFO] T2_w120_agree_h30: {'n': 92, 'signed_mean': np.float64(0.722), 'wr_in_spike_dir': np.float64(0.543), 'abs_mean': np.float64(12.992)} 2026-04-06 21:27:02,381 [INFO] T2_w120_agree_h60: {'n': 92, 'signed_mean': np.float64(2.691), 'wr_in_spike_dir': np.float64(0.533), 'abs_mean': np.float64(17.162)} 2026-04-06 21:27:02,381 [INFO] T2_w120_disagree_h10: {'n': 111, 'signed_mean': np.float64(-1.3), 'wr_in_spike_dir': np.float64(0.441), 'abs_mean': np.float64(7.279)} 2026-04-06 21:27:02,381 [INFO] T2_w120_disagree_h30: {'n': 111, 'signed_mean': np.float64(-0.843), 'wr_in_spike_dir': np.float64(0.486), 'abs_mean': np.float64(12.676)} 2026-04-06 21:27:02,381 [INFO] T2_w120_disagree_h60: {'n': 111, 'signed_mean': np.float64(-3.285), 'wr_in_spike_dir': np.float64(0.441), 'abs_mean': np.float64(17.116)} 2026-04-06 21:27:02,381 [INFO] T2_w120_ttest_h10: {'t_stat': np.float64(0.813), 'p_value': np.float64(0.4171)} 2026-04-06 21:27:02,381 [INFO] T2_w120_ttest_h30: {'t_stat': np.float64(0.681), 'p_value': np.float64(0.4965)} 2026-04-06 21:27:02,381 [INFO] T2_w120_ttest_h60: {'t_stat': np.float64(1.978), 'p_value': np.float64(0.0493)} 2026-04-06 21:27:02,381 [INFO] T2_w30_agree_h10: {'n': 70, 'signed_mean': np.float64(-1.502), 'wr_in_spike_dir': np.float64(0.514), 'abs_mean': np.float64(7.666)} 2026-04-06 21:27:02,381 [INFO] T2_w30_agree_h30: {'n': 70, 'signed_mean': np.float64(-2.819), 'wr_in_spike_dir': np.float64(0.4), 'abs_mean': np.float64(13.246)} 2026-04-06 21:27:02,381 [INFO] T2_w30_agree_h60: {'n': 70, 'signed_mean': np.float64(-3.232), 'wr_in_spike_dir': np.float64(0.4), 'abs_mean': np.float64(17.13)} 2026-04-06 21:27:02,381 [INFO] T2_w30_disagree_h10: {'n': 74, 'signed_mean': np.float64(0.185), 'wr_in_spike_dir': np.float64(0.5), 'abs_mean': np.float64(6.909)} 2026-04-06 21:27:02,381 [INFO] T2_w30_disagree_h30: {'n': 74, 'signed_mean': np.float64(0.074), 'wr_in_spike_dir': np.float64(0.554), 'abs_mean': np.float64(11.847)} 2026-04-06 21:27:02,381 [INFO] T2_w30_disagree_h60: {'n': 74, 'signed_mean': np.float64(-3.514), 'wr_in_spike_dir': np.float64(0.446), 'abs_mean': np.float64(15.8)} 2026-04-06 21:27:02,381 [INFO] T2_w30_ttest_h10: {'t_stat': np.float64(-1.118), 'p_value': np.float64(0.2655)} 2026-04-06 21:27:02,381 [INFO] T2_w30_ttest_h30: {'t_stat': np.float64(-1.089), 'p_value': np.float64(0.2779)} 2026-04-06 21:27:02,381 [INFO] T2_w30_ttest_h60: {'t_stat': np.float64(0.081), 'p_value': np.float64(0.9357)} 2026-04-06 21:27:02,381 [INFO] T2_w60_agree_h10: {'n': 81, 'signed_mean': np.float64(-0.469), 'wr_in_spike_dir': np.float64(0.519), 'abs_mean': np.float64(7.885)} 2026-04-06 21:27:02,381 [INFO] T2_w60_agree_h30: {'n': 81, 'signed_mean': np.float64(-0.937), 'wr_in_spike_dir': np.float64(0.457), 'abs_mean': np.float64(12.958)} 2026-04-06 21:27:02,381 [INFO] T2_w60_agree_h60: {'n': 81, 'signed_mean': np.float64(-0.601), 'wr_in_spike_dir': np.float64(0.481), 'abs_mean': np.float64(17.703)} 2026-04-06 21:27:02,381 [INFO] T2_w60_disagree_h10: {'n': 97, 'signed_mean': np.float64(-0.128), 'wr_in_spike_dir': np.float64(0.515), 'abs_mean': np.float64(7.238)} 2026-04-06 21:27:02,381 [INFO] T2_w60_disagree_h30: {'n': 97, 'signed_mean': np.float64(-0.288), 'wr_in_spike_dir': np.float64(0.526), 'abs_mean': np.float64(12.713)} 2026-04-06 21:27:02,381 [INFO] T2_w60_disagree_h60: {'n': 97, 'signed_mean': np.float64(-2.948), 'wr_in_spike_dir': np.float64(0.423), 'abs_mean': np.float64(16.546)} 2026-04-06 21:27:02,381 [INFO] T2_w60_ttest_h10: {'t_stat': np.float64(-0.24), 'p_value': np.float64(0.8108)} 2026-04-06 21:27:02,381 [INFO] T2_w60_ttest_h30: {'t_stat': np.float64(-0.266), 'p_value': np.float64(0.7909)} 2026-04-06 21:27:02,381 [INFO] T2_w60_ttest_h60: {'t_stat': np.float64(0.719), 'p_value': np.float64(0.4732)} 2026-04-06 21:27:02,381 [INFO] T3_w120_intensity_h10: {'n': 207, 'spearman_rho': np.float64(0.0118), 'p_value': np.float64(0.866), 'desc': 'more SPXW volume → bigger move?'} 2026-04-06 21:27:02,381 [INFO] T3_w120_intensity_h30: {'n': 207, 'spearman_rho': np.float64(-0.0633), 'p_value': np.float64(0.3649), 'desc': 'more SPXW volume → bigger move?'} 2026-04-06 21:27:02,381 [INFO] T3_w30_intensity_h10: {'n': 150, 'spearman_rho': np.float64(0.0663), 'p_value': np.float64(0.4202), 'desc': 'more SPXW volume → bigger move?'} 2026-04-06 21:27:02,381 [INFO] T3_w30_intensity_h30: {'n': 150, 'spearman_rho': np.float64(-0.117), 'p_value': np.float64(0.1538), 'desc': 'more SPXW volume → bigger move?'} 2026-04-06 21:27:02,381 [INFO] T3_w60_intensity_h10: {'n': 181, 'spearman_rho': np.float64(-0.0064), 'p_value': np.float64(0.9317), 'desc': 'more SPXW volume → bigger move?'} 2026-04-06 21:27:02,381 [INFO] T3_w60_intensity_h30: {'n': 181, 'spearman_rho': np.float64(-0.1452), 'p_value': np.float64(0.0511), 'desc': 'more SPXW volume → bigger move?'} 2026-04-06 21:27:02,381 [INFO] T4_w120_CALL_HEAVY_partial_h10: {'n': 78, 'spearman_rho': np.float64(0.1469), 'p_value': np.float64(0.1992), 'desc': 'within CALL_HEAVY spikes, does flow direction add info?'} 2026-04-06 21:27:02,381 [INFO] T4_w120_CALL_HEAVY_partial_h30: {'n': 78, 'spearman_rho': np.float64(0.0914), 'p_value': np.float64(0.4259), 'desc': 'within CALL_HEAVY spikes, does flow direction add info?'} 2026-04-06 21:27:02,381 [INFO] T4_w120_PUT_HEAVY_partial_h10: {'n': 103, 'spearman_rho': np.float64(0.0672), 'p_value': np.float64(0.5002), 'desc': 'within PUT_HEAVY spikes, does flow direction add info?'} 2026-04-06 21:27:02,381 [INFO] T4_w120_PUT_HEAVY_partial_h30: {'n': 103, 'spearman_rho': np.float64(0.1316), 'p_value': np.float64(0.185), 'desc': 'within PUT_HEAVY spikes, does flow direction add info?'} 2026-04-06 21:27:02,381 [INFO] T4_w30_CALL_HEAVY_partial_h10: {'n': 54, 'spearman_rho': np.float64(0.0851), 'p_value': np.float64(0.5404), 'desc': 'within CALL_HEAVY spikes, does flow direction add info?'} 2026-04-06 21:27:02,381 [INFO] T4_w30_CALL_HEAVY_partial_h30: {'n': 54, 'spearman_rho': np.float64(-0.0094), 'p_value': np.float64(0.9465), 'desc': 'within CALL_HEAVY spikes, does flow direction add info?'} 2026-04-06 21:27:02,381 [INFO] T4_w30_PUT_HEAVY_partial_h10: {'n': 76, 'spearman_rho': np.float64(-0.1732), 'p_value': np.float64(0.1345), 'desc': 'within PUT_HEAVY spikes, does flow direction add info?'} 2026-04-06 21:27:02,381 [INFO] T4_w30_PUT_HEAVY_partial_h30: {'n': 76, 'spearman_rho': np.float64(-0.0342), 'p_value': np.float64(0.7693), 'desc': 'within PUT_HEAVY spikes, does flow direction add info?'} 2026-04-06 21:27:02,381 [INFO] T4_w60_CALL_HEAVY_partial_h10: {'n': 67, 'spearman_rho': np.float64(-0.0024), 'p_value': np.float64(0.9844), 'desc': 'within CALL_HEAVY spikes, does flow direction add info?'} 2026-04-06 21:27:02,381 [INFO] T4_w60_CALL_HEAVY_partial_h30: {'n': 67, 'spearman_rho': np.float64(-0.0117), 'p_value': np.float64(0.925), 'desc': 'within CALL_HEAVY spikes, does flow direction add info?'} 2026-04-06 21:27:02,381 [INFO] T4_w60_PUT_HEAVY_partial_h10: {'n': 95, 'spearman_rho': np.float64(-0.0504), 'p_value': np.float64(0.6278), 'desc': 'within PUT_HEAVY spikes, does flow direction add info?'} 2026-04-06 21:27:02,381 [INFO] T4_w60_PUT_HEAVY_partial_h30: {'n': 95, 'spearman_rho': np.float64(0.0117), 'p_value': np.float64(0.9107), 'desc': 'within PUT_HEAVY spikes, does flow direction add info?'}