# Cage-day classifier — results · 2026-09-09 13:28 Pre-registration: `2026-09-09-cage-classifier-prereg.md`. Sessions 688 (2023-10-11 → 2026-09-04), base cage rate 67.9%. OOS = 2025–2026 (398 sessions). ## Classifier (walk-forward OOS) - Full model AUC **0.658**; baseline regime-only 0.596; width-only 0.660. - Top-tercile predicted cage days: cage held **82.0%** (n=100); bottom tercile **56.4%** (n=172); mid 65.9%. - Standardised coefficients (final fit): onr -0.26, tilt +0.26, long -0.09, short -0.09, gap +0.11, absgap +0.06, vxn_shift -0.12, width +0.74, pos -0.04, opex +0.04. → **REFUTED** (rule: AUC ≥ 0.65, top ≥ 80%, bottom ≤ 55%). ## Univariate cage rate by quintile (full sample, descriptive) - onr: Q1 77% · Q2 67% · Q3 70% · Q4 65% · Q5 61% - tilt: Q1 51% · Q2 68% · Q3 67% · Q4 76% · Q5 77% - gap: Q1 67% · Q2 72% · Q3 65% · Q4 64% · Q5 71% - absgap: Q1 71% · Q2 67% · Q3 66% · Q4 68% · Q5 67% - vxn_shift: Q1 71% · Q2 66% · Q3 67% · Q4 68% · Q5 67% - width: Q1 51% · Q2 58% · Q3 72% · Q4 76% · Q5 81% - pos: Q1 59% · Q2 69% · Q3 70% · Q4 65% · Q5 76% - regime: long 77% · neutral 72% · short 59% ## Conditional trade rules (OOS sessions only, Part A fill rules) — classifier refuted → descriptive, no verdict - **C1_cage_fade**: eligible 100, triggers 15 — n too small. - **C2_break**: eligible 172, triggers 107, W/L/T 13/34/60, R/trigger **-0.106** (p=0.897), halves -0.117/-0.099, $ at 1 NQ -26,780 → descriptive. - **P8_uncond_fade**: eligible 398, triggers 120, W/L/T 12/42/66, R/trigger **-0.110** (p=0.928), halves -0.208/-0.044, $ at 1 NQ -15,557 → descriptive. - **P9_uncond_break**: eligible 398, triggers 177, W/L/T 18/47/112, R/trigger **-0.039** (p=0.730), halves +0.018/-0.081, $ at 1 NQ -16,868 → descriptive. ## Interpretation - **Near miss, and the miss is honest.** AUC 0.658 and top-tercile 82 % clear their thresholds; the bottom tercile holds 56.4 % against a 55 % bar. Under the frozen rule that is REFUTED, and no threshold is relaxed after the fact. - **The signal is cage width, not the other factors.** Width alone gives AUC 0.660 — the full model adds nothing (0.658). Width Q1→Q5: 51 % → 81 %. Much of this is mechanical: walls far from price (in ATR units) are hard to reach, so "close inside" is near-tautological. Tilt adds a real, smaller lift (Q1 51 % → Q5 77 %; long-γ 77 % vs short-γ 59 %). Overnight range works in the expected direction (Q1 77 % → Q5 61 %) but is subsumed by width; gap, VXN shift and opex add nothing. - **Predicting the cage does not create an entry.** On predicted cage days price rarely closes outside a wall and comes back (15 triggers in 100 sessions) — cage days are cage days because the walls are not reached. On predicted break days the break rule loses (−0.106 R over 107 triggers, both halves negative). Unconditional P8/P9 on the same OOS sessions: −0.110 / −0.039 R. Every wall-entry mechanic tested today loses regardless of conditioning. - **What survives:** walls are a *range prior* whose reliability is readable from cage width in ATR units and tilt — useful for target and stop placement (the desk read already sizes stops from its range model) and for the "cage held" scenario language. Not an entry. - Closed on this sample. Next legitimate step for wall-based trading is a different mechanic with new data (forward), or the untested direction factor (net premium / dark pool by date).