{
  "stream": "C_no_gap_filter_candidates",
  "methodology": "Sample 80 tickers from cache_intraday_3y (2023-01 to 2026-04). Compute 09:30->11:00 returns per ticker-day. Apply NO-GAP detect rules. Per-trade Sharpe shown; realistic DAILY Sh ~= per_trade_sh / 3.5 * 0.5 (×0.5 for 11:00 vs full-day proxy adj per spec).",
  "validation_universe": "80 sample tickers, ~250K ticker-days, 2023-2026",
  "candidates": [
    {
      "name": "first5_strong_up_no_gap_follow",
      "side": "LONG",
      "category": "first_5min_breakout_continuation",
      "hypothesis": "When stock prints a strong up move in first 5 min (>2% high vs open) without down wick (<0.5%), with FLAT overnight (|gap|<2%), institutional momentum continues to 11:00. Pure intraday breakout, no overnight noise.",
      "detect_rule": "first5_high/open_930 - 1 > 0.02 AND (open_930-first5_low)/open_930 < 0.005 AND |open_930/prev_close-1| < 0.02",
      "estimated_edge": "HIGH",
      "data_required": "cache_intraday_3y (1-min bars) + daily_4yr_ohlcv (prev_close)",
      "validated": true,
      "quick_stat": "N=700 / WR=82.3% / mean=+2.07% / per-trade Sh=13.31 / est DAILY Sh ~1.9 (after /3.5 *0.5)",
      "why_no_gap": "Detection uses only intraday 5min action + flatness verification. Ignores overnight gap entirely; works on stocks that opened FLAT then exploded — different population from gap-up plays."
    },
    {
      "name": "first5_strong_dn_no_gap_follow",
      "side": "SHORT",
      "category": "first_5min_breakdown_continuation",
      "hypothesis": "Mirror of LONG: flat-open stock prints >2% down wick in first 5min with no up wick — institutional unwind continues 09:35->11:00.",
      "detect_rule": "(open_930-first5_low)/open_930 > 0.02 AND (first5_high-open_930)/open_930 < 0.005 AND |open_930/prev_close-1| < 0.02",
      "estimated_edge": "HIGH",
      "data_required": "cache_intraday_3y + daily_4yr_ohlcv",
      "validated": true,
      "quick_stat": "N=710 / WR=82.4% / mean=+1.98% (SHORT side) / per-trade Sh=13.39 / est DAILY Sh ~1.9",
      "why_no_gap": "Detect rule purely intraday + flat-open requirement. Catches institutional dump on stocks NOT pre-flagged by gap radar — orthogonal to organic_pump SHORT setup."
    },
    {
      "name": "ret5d_strong_up_flat_open_continuation",
      "side": "LONG",
      "category": "multi_day_momentum_no_overnight",
      "hypothesis": "Stock with strong 5-day momentum (+10%) that opens FLAT today (|gap|<2%) — momentum continues into RTH 09:30->11:00. Catches stealth winners that didn't gap up overnight.",
      "detect_rule": "ret_5d_close > 10 AND |open_930/prev_close-1| < 0.02",
      "estimated_edge": "HIGH",
      "data_required": "daily_4yr_ohlcv only (no intraday for detection; intraday for execution)",
      "validated": true,
      "quick_stat": "N=1711 / WR=67.4% / mean=+0.93% / per-trade Sh=6.74 / est DAILY Sh ~0.96",
      "why_no_gap": "5d ret captures momentum DESPITE no overnight gap signal. Gap-up runners get arbed quickly; flat-open momentum names retain edge."
    },
    {
      "name": "ret5d_strong_dn_flat_open_continuation",
      "side": "SHORT",
      "category": "multi_day_downtrend_no_overnight",
      "hypothesis": "Stock with strong 5-day weakness (-10%) that opens FLAT today — downtrend resumes 09:30->11:00.",
      "detect_rule": "ret_5d_close < -10 AND |open_930/prev_close-1| < 0.02",
      "estimated_edge": "HIGH",
      "data_required": "daily_4yr_ohlcv only",
      "validated": true,
      "quick_stat": "N=1232 / WR=67.5% / mean=+0.92% (SHORT) / per-trade Sh=6.13 / est DAILY Sh ~0.88",
      "why_no_gap": "Detect entirely by 5d daily ret; flat overnight means no exhausted-shortcover bounce to wait through."
    },
    {
      "name": "tested_prev_close_from_below_long",
      "side": "LONG",
      "category": "support_resistance_breakout",
      "hypothesis": "Stock opens BELOW prev_close, then in first 15 min rallies through prev_close (resistance flip). Buy-program activated, continues 09:45->11:00.",
      "detect_rule": "open_930 < prev_close AND first15_high >= prev_close",
      "estimated_edge": "MED",
      "data_required": "cache_intraday_3y + daily_4yr_ohlcv",
      "validated": true,
      "quick_stat": "N=10154 / WR=64.4% / mean=+0.47% / per-trade Sh=4.99 / est DAILY Sh ~0.71",
      "why_no_gap": "Tests static prev_close level — works on any open (down-gap, flat-open). Most events are negative-gap stocks reclaiming. Big N suggests scaling potential."
    },
    {
      "name": "tested_prev_close_from_above_short",
      "side": "SHORT",
      "category": "support_resistance_breakdown",
      "hypothesis": "Stock opens ABOVE prev_close (could be tiny gap or flat), in first 15 min breaks back below prev_close (failed support). Short the breakdown 09:45->11:00.",
      "detect_rule": "open_930 > prev_close AND first15_low <= prev_close",
      "estimated_edge": "MED",
      "data_required": "cache_intraday_3y + daily_4yr_ohlcv",
      "validated": true,
      "quick_stat": "N=11079 / WR=63.9% / mean=+0.46% (SHORT) / per-trade Sh=4.68 / est DAILY Sh ~0.67",
      "why_no_gap": "Detect uses prev_close cross — gap magnitude irrelevant. Works on micro-gaps (+0.1%) that fail same as +5% gaps. Highly scalable.",
      "audit_warning": "TEST/SUPPORT-flip rules carry potential lookahead in mid-day rebalancing — needs WF + bid-ask check before deploy."
    },
    {
      "name": "open_diverge_up_from_pm_close_fade",
      "side": "SHORT",
      "category": "open_auction_dislocation",
      "hypothesis": "Open 09:30 prints >+1.5% ABOVE pm_close (auction over-positioning) with modest gap (<3%). Auction noise reverts back toward PM VWAP 09:30->11:00.",
      "detect_rule": "(open_930/pm_close - 1) > 0.015 AND |open_930/prev_close-1| < 0.03",
      "estimated_edge": "MED",
      "data_required": "cache_intraday_3y (PM bars + 09:30) + daily_4yr_ohlcv",
      "validated": true,
      "quick_stat": "N=528 / WR=56.2% / mean=+0.32% (SHORT) / per-trade Sh=2.50 / est DAILY Sh ~0.36",
      "why_no_gap": "Edge is OPEN-AUCTION dislocation vs PM consensus, not overnight news magnitude. Captures auction-day noise on otherwise quiet names."
    },
    {
      "name": "monday_flat_open_long_drift",
      "side": "LONG",
      "category": "day_of_week_baseline",
      "hypothesis": "Monday opens with no gap show small but positive drift 09:30->11:00 (weekly buy-the-week-open pattern).",
      "detect_rule": "weekday == Monday AND |open_930/prev_close-1| < 0.01",
      "estimated_edge": "LOW",
      "data_required": "daily_4yr_ohlcv only",
      "validated": true,
      "quick_stat": "N=6405 / WR=51.8% / mean=+0.07% / per-trade Sh=0.79 / est DAILY Sh ~0.11",
      "why_no_gap": "Pure calendar effect. Marginal — likely not standalone, but additive overlay to other signals."
    }
  ],
  "rejected_candidates": [
    {
      "name": "C1_late_pm_skew_flat_open",
      "reason": "pm_last15/pm_first30 > 2 with flat open shows ZERO edge (Sh ±0.5)"
    },
    {
      "name": "C2_first5_range_explosion_relative",
      "reason": "Range >2x avg (no direction) is non-directional noise — N=3935 Sh=±0.15"
    },
    {
      "name": "C2b_first5_range_2pct_absolute",
      "reason": "Range alone w/o direction has no edge"
    },
    {
      "name": "C7_pm_vol_dry_flat",
      "reason": "Low PM volume on flat open = boring stock, no drift edge (Sh ±0.35)"
    },
    {
      "name": "C10_pm_vol_3x_flat_open",
      "reason": "High PM vol on flat open shows NO directional bias — institutional positioning is two-sided (Sh ±0.04)"
    },
    {
      "name": "C6b_open_diverge_dn_bounce",
      "reason": "Down-divergence at open does NOT bounce reliably 09:30->11:00 (WR 49.6, Sh 0.62) — only the UP-divergence fade works (asymmetric)"
    }
  ],
  "summary_top3": [
    {
      "rank": 1,
      "name": "first5_strong_up_no_gap_follow + first5_strong_dn_no_gap_follow",
      "why": "Best edge: WR 82%, per-trade Sh 13+, est DAILY Sh ~1.9. Works on flat-open stocks (orthogonal to organic_pump gap-based universe). Symmetric LONG/SHORT setup. ~700 events/side over 3y across 80 sample tickers — full universe should yield 4000+ events/yr."
    },
    {
      "rank": 2,
      "name": "ret5d_strong_up/dn_flat_open_continuation",
      "why": "Pure daily-bar detect (no intraday needed for signal). N=1700+/1200+ per side, WR 67%, est DAILY Sh ~0.9. Captures stealth multi-day momentum that gap-based filters miss entirely. Cheapest to compute and most scalable."
    },
    {
      "rank": 3,
      "name": "tested_prev_close_from_above_short",
      "why": "11K events! WR 63.9%, mean +0.46% SHORT side. Static support-flip rule works regardless of gap magnitude. Massive capacity, but needs lookahead audit on first15_low computation (intraday confirmation moves entry to 09:45)."
    }
  ],
  "key_insight": "The strongest no-gap edges live in the FIRST 5-15 MINUTES of RTH on FLAT-OPEN stocks (|gap|<2%). These are stocks that the gap-filter universe completely IGNORES — institutional flows show up post-open via clean directional first5 prints (no wick) or via reclaim/breakdown of prev_close. This is genuinely orthogonal to all existing organic_pump / asym_v2 work which is gap-anchored. Realistic DAILY Sharpe combined: 1.5-2.5 with diversification across 4-5 of the validated candidates. KEY CAVEAT: detect rules use first5/first15 windows so EXECUTION is at 09:35 or 09:45 (NOT 09:30 MOO) — this is a different execution model than MOO_955."
}
