{
  "stream": "A_microstructure_timing",
  "research_date": "2026-04-27",
  "data_source": {
    "primary": "cache_intraday_3y/*.parquet (470 tickers with 1-min bars)",
    "events": "384 gap-up >=10% pump events (sample of 824 available, random_state=42), 2023-01 through 2025+",
    "note_april_2026_trades": "1/26 April 2026 trades (ULCC only) had minute cache; the small-cap pumps (USEG, GPUS, EFOI, BATL, SLDP, EVTL) are sub-2M ADV and not in cache. Used 3y broader pump sample as proxy. Findings should generalize qualitatively but exact numbers may differ for the strategy's small-cap subset."
  },
  "candidates": [
    {
      "name": "A1_exit_time_10:00_optimal",
      "side": "SHORT",
      "hypothesis": "SHORT pump-fade mean-reversion completes EARLY. Holding past 10:00 ET adds drift-back risk without alpha.",
      "detect_rule": "Replace 11:00 force-close with 10:00 force-close on organic_pump SHORT signals.",
      "validation_attempt": "Computed pnl_pct (SHORT) for each pump event at exit times {09:55, 10:00, 10:15, 10:30, 11:00}.",
      "result": "Per-trade mean pnl curve: 09:55 +0.093%, 10:00 +0.104%, 10:15 +0.014%, 10:30 -0.016%, 11:00 -0.058%. PEAK at 10:00; monotone decay after. 79.5% of TP-7% hits occur BEFORE 10:00, 91.0% before 10:30. Only 9.0% of TPs trigger in the 10:30-11:00 window.",
      "verdict": "ADD",
      "edge_size_estimate": "MED-HIGH (kills ~0.16pct/trade time-decay leak; cuts time-at-risk 50%)"
    },
    {
      "name": "A6_ORB_no_break_filter",
      "side": "SHORT",
      "hypothesis": "If price breaks ABOVE the 09:30-09:45 high during 09:45-10:15, momentum continuation in force; SHORT pump-fade dies. If price stays IN OR below the OR range, mean-reversion intact.",
      "detect_rule": "At 10:15 ET: if max(high) over [09:45,10:15] > max(high) over [09:30,09:45], SKIP/COVER. Else hold to exit.",
      "validation_attempt": "On 384 pump events, split by broke_orh boolean. Computed exit pnl at 10:15/10:30/11:00 each subset.",
      "result": "broke_ORH (33% of events): mean -5.32% wr 15.1% sh -0.73 at 11:00. no_break (67%): mean +2.51% wr 73.3% sh +0.49 at 11:00. Filter SKIP improves baseline per-trade Sh from ~-0.01 to +0.49 (~50x improvement) at cost of 33% trade volume. Dynamic-exit version (cover at 10:15 only if broke) improves Sh modestly (-0.008 -> +0.020). SKIP-mode dominates.",
      "verdict": "ADD (highest-impact filter found)",
      "edge_size_estimate": "HIGH (per-trade Sh +0.50 swing on 67% retained N)"
    },
    {
      "name": "A7_sweep_and_reverse_premium",
      "side": "SHORT",
      "hypothesis": "Open spike (>+3% above open in first 5min) that gives back ground by 09:55 = institutions absorbed retail FOMO. Highest-conviction reversal pattern.",
      "detect_rule": "first5_high_abs > open*1.03 AND close_09:55 < open. If both true and base setup (gap>=10% pump) holds: SHORT @ 09:35 or 09:55 (post-confirmation).",
      "validation_attempt": "On the 384 pump set, flagged sweep_rev events.",
      "result": "N=36 events. Per-trade pnl: 09:55 mean +2.64% WR 100.0% Sh 0.97; 10:15 +2.81% WR 94.4% Sh 1.18 (best); 11:00 +3.04% WR 91.7% Sh 0.97. WR 100% at 09:55 is striking (zero losers in N=36). Selection-bias possible but signal is mechanically defined.",
      "verdict": "ADD as boost (size +25%); RESEARCH_MORE on small-cap subset",
      "edge_size_estimate": "HIGH per-trade but LOW N (~36/yr if scaled, ~10% of pump set)"
    },
    {
      "name": "A2_first5_HOD_skip_inverse",
      "side": "SHORT",
      "hypothesis": "INVERSE of original A2: pumps that hit a NEW HOD in first 5min (vs prev_close) are strongly LESS profitable. Filter them OUT, not chase them.",
      "detect_rule": "first5_high vs prev_close >= +5% AND base gap setup => SKIP entry (high momentum risk).",
      "validation_attempt": "Split 384 events by first5_spike (first5_high >= prev_close * 1.05).",
      "result": "spike (69% of events): all exit times negative pnl, mean -0.42% Sh -0.06 at 11:00. no_spike (31%): all exit times positive, mean +0.86% Sh +0.17 at 11:00. Filter improves baseline ~5x but loses 69% N. Use as soft de-emphasis or stack with A6.",
      "verdict": "ADD (overlaps with A6 ORB; combine: stacked CLEAN subset N=232 has Sh 0.61 per-trade — best slice).",
      "edge_size_estimate": "MED standalone, HIGH stacked"
    },
    {
      "name": "A4_gap_close_speed_signal",
      "side": "SHORT (sizing modifier)",
      "hypothesis": "If gap doesn't close (price doesn't touch prev_close) by 10:00, probability it closes by 11:00 drops sharply. Use as sizing signal: half-out at 10:00 if gap not yet closed.",
      "detect_rule": "At 10:00 ET, check if intraday_low <= prev_close. If NOT, reduce SHORT size 50% (early partial cover).",
      "validation_attempt": "171/384 events (44.5%) closed gap. Of those, 84.8% closed by 09:45, 90.1% by 10:00, 94.2% by 10:15. Almost no new gap-closes in 10:30-11:00 (1.8%).",
      "result": "Probability of gap close after 10:00 conditional on not-yet-closed = (171-154)/(384-154) ~= 7.4%. Strongly supports early scaling-down.",
      "verdict": "ADD (combine with A1: exit at 10:00 if no gap-close confirmation)",
      "edge_size_estimate": "MED (risk-management edge, not return edge)"
    },
    {
      "name": "A6_stacked_with_A2_CLEAN_setup",
      "side": "SHORT",
      "hypothesis": "Combine: SKIP if (broke_ORH 09:45-10:15) OR (first5_high >= prev_close*1.05). Highest-quality SHORT pump-fade subset.",
      "detect_rule": "Entry: gap>=10% pump base. Filters: NOT broke_ORH at 10:15 AND NOT first5_HOD_spike. Exit: 11:00 (or 10:00 per A1).",
      "validation_attempt": "232/384 events pass both filters.",
      "result": "Per-trade exit at 09:55 mean +2.61% WR 77.4% Sh 0.61; 10:15 +2.77% WR 78.4% Sh 0.61 (best); 11:00 +2.85% WR 76.3% Sh 0.57. Dramatic improvement over baseline (Sh -0.008). Note: per-trade Sh inflates 2-3x vs daily; expected daily Sh ~0.20-0.30.",
      "verdict": "ADD (master stack)",
      "edge_size_estimate": "HIGH"
    },
    {
      "name": "A5_lunchtime_drift_neutral",
      "side": "N/A",
      "hypothesis": "10:30-11:00 window adds noise without directional bias.",
      "detect_rule": "drift_1030_1100 = (c_1100/c_1030 - 1) * 100",
      "validation_attempt": "Mean +0.031% std 2.006% — symmetric noise.",
      "result": "No edge in either direction. Confirms A1 finding: forcing exit BEFORE 10:30 gains nothing in absolute terms BUT cuts 30 min of variance. Sharpe-positive trade.",
      "verdict": "SKIP as standalone; supports A1.",
      "edge_size_estimate": "LOW (variance reduction only)"
    },
    {
      "name": "A8_late_morning_LONG_bounce_NOT_TESTED",
      "side": "LONG",
      "hypothesis": "Beat-down tickers see short-cover bounce in 10:30-11:00.",
      "detect_rule": "(would need gap-DOWN dataset, not in current pump-up sample)",
      "validation_attempt": "NOT RUN — out of dataset scope.",
      "result": "Pending",
      "verdict": "RESEARCH_MORE (need separate gap-DOWN sample)",
      "edge_size_estimate": "UNKNOWN"
    },
    {
      "name": "A3_re_entry_on_bounce_NOT_TESTED",
      "side": "SHORT",
      "hypothesis": "First SL hit often = false breakout; re-SHORT on bounce-back gives second chance.",
      "detect_rule": "If SHORT@09:30 hit SL by 09:45, wait for price to drop back below SL level (false breakout), re-enter.",
      "validation_attempt": "NOT RUN — needs SL-hit subsetting + path-tracking after SL.",
      "result": "Pending",
      "verdict": "RESEARCH_MORE",
      "edge_size_estimate": "MED (high cognitive complexity, modest capacity)"
    }
  ],
  "april_2026_tp_timing": "Could not validate directly. Only 1/26 April real trades (ULCC) has minute cache; other April tickers (USEG, GPUS, SPCE, EFOI, BATL, SLDP, EVTL) are sub-2M ADV not in 470-ticker cache. Indirectly inferred from the 3y broader pump sample: 79.5% of TP-7% hits occur before 10:00, 91% before 10:30. Strongly suggests current April TPs (USEG, GPUS, SPCE, EFOI, BATL, SLDP, EVTL) likely also fired well before 11:00, meaning current 11:00 force-close is sitting on already-realized winners and giving them back.",
  "summary": "MOST ACTIONABLE: A6_ORB_no_break filter (per-trade Sh -0.008 -> +0.49 by skipping 33% of events that break the 09:30-09:45 high during 09:45-10:15). Combined A6+A2 stack on 232/384 (60%) events delivers per-trade Sh +0.61 mean +2.6%/trade WR 77%. Add A1_exit_at_10:00 (peak of pnl curve, monotone decay after). A7 sweep&reverse is highest single-trade Sh (1.18) but small N (36). Realistic daily Sh from CLEAN stack ~0.20-0.30 (per-trade Sh / 2-3x daily inflator). Backlog: A8 LONG bounce on gap-down sample, A3 re-entry mechanics, validate on small-cap (sub-2M ADV) pump subset for direct production fit.",
  "deploy_recommendation": "1) Switch organic_pump exit from 11:00 -> 10:00 (A1, immediate). 2) Add ORB-broke skip at 10:15 (A6, filter out 33% of trades). 3) Add CLEAN stack as 'high-confidence' tier (A6+A2 combined). 4) Test A7 sweep&reverse as size-up boost (1.25x). 5) Quarterly re-validate on small-cap pump subset once cache extended."
}
