Research track v6 — credit-gate scoping study (Bloomberg B / CCC OAS)
Evaluation frame 2000-08-15 → 2026-09-30 (daily era; final 252 sessions excluded) · generated 2026-10-01T05:07:35+00:00 · Live dashboard · Monitor v5 (live v5 rules) · v1 backtest · v2 backtest · v3 backtest · Backtest v5 · Monitor v5 · Expected returns · Backtest v6 · Regime analog · Stagflation stress
The question
The v5 Tier-1 credit gate (G1) reads ICE BofA HY OAS, of which FRED serves only a rolling 3-year window; the frozen backtest reconstructs it before 2023-09 on the Moody's Baa proxy and marks the gap on-page. The owner maintains a hand-cleaned Bloomberg export of single-B and CCC OAS with daily history back to 2000 (monthly to 1997). This scoping study asks: can Bloomberg-basis B or CCC OAS earn a place in a future v6 — and in which job? A gate can do two different jobs: arming (warn that a top is near) and confirmation (certify that the damage underway is real). The study scores every candidate on both, separately.
Data provenance
- Source: Bloomberg Anywhere export 2026-10-01 (owner-cleaned);
columns
date, b_oas_bps, ccc_oas_bps, frequency; 6,604 rows — 43 monthly (1997-01→2000-07) then 6,561 daily (2000-08-15 → 2026-09-30). Values in bps. The export arrived with mixed date formats; Excel day-first misreads were reconstructed during cleaning. - Guards (fail closed): strict schema; every B value inside [100, 2500] bps and every CCC value inside [200, 4500] bps, else the page is not regenerated. Freshness = manual quarterly Bloomberg refresh (owner duty, no automation); the page shows the data as-of date (2026-09-30) and the study feeds no live trigger.
- Basis note: Bloomberg OAS is not the ICE BofA basis (current: B ~301 bps vs ICE ~309 bps; CCC ~1,007 bps vs ICE ~1,146 bps). All thresholds on this page are calibrated to Bloomberg history; never mix bases when comparing with the ICE-basis v5/v1 gates.
- FRED legs: DGS10 (G3 yield leg) and BAA10Y (the v5 G1 Baa proxy), full history, forward-filled onto the Bloomberg daily calendar. The G3 z-score uses the sample standard deviation (ddof=1) — a deliberate v6 convention (v5 uses ddof=0; immaterial at 200 sessions, disclosed).
- Episode anchors (6 peaks, 6 drawdown windows, pinned by the study): 2007-10-09, 2011-04-29, 2018-09-20, 2020-02-19, 2022-01-03, 2025-02-19 → troughs 2009-03-09, 2011-10-03, 2018-12-24, 2020-03-23, 2022-10-12, 2025-04-08. Episode anchors verified against SPY adjusted close at build time: 6/6 peaks and troughs match the adjusted-close extrema (window max drawdowns -55%, -19%, -19%, -34%, -24%, -19%).
- The monthly block feeds the 2000 sidebar only (see the firing log); every conditional is computed on the daily era.
Methodology: two metrics, two jobs
The 12m-peak conditional (A) answers the arming question — is a top near? — where sparse early gates win (G3: hot only 1,031 days and its hot-day conditional 22.4% sits at the base rate, far above any credit gate). The in-drawdown conditional (B) answers the confirmation question — is the damage real? — where persistent credit gates win (B, CCC). The two gate families are mirror images: G3 fires pre-peak and is cold during the crash (hot-day in-window 6.5% below its own cold-day 13.5%); B fires at/after the peak and stays hot through the decline (P(peak ≤21 sessions | B +65 hot) 1.2% vs 2.0% base). Sensitivity is latch-assisted by design — a 45-session latch keeps a gate hot through a decline after one fire, which is a feature for confirmation and a bug for arming. The v5 machine already separates these jobs implicitly: Tier-1 arms, the exits require HY below its 50-day SMA, and the Tier-2 legs are damage-side. This study makes the separation explicit before any v6 design.
Sweep tables (both metrics)
B OAS - shock (velocity) sweep
All conditionals over the 6,309 valid days (final 252 sessions excluded). Fires = contiguous raw-fire runs (full daily frame, a run ends after one clean session); captures = fire runs with at least one session inside a pre-peak 252-session window; capture lead = peak − run start, in sessions.
| Gate (raw fire; latched 45 sessions) | Hot days | (A) Arming — P(new ≥15% peak ≤12m | hot) | (B) Confirmation — P(in drawdown window | hot) | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Hits | Freq [Wilson 95%] | Fires | Captures | Median capture lead | Hits | Freq [Wilson 95%] | Sensitivity | P(in-dd | cold) | ||
| B +40 bps/20 sessions | 3,843 | 688 | 17.9% [16.7%,19.1%] | 122 | 23 | 139 sessions | 723 | 18.8% [17.6%,20.1%] | 92.7% | 2.3% |
| B +50 bps/20 sessions | 3,377 | 574 | 17.0% [15.8%,18.3%] | 107 | 21 | 99 sessions | 713 | 21.1% [19.8%,22.5%] | 91.4% | 2.3% |
| B +65 bps/20 sessions | 2,679 | 300 | 11.2% [10.1%,12.4%] | 90 | 9 | 135 sessions | 653 | 24.4% [22.8%,26.0%] | 83.7% | 3.5% |
| B +80 bps/20 sessions | 2,287 | 274 | 12.0% [10.7%,13.4%] | 72 | 9 | 180 sessions | 610 | 26.7% [24.9%,28.5%] | 78.2% | 4.2% |
| B +100 bps/20 sessions | 1,646 | 127 | 7.7% [6.5%,9.1%] | 50 | 5 | 51 sessions | 478 | 29.0% [26.9%,31.3%] | 61.3% | 6.5% |
| All days (base rate) | 6,309 | 1,512 | 24.0% | 780 | 12.4% | 100.0% | 12.4% | |||
B OAS - level sweep
All conditionals over the 6,309 valid days (final 252 sessions excluded). Fires = contiguous raw-fire runs (full daily frame, a run ends after one clean session); captures = fire runs with at least one session inside a pre-peak 252-session window; capture lead = peak − run start, in sessions.
| Gate (raw fire; latched 45 sessions) | Hot days | (A) Arming — P(new ≥15% peak ≤12m | hot) | (B) Confirmation — P(in drawdown window | hot) | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Hits | Freq [Wilson 95%] | Fires | Captures | Median capture lead | Hits | Freq [Wilson 95%] | Sensitivity | P(in-dd | cold) | ||
| B ≥ 450 bps | 3,686 | 385 | 10.4% [9.5%,11.5%] | 42 | 8 | 82 sessions | 573 | 15.5% [14.4%,16.8%] | 73.5% | 7.9% |
| B ≥ 500 bps | 3,008 | 236 | 7.8% [6.9%,8.9%] | 34 | 2 | 169 sessions | 528 | 17.6% [16.2%,19.0%] | 67.7% | 7.6% |
| B ≥ 600 bps | 2,162 | 150 | 6.9% [5.9%,8.1%] | 34 | 6 | 215 sessions | 408 | 18.9% [17.3%,20.6%] | 52.3% | 9.0% |
| B ≥ 700 bps | 1,308 | 0 | 0.0% [0.0%,0.3%] | 26 | 0 | — | 302 | 23.1% [20.9%,25.4%] | 38.7% | 9.6% |
| All days (base rate) | 6,309 | 1,512 | 24.0% | 780 | 12.4% | 100.0% | 12.4% | |||
CCC OAS - shock (velocity) sweep
All conditionals over the 6,309 valid days (final 252 sessions excluded). Fires = contiguous raw-fire runs (full daily frame, a run ends after one clean session); captures = fire runs with at least one session inside a pre-peak 252-session window; capture lead = peak − run start, in sessions.
| Gate (raw fire; latched 45 sessions) | Hot days | (A) Arming — P(new ≥15% peak ≤12m | hot) | (B) Confirmation — P(in drawdown window | hot) | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Hits | Freq [Wilson 95%] | Fires | Captures | Median capture lead | Hits | Freq [Wilson 95%] | Sensitivity | P(in-dd | cold) | ||
| CCC +150 bps/20 sessions | 1,583 | 126 | 8.0% [6.7%,9.4%] | 54 | 6 | 46 sessions | 489 | 30.9% [28.7%,33.2%] | 62.7% | 6.2% |
| CCC +200 bps/20 sessions | 1,081 | 63 | 5.8% [4.6%,7.4%] | 29 | 1 | 236 sessions | 385 | 35.6% [32.8%,38.5%] | 49.4% | 7.6% |
| CCC +250 bps/20 sessions | 693 | 0 | 0.0% [0.0%,0.6%] | 18 | 0 | — | 297 | 42.9% [39.2%,46.6%] | 38.1% | 8.6% |
| All days (base rate) | 6,309 | 1,512 | 24.0% | 780 | 12.4% | 100.0% | 12.4% | |||
CCC OAS - level sweep
All conditionals over the 6,309 valid days (final 252 sessions excluded). Fires = contiguous raw-fire runs (full daily frame, a run ends after one clean session); captures = fire runs with at least one session inside a pre-peak 252-session window; capture lead = peak − run start, in sessions.
| Gate (raw fire; latched 45 sessions) | Hot days | (A) Arming — P(new ≥15% peak ≤12m | hot) | (B) Confirmation — P(in drawdown window | hot) | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Hits | Freq [Wilson 95%] | Fires | Captures | Median capture lead | Hits | Freq [Wilson 95%] | Sensitivity | P(in-dd | cold) | ||
| CCC ≥ 1 500 bps | 930 | 0 | 0.0% [0.0%,0.4%] | 11 | 0 | — | 112 | 12.0% [10.1%,14.3%] | 14.4% | 12.4% |
| CCC ≥ 1 800 bps | 560 | 0 | 0.0% [0.0%,0.7%] | 9 | 0 | — | 101 | 18.0% [15.1%,21.4%] | 12.9% | 11.8% |
| CCC ≥ 2 000 bps | 308 | 0 | 0.0% [0.0%,1.2%] | 4 | 0 | — | 97 | 31.5% [26.6%,36.9%] | 12.4% | 11.4% |
| CCC ≥ 2 200 bps | 143 | 0 | 0.0% [0.0%,2.6%] | 1 | 0 | — | 80 | 55.9% [47.8%,63.8%] | 10.3% | 11.4% |
| All days (base rate) | 6,309 | 1,512 | 24.0% | 780 | 12.4% | 100.0% | 12.4% | |||
Composite candidates and reference legs (both metrics)
G1′/CCC′ are the Bloomberg-basis analogs of the v5 G1/G2 construction; G3 and Baa-G1 are FRED-basis reference legs re-implemented on this study's frame (Baa-G1 = the v5 G1 rule on the BAA10Y proxy; G3 with the ddof=1 z-score).
| Gate (latched 45 sessions) | Hot days | (A) Arming — P(new ≥15% peak ≤12m | hot) | (B) Confirmation — P(in drawdown window | hot) | ||||
|---|---|---|---|---|---|---|---|
| Hits | Freq [Wilson 95%] | Hits | Freq [Wilson 95%] | Sensitivity | P(in-dd | cold) | ||
| G1′ = B +65 bps/20 sessions OR B ≥ 600 bps composite | 3,315 | 379 | 11.4% [10.4%,12.6%] | 673 | 20.3% [19.0%,21.7%] | 86.3% | 3.6% |
| CCC′ = CCC +200 bps/20 sessions OR CCC ≥ 1 800 bps composite | 1,170 | 63 | 5.4% [4.2%,6.8%] | 389 | 33.2% [30.6%,36.0%] | 49.9% | 7.6% |
| G3 = DGS10 ≥ 5.10% OR 200-session z ≥ +3.0 (ddof=1) reference (FRED) | 1,031 | 231 | 22.4% [20.0%,25.1%] | 67 | 6.5% [5.1%,8.2%] | 8.6% | 13.5% |
| Baa-G1 = BAA10Y +65 bps/20 sessions OR ≥ 425 bps (v5 proxy leg) reference (FRED) | 278 | 0 | 0.0% [-0.0%,1.4%] | 120 | 43.2% [37.5%,49.0%] | 15.4% | 10.9% |
| All days (base rate) | 6,309 | 1,512 | 24.0% | 780 | 12.4% | 100.0% | 12.4% |
Incremental over v5-cold (both metrics)
Does the B gate add information on days the v5 credit/yield latches are already cold? Stratum = Baa-G1 and G3 latches both cold. The two metrics give opposite verdicts, which is the point of the study: on v5-cold days a B +65 fire marks lower peak risk (13.2% vs 25.6% stratum base) but much higher damage reality (24.1% vs 3.9% both-cold — 6.2× lift).
| Stratum | Days | (A) Arming — P(new ≥15% peak ≤12m) | (B) Confirmation — P(in drawdown window) | |||||
|---|---|---|---|---|---|---|---|---|
| Hits | Freq [Wilson 95%] | vs both-cold | Hits | Freq [Wilson 95%] | Sensitivity | vs both-cold | ||
| v5-cold (Baa-G1 & G3 latches cold) stratum base rate | 5,000 | 1,281 | 25.6% [24.4%,26.8%] | 0.76× | 593 | 11.9% [11.0%,12.8%] | 76.0% | 3.0× |
| v5-cold & B +65 hot | 1,964 | 260 | 13.2% [11.8%,14.8%] | 0.39× | 474 | 24.1% [22.3%,26.1%] | 60.8% | 6.2× |
| v5-cold & B +65 cold (both cold) the all-clear cell | 3,036 | 1,021 | 33.6% [32.0%,35.3%] | 1.00× | 119 | 3.9% [3.3%,4.7%] | 15.3% | 1.0× |
| v5-cold & B +100 hot | 1,137 | 91 | 8.0% [6.6%,9.7%] | 0.24× | 329 | 28.9% [26.4%,31.6%] | 42.2% | 7.4× |
| v5-cold & CCC′ hot | 622 | 63 | 10.1% [8.0%,12.7%] | 0.30× | 239 | 38.4% [34.7%,42.3%] | 30.6% | 9.8× |
| v5-cold & B +65 & CCC′ hot | 617 | 63 | 10.2% [8.1%,12.9%] | 0.30× | 239 | 38.7% [35.0%,42.6%] | 30.6% | 9.9× |
| v5-hot (context) | 1,309 | 231 | 17.6% [15.7%,19.8%] | 0.52× | 187 | 14.3% [12.5%,16.3%] | 24.0% | 3.6× |
G1′ full firing log (daily era)
Every contiguous G1′ latch-hot run (45-session latch), with per-leg raw-fire detail. Captures are annotated from the constituent raw-fire runs: lead = peak − fire-run start, in sessions. Captures: 2007-07-20 → 2007-10-09 (+55d); 2010-05→09 → 2011-04-29 (+149–247d); 2019-05→08 → 2020-02-19 (+128–181d) and 2020-01-31 (+12d); 2024-08-05 → 2025-02-19 (+141d). 2018 and 2022 arrived with no G1′ fire in their pre-peak windows.
| Latch hot from | to | Sessions hot | +65 bps leg fires (first → last) | ≥600 bps leg fires (first → last) | Episode capture (lead = peak − fire-run start) |
|---|---|---|---|---|---|
| 2000-08-15 | 2003-08-26 | 752 | 156 (2000-10-11 → 2003-06-03) | 638 (2000-08-15 → 2003-06-24) | — |
| 2005-03-31 | 2005-07-11 | 71 | 18 (2005-03-31 → 2005-05-06) | — | — |
| 2007-07-20 | 2007-10-25 | 68 | 24 (2007-07-20 → 2007-08-22) | — | captures 2007-10-09 (+55d) |
| 2007-11-05 | 2010-12-02 | 771 | 214 (2007-11-05 → 2010-06-14) | 596 (2008-01-09 → 2010-09-28) | captures 2011-04-29 (8 fire runs, +149–247d) |
| 2011-06-08 | 2012-08-30 | 311 | 57 (2011-06-08 → 2012-06-13) | 164 (2011-08-05 → 2012-06-28) | — |
| 2012-11-16 | 2013-01-23 | 45 | 1 (2012-11-16 → 2012-11-16) | — | — |
| 2013-06-05 | 2013-08-29 | 61 | 12 (2013-06-05 → 2013-06-27) | — | — |
| 2014-08-01 | 2015-03-11 | 151 | 21 (2014-08-01 → 2015-01-06) | — | — |
| 2015-07-27 | 2016-06-13 | 221 | 46 (2015-07-27 → 2016-02-12) | 97 (2015-09-28 → 2016-04-11) | — |
| 2018-10-26 | 2019-03-11 | 90 | 24 (2018-10-26 → 2019-01-04) | — | — |
| 2019-05-30 | 2019-10-18 | 100 | 11 (2019-05-30 → 2019-08-16) | — | captures 2020-02-19 (4 fire runs, +128–181d) |
| 2020-01-31 | 2020-09-15 | 158 | 35 (2020-01-31 → 2020-07-07) | 74 (2020-03-09 → 2020-07-14) | captures 2020-02-19 (+12d) |
| 2020-09-24 | 2020-12-02 | 47 | 3 (2020-09-24 → 2020-09-28) | — | — |
| 2022-02-11 | 2022-04-22 | 49 | 2 (2022-02-11 → 2022-02-17) | — | — |
| 2022-05-02 | 2022-12-16 | 158 | 46 (2022-05-02 → 2022-10-13) | 13 (2022-06-29 → 2022-10-03) | — |
| 2023-03-13 | 2023-07-21 | 92 | 19 (2023-03-13 → 2023-05-17) | — | — |
| 2023-10-13 | 2023-12-26 | 51 | 4 (2023-10-13 → 2023-10-23) | — | — |
| 2024-08-05 | 2024-10-04 | 45 | 1 (2024-08-05 → 2024-08-05) | — | captures 2025-02-19 (+141d) |
| 2025-03-13 | 2025-06-24 | 74 | 20 (2025-03-13 → 2025-04-23) | — | — |
Per-episode drawdown-window coverage
Latch-hot share of each drawdown window, per gate. G1′ reads 98 / 75 / 61 / 100 / 83 / 54% across the six episodes; sensitivity in the sweep tables is these rows pooled (latch-assisted — see methodology).
| Drawdown window (peak → trough) | Sessions | G1′ | B +65 | B +100 | CCC′ | G3 | Baa-G1 |
|---|---|---|---|---|---|---|---|
| 2007-10-09 → 2009-03-09 | 353 | 98% | 93% | 90% | 71% | 0% | 31% |
| 2011-04-29 → 2011-10-03 | 109 | 75% | 75% | 37% | 37% | 0% | 0% |
| 2018-09-20 → 2018-12-24 | 64 | 61% | 61% | 3% | 0% | 0% | 0% |
| 2020-02-19 → 2020-03-23 | 24 | 100% | 100% | 71% | 54% | 0% | 46% |
| 2022-01-03 → 2022-10-12 | 195 | 83% | 83% | 50% | 42% | 34% | 0% |
| 2025-02-19 → 2025-04-08 | 35 | 54% | 54% | 11% | 9% | 0% | 0% |
v6-candidate Tier-1 gate-count (both metrics)
Each day bucketed by the number of hot latches among the Bloomberg-basis candidate Tier-1 set (G1′, CCC′, G3). Under (A) the ordering is inverted — more hot latches, lower peak frequency (arming fails); under (B) the confirmation ordering holds through 2-hot (damage is real when the credit gates are hot together). The 3-hot cell is small (293 days: 263 in 2000–02 and 30 in 2022) and its (B) reading sits below 2-hot — single-path history, read with care.
| Hot latches (of G1′/CCC′/G3) | Days | (A) peak ≤12m | (A) freq | (B) in window | (B) freq |
|---|---|---|---|---|---|
| 0 | 2,613 | 942 | 36.1% | 102 | 3.9% |
| 1 | 2,169 | 467 | 21.5% | 257 | 11.8% |
| 2 | 1,234 | 103 | 8.3% | 391 | 31.7% |
| 3 | 293 | 0 | 0.0% | 30 | 10.2% |
| All days (base rate) | 6,309 | 1,512 | 24.0% | 780 | 12.4% |
Open v6 questions
- Full-machine data-swap simulation (the gating item): rebuild the entire v5 machine — states, quorum, exits — on Bloomberg B/CCC inputs before any v6 adoption. This page scores single gates only; it simulates no machine.
- B as a candidate C6 Tier-2 quorum leg (B +65 bps/20d, 15-session latch) and/or exit-logic input (B below its 50-day mean) — the damage-side roles validated here.
- G3's arming asymmetry (hot-day in-window 6.5% vs cold-day 13.5%): would a G3-cold condition inside 2A/2B exits help or hurt? Full-machine question.
- Data ops: quarterly Bloomberg refresh duty; monitor the Bloomberg-vs-ICE basis drift (today ~8 bps on B, ~139 bps on CCC) for threshold erosion.
- Parameters freeze only at a first monitor deploy; until then this page is a scoping record and its numbers can be recomputed as the CSV extends.
Sample discipline — read this first
- No parameters are frozen on this track. v6 is a scoping study; parameters freeze only at a first monitor deploy, which does not exist. Until then every value here is recomputed at build time.
- The entire historical record is design-contaminated: the study was designed after observing the v1–v5 results (including the v5 statistics extensions), and the episode set, thresholds, and grids were chosen with that history visible. Illustrative only — cannot be evidence of skill. The true test is forward.
- Ex-post conditionals, not probabilities: 6 episodes, 780 window days, one market path. Frequencies with Wilson 95% CIs describe the sample, not the future.
- The episode set is pinned and disclosed: the 2000-02 bear is outside the daily frame by construction (see the 2000 sidebar), so the arming screen's false-positive mass is itself episode-dependent.
- Track firewall (hard rule 7): nothing on this page enters v5 triggers, Track A bands, or any live logic.
Data notes
- Bloomberg CSV: owner-exported Bloomberg Anywhere export 2026-10-01 (owner-cleaned); cleaned (mixed date formats repaired — Excel day-first misreads reconstructed); guards fail closed outside the published ranges; freshness is a manual quarterly duty.
- Bloomberg vs ICE BofA basis gap disclosed: B ~301 vs ICE ~309 bps, CCC ~1,007 vs ICE ~1,146 bps at the data as-of date; thresholds are Bloomberg-calibrated.
- FRED legs (DGS10, BAA10Y): publication lags ignored, no vintage adjustment, forward-fill alignment only. G3 z uses ddof=1 (v6 convention; v5 uses ddof=0 — immaterial at 200 sessions, disclosed).
- SPY (yfinance, adjusted close) is used only to verify the pinned episode anchors at build time; a fetch failure leaves a visible warning in the provenance section, never a fabricated verification.
- Latch semantics are v5-identical (45 sessions, trailing max) for comparability; other latch windows were not swept in this study.
Limitations
- Scoping study, not a machine: no states, quorum, exits, or cooldowns are simulated. Gate-level evidence is necessary, not sufficient, for adoption.
- Sensitivity is latch-assisted by design — it certifies persistence, not timing; a gate that fires once inside a window can read 100% coverage of a short window (2020).
- The arming screen penalizes gates for firing during past bears (post-peak fire mass counts against them) — that is what a pre-peak arming metric means, and it is why confirmation is scored separately.
- Two data bases (Bloomberg credit, FRED rates) are aligned by forward-fill; seam effects are possible around holidays.