Record
89.2% headline hit rate across 327,715 backfilled calls. This is a BACKFILL, not a live-tracked record — see the note below.
Measured odds. No trade calls. what this means →
This is a backfill, not a live record
This is a BACKFILL: the v3 rule replayed over 2010-2026 history (2017-07+ for RTY), not a live-tracked record. Live publication starts only once /ranges' cron (parity/DESIGN.md task 6b) has actually been deployed and run -- see manifests's own known_gaps for what a fully honest live record still needs (the first-year-of-history walk-forward gap, EXPIRED handling).
Parameter disclosure
d_target and d_inv are PRODUCT PARAMETERS chosen by grid sweep to match the shape of leppyrd's published record20yr.csv signature (hit rate, decision speed, MFE/MAE, payoff, tier spread) - they are NOT a discovered fact about market structure and are not fitted to our own data's outcomes. Given that choice, the ODDS themselves are still walk-forward calibrated honestly (fit on year<Y, applied to year Y) - the parameter choice sets the RULE, the walk-forward sets the PROBABILITY under that rule. See sweep_v3.csv for the full 48-cell grid this was chosen from.
The rule
At TF-bar close t: range_N = max(High,N)-min(Low,N) over last N TF bars. position = (Close_t - min(Low,N))/range_N. prior_move_atr = (Close_t - Close_(t-N)) / mean(High-Low,N). Extreme-high setup (position>=0.97, prior_move_atr>=+0.50) -> CALL UP (continuation). Extreme-low setup (position<=0.03, prior_move_atr<=-0.50) -> CALL DOWN. Winning lookback: N=40.
ASYMMETRIC RACE, v3 (DESIGN.md #1). HIT = a later TF bar's High/Low TOUCHES entry +/- d_target*ATR_N(t). MISS = a later TF bar's CLOSE is beyond entry -/+ d_inv*ATR_N(t). HIT has precedence over MISS within the same bar. Neither within 40 periods -> EXPIRED (reported separately, excluded from the odds fit).
EXPIRED (neither target nor invalidation hit within the 40-period cap): 0.002% of calls (7) — excluded from the odds fit and from every tier's hit rate.
Stated vs. actual, by tier
| tier | stated | actual | gap | n | reportable |
|---|---|---|---|---|---|
| A | 84.3% | 86.4% | +2.06 pp | 92,249 | yes |
| B | 79.7% | 82.3% | +2.58 pp | 9,668 | yes |
| D | 74.7% | 82.7% | +7.97 pp | 231 | no |
| S | 90.1% | 90.9% | +0.83 pp | 217,164 | yes |
Stated vs. actual, by year
| year | stated | actual | gap | n | reportable |
|---|---|---|---|---|---|
| 2011 | 86.1% | 87.8% | +1.77 pp | 16,846 | yes |
| 2012 | 87.1% | 88.4% | +1.33 pp | 14,071 | yes |
| 2013 | 87.6% | 85.6% | -2.01 pp | 13,988 | yes |
| 2014 | 87.3% | 87.3% | -0.02 pp | 14,076 | yes |
| 2015 | 87.6% | 88.3% | +0.69 pp | 13,988 | yes |
| 2016 | 87.5% | 88.6% | +1.07 pp | 16,764 | yes |
| 2017 | 87.5% | 87.7% | +0.14 pp | 16,506 | yes |
| 2018 | 87.8% | 90.0% | +2.17 pp | 22,427 | yes |
| 2019 | 88.1% | 89.2% | +1.08 pp | 19,459 | yes |
| 2020 | 87.9% | 90.2% | +2.29 pp | 23,459 | yes |
| 2021 | 88.6% | 90.2% | +1.54 pp | 24,529 | yes |
| 2022 | 88.9% | 89.7% | +0.82 pp | 26,156 | yes |
| 2023 | 88.8% | 89.8% | +1.04 pp | 26,235 | yes |
| 2024 | 88.7% | 89.8% | +1.04 pp | 27,928 | yes |
| 2025 | 88.8% | 91.0% | +2.22 pp | 26,902 | yes |
| 2026 | 89.0% | 92.0% | +3.02 pp | 15,978 | yes |
Stated vs. actual, by market
| market | stated | actual | gap | n | reportable |
|---|---|---|---|---|---|
| CL | 87.9% | 89.5% | +1.61 pp | 45,553 | yes |
| ES | 88.2% | 89.5% | +1.30 pp | 64,025 | yes |
| GC | 88.0% | 90.1% | +2.08 pp | 36,297 | yes |
| NQ | 88.1% | 89.5% | +1.37 pp | 71,967 | yes |
| RTY | 88.4% | 88.7% | +0.32 pp | 40,676 | yes |
| YM | 88.0% | 88.9% | +0.87 pp | 60,794 | yes |
Stated vs. actual, by timeframe
| TF | stated | actual | gap | n | reportable |
|---|---|---|---|---|---|
| 15m | 87.3% | 88.9% | +1.55 pp | 99,613 | yes |
| 30m | 88.1% | 89.1% | +1.04 pp | 52,584 | yes |
| 45m | 88.6% | 89.8% | +1.20 pp | 38,018 | yes |
| 60m | 87.9% | 89.3% | +1.45 pp | 30,092 | yes |
| 75m | 89.1% | 89.7% | +0.67 pp | 25,466 | yes |
| 90m | 88.3% | 89.7% | +1.41 pp | 21,764 | yes |
| 105m | 88.9% | 90.1% | +1.18 pp | 19,486 | yes |
| 120m | 88.2% | 89.3% | +1.10 pp | 17,670 | yes |
| 150m | 89.3% | 89.9% | +0.62 pp | 14,619 | yes |
Payoff
Average move size (in ATR) on hits vs. misses, and expected value per call.
| tier | win % | payoff (mean) | EV/call (ATR) |
|---|---|---|---|
| overall | 89.2% | 0.982 | 0.515 |
| A | 86.4% | 1.047 | 0.498 |
| B | 82.3% | 1.036 | 0.490 |
| D | 85.7% | 0.960 | 0.420 |
| S | 90.9% | 0.951 | 0.527 |
Fixed-horizon side number
1-period close-vs-entry outcome, reported ALONGSIDE the v3 asymmetric-race status (target touch / invalidation close) per parity/DESIGN.md #6 -- 'hit is not whether it paid'. Independent field, not a substitute for the main HIT/MISS/EXPIRED status.
| tier | 1-period rate | n |
|---|---|---|
| A | 45.1% | 87,837 |
| B | 43.3% | 9,040 |
| D | 42.8% | 8,181 |
| S | 48.8% | 212,591 |
Download
Every backfilled call, unfiltered: record-backfill.csv (17.6 MB, CSV)
Known gaps
- SIGNATURE MISMATCH (central finding, explicitly requested): NO cell in the 48-cell sweep reproduces leppyrd's MISS decision speed. Their record20yr.csv shows MISS median 5-8 periods; every single cell in our grid (d_target in [0.05,0.20] ATR, d_inv in [0.15,1.00] ATR, both N=10 and N=40 lookbacks) gives MISS median 1-3 periods - see sweep_v3.csv column miss_median_period, min=1.0 max=3.0 across all 48 rows. Mechanically this is because ATR is itself the AVERAGE single-bar range, so a single bar's CLOSE crossing a threshold of 0.15-1.00x ATR from entry is a routine, often-1-bar event, especially right after the momentum push that generated the setup. PROPOSAL for the next iteration: replace the single-bar-close invalidation with either (a) a WIDE, TF-scaled invalidation that requires touching a boundary several ATR away (this is what v2's N-bar-range invalidation did, and it DID produce slow MISS - median 17 periods - but was too wide, given hit rate 99.3%), suggesting the true invalidation distance is between v2's N-range width and v3's single-ATR band; or (b) a PERSISTENCE requirement - K consecutive bar closes beyond d_inv before registering MISS, which would let isolated single-bar spikes revert while forcing MISS to wait out a genuine trend, matching HIT staying fast. Neither implemented here (out of scope for this pass) - recommend (b) as the next sweep axis since it directly targets bar-count without re-opening the near/far ATR-distance search.
- Because of the mismatch above, the winning cell is a best-available choice under the documented distance metric, not a close match: hit_pct in the 2-symbol sweep was 90.6% (vs target 80%) and the full 6-market walk-forward gives 89.2% - still meaningfully above the leppyrd 80% target, though the tier distribution now genuinely spans S/A/B/D (unlike v2's near-monolithic S).
- PARAMETER_DISCLOSURE above applies throughout: d_target=0.05 ATR / d_inv=0.15 ATR are a chosen design, not derived truth.
- v1 (literal close-vs-entry rule) kept as *_v1_literal.*; v2 (near=touch-ladder ATR, far=N-range boundary) kept as *_v2_range.* - both superseded by this v3 run for the live deliverable but preserved for audit trail.
- 8396 resolved (HIT/MISS) calls in each market's first calendar year of history have no walk-forward odds (no prior year to fit on) and are dropped from backfill_record.csv, not fabricated.
- No proximity/edge trading gate applied (parity/DESIGN.md point 4) - this is a probability product output, not a trade recommendation.
- Continuous 24h Globex session used, no RTH-only filter. RTY history starts 2017-07 (fewer fold-years than ES/NQ/YM/GC/CL, which start 2010-06).
- EXPIRED (40-period cap, neither side touched) is 0.002% of all calls in the full 6-market build (vs ~0.008% in the 2-symbol sweep) - excluded from the odds fit and from backfill_record.csv, reported separately here.
- DESIGN.md point 2 (call_side/confidence_held/rate_held two-sided grading schema, unified 2026-09-01 evening) is NOT yet implemented in these exports - our calls are already single-directional by construction (the trigger picks UP or DOWN, not both sides of a table cell), so grade is derived directly from odds_assigned without a call_side flip step. This should be reconciled with the /roadmap and /pulse packages' schema in a follow-up pass; flagged here rather than silently left inconsistent.