2026-04-06 21:21:52,504 [INFO] ============================================================ 2026-04-06 21:21:52,504 [INFO] STUDY A: ES Delta Confirmation After Spikes 2026-04-06 21:21:52,504 [INFO] ============================================================ 2026-04-06 21:21:52,702 [INFO] Events: 365, ES bars: 322282 2026-04-06 21:21:53,421 [INFO] Events with ES data: 349 across 20 dates 2026-04-06 21:21:53,422 [INFO] Computing ES features for each event... 2026-04-06 21:21:53,815 [INFO] Merged: 272 events with ES features 2026-04-06 21:21:53,815 [INFO] --- TEST 1: ES delta direction → SPX return --- 2026-04-06 21:21:53,821 [INFO] --- TEST 2: ES delta × spike side agreement --- 2026-04-06 21:21:53,835 [INFO] --- TEST 3: ES delta magnitude → move size --- 2026-04-06 21:21:53,840 [INFO] --- TEST 4: ES volume surge → move size --- 2026-04-06 21:21:53,841 [INFO] --- TEST 5: Time-of-day split --- 2026-04-06 21:21:53,846 [INFO] --- TEST 6: Sustained ES delta --- 2026-04-06 21:21:53,847 [INFO] --- NULL TESTS (2000 shuffles, parallel) --- 2026-04-06 21:21:55,858 [INFO] T1 h10: real_rho=0.5580, null_p=0.0000 2026-04-06 21:21:57,825 [INFO] T1 h30: real_rho=0.2747, null_p=0.0000 2026-04-06 21:21:57,856 [INFO] T2 h10: real_diff=7.718, null_p=0.0000 2026-04-06 21:21:57,886 [INFO] T2 h30: real_diff=7.044, null_p=0.0010 2026-04-06 21:21:57,892 [INFO] ============================================================ 2026-04-06 21:21:57,892 [INFO] ✅ STUDY A COMPLETE in 5s 2026-04-06 21:21:57,892 [INFO] Results: 54 keys 2026-04-06 21:21:57,892 [INFO] NULL_T1_corr_h10: {'real_rho': np.float64(0.558), 'null_mean': np.float64(-0.0004), 'null_std': np.float64(0.0607), 'null_p95': np.float64(0.1165), 'null_p_value': 0.0, 'n_shuffles': 2000} 2026-04-06 21:21:57,892 [INFO] NULL_T1_corr_h30: {'real_rho': np.float64(0.2747), 'null_mean': np.float64(-0.0013), 'null_std': np.float64(0.0601), 'null_p95': np.float64(0.1163), 'null_p_value': 0.0, 'n_shuffles': 2000} 2026-04-06 21:21:57,892 [INFO] NULL_T2_agree_h10: {'real_diff': np.float64(7.718), 'null_mean_diff': np.float64(0.02), 'null_p': 0.0, 'n_shuffles': 2000} 2026-04-06 21:21:57,892 [INFO] NULL_T2_agree_h30: {'real_diff': np.float64(7.044), 'null_mean_diff': np.float64(-0.003), 'null_p': 0.001, 'n_shuffles': 2000} 2026-04-06 21:21:57,892 [INFO] T1_corr_h10: {'n': 272, 'spearman_rho': np.float64(0.558), 'p_value': np.float64(0.0)} 2026-04-06 21:21:57,892 [INFO] T1_corr_h30: {'n': 272, 'spearman_rho': np.float64(0.2747), 'p_value': np.float64(0.0)} 2026-04-06 21:21:57,892 [INFO] T1_corr_h60: {'n': 272, 'spearman_rho': np.float64(0.1866), 'p_value': np.float64(0.002)} 2026-04-06 21:21:57,892 [INFO] T1_es_bear_h10: {'n': 106, 'spx_mean': np.float64(-4.995), 'spx_median': np.float64(-5.78), 'pct_up': np.float64(0.198)} 2026-04-06 21:21:57,892 [INFO] T1_es_bear_h30: {'n': 106, 'spx_mean': np.float64(-3.544), 'spx_median': np.float64(-5.955), 'pct_up': np.float64(0.387)} 2026-04-06 21:21:57,892 [INFO] T1_es_bear_h60: {'n': 106, 'spx_mean': np.float64(-1.132), 'spx_median': np.float64(-5.65), 'pct_up': np.float64(0.425)} 2026-04-06 21:21:57,892 [INFO] T1_es_bull_h10: {'n': 166, 'spx_mean': np.float64(3.399), 'spx_median': np.float64(3.27), 'pct_up': np.float64(0.627)} 2026-04-06 21:21:57,892 [INFO] T1_es_bull_h30: {'n': 166, 'spx_mean': np.float64(3.815), 'spx_median': np.float64(3.545), 'pct_up': np.float64(0.614)} 2026-04-06 21:21:57,892 [INFO] T1_es_bull_h60: {'n': 166, 'spx_mean': np.float64(4.853), 'spx_median': np.float64(2.185), 'pct_up': np.float64(0.542)} 2026-04-06 21:21:57,892 [INFO] T1_ttest_h10: {'t_stat': np.float64(7.208), 'p_value': np.float64(0.0)} 2026-04-06 21:21:57,892 [INFO] T1_ttest_h30: {'t_stat': np.float64(3.545), 'p_value': np.float64(0.0005)} 2026-04-06 21:21:57,892 [INFO] T1_ttest_h60: {'t_stat': np.float64(1.885), 'p_value': np.float64(0.0604)} 2026-04-06 21:21:57,892 [INFO] T2_agree_h10: {'n': 120, 'signed_mean': np.float64(4.618), 'wr_in_spike_dir': np.float64(0.742), 'abs_mean': np.float64(8.048)} 2026-04-06 21:21:57,892 [INFO] T2_agree_h30: {'n': 120, 'signed_mean': np.float64(3.59), 'wr_in_spike_dir': np.float64(0.667), 'abs_mean': np.float64(12.362)} 2026-04-06 21:21:57,892 [INFO] T2_agree_h60: {'n': 120, 'signed_mean': np.float64(0.987), 'wr_in_spike_dir': np.float64(0.517), 'abs_mean': np.float64(19.991)} 2026-04-06 21:21:57,892 [INFO] T2_disagree_h10: {'n': 152, 'signed_mean': np.float64(-3.1), 'wr_in_spike_dir': np.float64(0.342), 'abs_mean': np.float64(7.934)} 2026-04-06 21:21:57,892 [INFO] T2_disagree_h30: {'n': 152, 'signed_mean': np.float64(-3.454), 'wr_in_spike_dir': np.float64(0.454), 'abs_mean': np.float64(14.032)} 2026-04-06 21:21:57,892 [INFO] T2_disagree_h60: {'n': 152, 'signed_mean': np.float64(-4.998), 'wr_in_spike_dir': np.float64(0.414), 'abs_mean': np.float64(19.386)} 2026-04-06 21:21:57,892 [INFO] T2_ttest_h10: {'t_stat': np.float64(6.672), 'p_value': np.float64(0.0)} 2026-04-06 21:21:57,892 [INFO] T2_ttest_h30: {'t_stat': np.float64(3.445), 'p_value': np.float64(0.0007)} 2026-04-06 21:21:57,892 [INFO] T2_ttest_h60: {'t_stat': np.float64(1.919), 'p_value': np.float64(0.056)} 2026-04-06 21:21:57,892 [INFO] T3_magnitude_corr_h10: {'n': 272, 'spearman_rho': np.float64(0.2314), 'p_value': np.float64(0.0001), 'desc': 'bigger ES delta → bigger SPX move?'} 2026-04-06 21:21:57,892 [INFO] T3_magnitude_corr_h30: {'n': 272, 'spearman_rho': np.float64(0.1497), 'p_value': np.float64(0.0135), 'desc': 'bigger ES delta → bigger SPX move?'} 2026-04-06 21:21:57,892 [INFO] T3_magnitude_corr_h60: {'n': 272, 'spearman_rho': np.float64(0.1508), 'p_value': np.float64(0.0128), 'desc': 'bigger ES delta → bigger SPX move?'} 2026-04-06 21:21:57,892 [INFO] T3_tercile_HIGH_h10: {'n': 91, 'abs_mean': np.float64(10.036), 'abs_median': np.float64(7.83)} 2026-04-06 21:21:57,892 [INFO] T3_tercile_HIGH_h30: {'n': 91, 'abs_mean': np.float64(15.025), 'abs_median': np.float64(13.1)} 2026-04-06 21:21:57,892 [INFO] T3_tercile_HIGH_h60: {'n': 91, 'abs_mean': np.float64(21.612), 'abs_median': np.float64(17.21)} 2026-04-06 21:21:57,892 [INFO] T3_tercile_LOW_h10: {'n': 91, 'abs_mean': np.float64(6.41), 'abs_median': np.float64(5.34)} 2026-04-06 21:21:57,892 [INFO] T3_tercile_LOW_h30: {'n': 91, 'abs_mean': np.float64(11.96), 'abs_median': np.float64(9.42)} 2026-04-06 21:21:57,892 [INFO] T3_tercile_LOW_h60: {'n': 91, 'abs_mean': np.float64(16.84), 'abs_median': np.float64(12.77)} 2026-04-06 21:21:57,892 [INFO] T3_tercile_MID_h10: {'n': 90, 'abs_mean': np.float64(7.501), 'abs_median': np.float64(5.865)} 2026-04-06 21:21:57,892 [INFO] T3_tercile_MID_h30: {'n': 90, 'abs_mean': np.float64(12.897), 'abs_median': np.float64(10.5)} 2026-04-06 21:21:57,892 [INFO] T3_tercile_MID_h60: {'n': 90, 'abs_mean': np.float64(20.515), 'abs_median': np.float64(17.675)} 2026-04-06 21:21:57,892 [INFO] T4_surge_vs_normal_h30: {'surge_n': 41, 'surge_abs_mean': np.float64(15.621), 'normal_n': 226, 'normal_abs_mean': np.float64(12.79)} 2026-04-06 21:21:57,892 [INFO] T4_vol_ratio_corr_h30: {'n': 267, 'spearman_rho': np.float64(0.0704), 'p_value': np.float64(0.2513), 'desc': 'ES volume surge → bigger SPX move?'} 2026-04-06 21:21:57,892 [INFO] T5_afternoon_bear_h30: {'n': 34, 'mean': np.float64(-6.681), 'pct_up': np.float64(0.294)} 2026-04-06 21:21:57,892 [INFO] T5_afternoon_bull_h30: {'n': 51, 'mean': np.float64(0.142), 'pct_up': np.float64(0.529)} 2026-04-06 21:21:57,892 [INFO] T5_afternoon_corr_h30: {'n': 85, 'spearman_rho': np.float64(0.3287), 'p_value': np.float64(0.0021)} 2026-04-06 21:21:57,892 [INFO] T5_midAM_bear_h30: {'n': 51, 'mean': np.float64(-0.017), 'pct_up': np.float64(0.51)} 2026-04-06 21:21:57,892 [INFO] T5_midAM_bull_h30: {'n': 80, 'mean': np.float64(3.501), 'pct_up': np.float64(0.6)} 2026-04-06 21:21:57,893 [INFO] T5_midAM_corr_h30: {'n': 131, 'spearman_rho': np.float64(0.1925), 'p_value': np.float64(0.0276)} 2026-04-06 21:21:57,893 [INFO] T5_open_bear_h30: {'n': 21, 'mean': np.float64(-7.03), 'pct_up': np.float64(0.238)} 2026-04-06 21:21:57,893 [INFO] T5_open_bull_h30: {'n': 35, 'mean': np.float64(9.885), 'pct_up': np.float64(0.771)} 2026-04-06 21:21:57,893 [INFO] T5_open_corr_h30: {'n': 56, 'spearman_rho': np.float64(0.3668), 'p_value': np.float64(0.0054)} 2026-04-06 21:21:57,893 [INFO] T6_sustained_abs_h30: {'sustained_n': 146, 'sustained_abs': np.float64(13.909), 'flip_n': 126, 'flip_abs': np.float64(12.584), 'desc': 'sustained ES flow → bigger moves?'} 2026-04-06 21:21:57,893 [INFO] T6_sustained_abs_h60: {'sustained_n': 146, 'sustained_abs': np.float64(21.851), 'flip_n': 126, 'flip_abs': np.float64(17.105), 'desc': 'sustained ES flow → bigger moves?'} 2026-04-06 21:21:57,893 [INFO] T6_sustained_bear_h30: {'n': 49, 'mean': np.float64(-1.156), 'pct_up': np.float64(0.449)} 2026-04-06 21:21:57,893 [INFO] T6_sustained_bear_h60: {'n': 49, 'mean': np.float64(4.637), 'pct_up': np.float64(0.49)} 2026-04-06 21:21:57,893 [INFO] T6_sustained_bull_h30: {'n': 97, 'mean': np.float64(4.893), 'pct_up': np.float64(0.68)} 2026-04-06 21:21:57,893 [INFO] T6_sustained_bull_h60: {'n': 97, 'mean': np.float64(7.53), 'pct_up': np.float64(0.598)}