Date declared: 2026-07-23, before any computation. Split: Research only
(BTCUSD 2017-08-17 → 2022-12-31). Layer 3 — no fills, no stops, no costs.
Engine: Edge Lab (tradingbot.edgelab, acceptance-verified today) over level features
from the R7 engine (levels.py, frozen constants, 128-green suite).
Evidence basis: R7 spec §"What comes after" item 1; Osler (2003) for the
through-level acceleration variant; mentor's fade-at-level teaching for the touch
variants. Lineage if anything survives: touch variants mentor, break variants hybrid
(round-number component + Osler citation in the level book).
At each M5 bar close t (causal, LevelBook built from all M1 < t):
sup_dist_atr = (bar low − nearest live level strictly below prior close) / ATR14(M5);
res_dist_atr = (nearest live level strictly above prior close − bar high) / ATR14(M5);
plus the matched level's kind and score. Implementation may add a batch API to
levels.py for speed only with an equivalence test proving identity with at() on
sampled timestamps — definitions may not change.
Tolerance = 0.25 ATR14(M5) (the R7 touch tolerance — reused, not re-chosen). "Fresh" means the previous M5 bar did NOT satisfy the same proximity condition (dedup within touches; one event per approach).
Horizons: 15, 30, 60, 240 minutes. Forward move close-to-close in ATR units and bp, signed by the hypothesis direction. Universe: valid M5 bars with ATR14 > 0 and complete forward window. Nulls: full battery, engine defaults (1000/1000/1000 draws), block bootstrap by ISO week.
4 conditions × 4 horizons = 16 hypotheses, logged to the experiment ledger (cumulative 41 → 57 of 2,000). No depth-2 combinations in this scan; zone-score or kind conditioning would be a separate declared scan only if v1 warrants it.
This is a scan, not a finding. Anything interesting must pass the §5 bar (amended A1) before it is more than a logged effect — including the ex-ante cost arithmetic now mandated by the prereg TEMPLATE (fade-at-level implies tight stops; the drag law is waiting). Honest prior: touch-bounce effects are the most-mined pattern class in retail literature and mostly die under nulls; the break/acceleration variant has the real citation (Osler's order-book mechanics) and the displacement finding's shape suggests BTC rewards continuation over mean reversion. Expected outcome: breaks > touches.
NULL RESULT — no condition produces an exploitable reaction. Full table in
results/level-reaction-btcusd.json; feature parquet + equivalence test (200/200 vs the
slow oracle) in the bot repo; 148 tests green.
| Condition | n | Signed mean ATR at 15m / 30m / 1h / 4h |
|---|---|---|
| touch_support (bounce +) | 75,661 | −0.010 / −0.011 / −0.006 / +0.011 |
| touch_resist (bounce −) | 76,617 | −0.018 / −0.017 / −0.031 / −0.101 |
| break_up (continue +) | 47,598 | −0.037 / −0.048 / −0.036 / +0.034 |
| break_down (continue −) | 46,892 | −0.034 / −0.046 / −0.052 / −0.131 |
Consequence for the mentor branch: fade-at-level does not mechanize on BTC under the R7 definitions. Mechanized mentor-derived claims are now 0-for-4 (entry conditions, direction logic, stop-structure fit, level reaction). The R7 engine itself remains sound, tested infrastructure (its features flow into the store and, later, the gate's structured state). Successor scans (zone-score conditioning, other instruments) are separate declarations; nothing here licenses them automatically.