Research track v5 — oil term structure, systematic Fed rollover, stagflation tail
Evaluation window 2011-01-03 → 2026-09-23 (ETF era only) · generated 2026-09-23T15:34:49+00:00 · Live dashboard · Monitor v5 (live v5 rules) · v1 backtest · v2 backtest · v3 backtest · Backtest v5 · Monitor v5 · Regime analog · Stagflation stress
Episodes (≥15% drawdowns)
5
v5 hit rate at peak
0 / 5 (0%)
v5 median lead (hits)
n/a
v5 false-positive share
13.7% (26 / 190)
v5 state flips
82
Parameters frozen
2026-09-21 (? days ago)
Phase 1
Armed
Phase 2A
Phase 2B
Tail override
≥15% drawdown episode (numbered)
SPY adjusted close (log scale)
Side-by-side: v1 vs v3 vs v5 (full ETF-era window, 2011–present)
| Metric | Current system (v1) | v3 † | v5 † |
|---|---|---|---|
| Episodes (≥15%) | 5 | 5 | 5 |
| Hit rate (warned at peak) | 0 / 5 (0%) | 0 / 5 (0%) | 0 / 5 (0%) |
| Median lead (hits) | n/a | n/a | n/a |
| False-positive share of red days | 0.0% (0 / 23) | 37.5% (127 / 339) | 13.7% (26 / 190) |
| State flips | 14 | 342 | 82 |
† v3 and v5 metrics are design-contaminated: v3's parameters were chosen after observing v2's 2021–2026 failure, and v5's after observing the v1–v3 results. Neither column can be evidence of skill.
Episodes in the evaluation window (v5 states)
| # | Peak | Trough | Max drawdown | v1 at peak | v3 at peak | v5 at peak | v5 lead / lag | v5 red share of decline |
|---|---|---|---|---|---|---|---|---|
| 1 | 2011-04-29 | 2011-10-03 | -18.6% | PHASE 1 | PHASE 1 | PHASE 1 | no warning | 0% |
| 2 | 2018-09-20 | 2018-12-24 | -19.3% | PHASE 1 | PHASE 1 | PHASE 1 | stale warning ended 103 td before peak | 0% |
| 3 | 2020-02-19 | 2020-03-23 | -33.7% | PHASE 1 | PHASE 1 | PHASE 1 | -13 td (lag) | 46% |
| 4 | 2022-01-03 | 2022-10-12 | -24.5% | PHASE 1 | PHASE 1 | PHASE 1 | -53 td (lag) | 20% |
| 5 | 2025-02-19 | 2025-04-08 | -18.8% | PHASE 1 | PHASE 1 | PHASE 1 | -16 td (lag) | 54% |
v5 mechanics (frozen 2026-09-21)
- Tier 1 gates, each latched for 45 sessions (identical to v3): G1 · HY credit stress (HY OAS +65 bps over 20 sessions OR >= 425 bps); G2 · CCC stress (CCC & Lower OAS >= 1200 bps OR +150 bps over 20 sessions); G3 · yield exhaustion (DGS10 >= 5.10% OR 200-day z >= +3.0).
- Tier 2 quorum — at least 2 of 5 confirmations, each latched for 15 sessions: claims 4-week MA ≥ trailing 1-year min + 25k; GLD/CPER > 1.15× its 50-day SMA; SPHB/SPLV below its 50-day SMA; Brent term structure — prompt-to-6M calendar spread ≤ $0.50/bbl (contango flip), sourced live from the yfinance Brent contracts (BZ=F vs the +6-month contract built from the month codes F G H J K M N Q U V X Z, e.g. BZH27.NYM), with a roll-yield proxy fallback (BNO 60-day return minus Brent spot 60-day return ≤ -2%) when the contract data is unavailable or thin; T10Y2Y ≥ trailing 12-month min + 0.25. This oil leg replaces v3's BNO 20-day momentum leg (≤ -8.0%).
- States: PHASE 2A when a Tier 1 latch is hot AND the quorum is met (banner: “PHASE 2A: ROTATE DURATION TO 25%, EXIT CYCLICALS”); ARMED when a Tier 1 latch is hot without the quorum; PHASE 1 otherwise. PHASE 2B = 2A AND the automated Fed-rollover flag — DGS2 < (DFEDTARU+DFEDTARL)/2 − 0.25 — computed from FRED daily (banner: “PHASE 2B: DURATION TO 32%”). config.json is not used.
- TAIL_OVERRIDE supersedes all states (purple): weekly DGS10 close > 5.40% AND Brent spot > $120, where the weekly close is the last available observation of the calendar week. Banner: “STAGFLATION TAIL: NO DURATION ADDS - HOLD CARRY/TIPS/GOLD”; all 2A/2B rotation instructions are suppressed while it is active. It exits when either condition lapses for 5 sessions. The 2A/2B machine keeps running underneath, so an exit or the time stop can close 2A while the override is displayed.
- Exits from 2A/2B (first one wins; all require persistence): HY credit below its 50-day SMA for 3 consecutive sessions; SPHB/SPLV above its 50-day SMA for 3 consecutive sessions; or 60 sessions elapsed in state. After any exit, a 10-session cooldown blocks re-entry (no same-day re-entry; an exit day closes non-red). During the cooldown the quorum may still be hot while re-entry is blocked — the strict state definitions then read ARMED only when the quorum is not met, PHASE 1 otherwise.
- Live twin: monitor v5 evaluates these exact rules on live data every day (same code, imported from backtest_v5.py) and logs the oil-leg source and the Fed-rollover and TAIL_OVERRIDE inputs in status.json each day.
Sample discipline — read this first
- Parameters frozen 2026-09-21 (first deploy date; ? days ago). No parameter changes are permitted after this date; any future change ships as a new research track.
- The entire historical record is DESIGN-CONTAMINATED for v5: it was designed after observing the v1–v3 results (v1's live record, v2's out-of-sample failure, v3's reconstructed history). Historical metrics here are illustrative only — they cannot be evidence of skill. The true test is forward performance from the freeze date.
- ETF availability: SPHB/SPLV start May 2011, BNO mid-2010, CPER late 2010, GLD late 2004. ETF-based indicators do not exist before 2011, so this track evaluates 2011-01-01 onward and makes no claims about pre-2011 performance.
Data notes
- Credit gates pre-2023-09 run on the Baa proxy (Moody's BAA10Y, same data break as v1/v2/v3) and are conservative: Baa is investment-grade debt and runs tighter and less volatile than HY. The real HY series would have fired Aug 2007 in a GFC-like episode, so the reconstructed record understates credit-gate lead time.
- Oil leg: Brent +6M contract history is thin, so the backtest's C4 leg uses the roll-yield proxy (BNO 60-day return minus Brent spot DCOILBRENTEU 60-day return ≤ -2%) throughout and is marked approximate. The live track prefers the actual calendar spread and falls back to the proxy; the source used is logged in status.json each day.
- CCC & Lower OAS: FRED BAMLH0A3HYC. Like all ICE BofA series, FRED serves only a rolling 3-year window, so G2 is inactive before ≈2023-09 — there is no long-history CCC proxy.
- TAIL_OVERRIDE weekly close: last available DGS10 observation of the market week (weeks ending Friday), so a partial current week uses its latest observation — the same convention as the v4 invalidation panel.
- Data repair (2026-09-23 hotfix, no parameter change): the DCOILBRENTEU Brent spot input was data-suspect on 41 session(s) (deviation > 15% from the BZ=F front-month close); the BZ=F close stands in on those dates for the tail-override and oil-proxy inputs. Flagged data-suspect.
- Same caveats as v1/v2/v3: FRED publication lags ignored, no vintage adjustment, spliced proxies for pre-ETF history, closing prices only.
Limitations
- This is a research track, not the live system; monitor.py is unchanged. The latches, exits, cooldown, override and every threshold are exogenous design choices — only the freeze discipline is claimed, not optimality.
- For scoring, TAIL_OVERRIDE days count as red days (it is a defensive alert state); that raises its apparent false-positive share relative to a pure recession signal, which the stagflation case accepts by design.
- The exit/cooldown asymmetry is deliberate: quick re-entry after a whipsaw exit is impossible for 10 sessions, so a V-shaped recovery can run for up to two weeks with the state non-red. The flip count in the comparison table is the honest cost of the hysteresis.
- The Fed-rollover flag compares a market price (DGS2) to the target midpoint with a fixed 0.25-pt margin; around target changes it can flicker day to day. It gates only the 2A→2B escalation, never an entry.