Failed as a trading rule, but the lab says the information is real. Ray is designing the dashboard-card mock-up — it appears here next refresh. Then you decide whether to ship it.
Vic Marlowe · Daily copper futures (Yahoo Finance HG=F) over gold (Yahoo GC=F or GLD); monthly fallback via FRED PCOPPUSDM / gold fixings.
proposed · triaged · reviewed
The five live signals read equity trend/positioning, the curve, and domestic prices (CPI, home prices) — none read real-time global industrial demand. The copper/gold ratio is a clean cross-asset growth/reflation gauge that historically leads 10y yields and tends to turn ahead of equity trend at cycle inflections, so it would carry a physical-demand read the model is currently blind to. It's distinct from the rejected sector-momentum and USD ideas — a cross-asset ratio, not an equity or FX overlay.
✓ triage: feasible
· Ray Kessler · 2026-07-15 · history from 2000-08-28 — Feasible. Daily copper/gold ratio is buildable here today from keyless Yahoo HG=F/GC=F, with a FRED monthly fallback on the key we already own — no paid API, no rate-limit or auth risk at 6h cadence. One honest caveat for Nadia: the daily continuous-futures history bottoms out at 2000-08-28, right on the edge of our out-of-window line, so a true pre-2000 backtest needs the monthly FRED splice (copper to 1992, gold TBD). Pass it to the lab.
Yahoo HG=F (copper front-month) weekly, keyless — our fetch_prices.py endpoint pattern — 200 OK, 1352 weekly bars, 2000-08-28 -> 2026-07-15, last close 6.39. Keyless, same host we already hit for 20 tickers.
Yahoo GC=F (gold front-month) weekly, keyless — 200 OK, 1352 bars, identical span 2000-08-28 -> 2026-07-15, last 4074.10. Copper/gold ratio computable daily; both continuous futures, common start ~2000.
FRED fallback PCOPPUSDM (global copper, monthly) with our FRED_API_KEY — key present, 414 obs, 1992-01 -> 2026-06-01. Monthly, ~1-month publication lag. Extends copper history to 1992 if a monthly splice is wanted.
FRED gold fixing GOLDAMGBD228NLBM — 400 'series does not exist' — LBMA fixing series was retired/renamed. Not a blocker: GC=F covers gold to 2000; a monthly FRED gold series can be sourced later if the lab wants a pre-2000 monthly splice.
Licensing truncation / cadence at 6h refresh — No ICE BofA-style trailing-3y trap: PCOPPUSDM is IMF/World Bank full history, Yahoo returns full span. Two extra Yahoo pulls + optional FRED call per refresh — negligible against existing load, no auth churn (Yahoo keyless, FRED key already held).
Lab verdict · Dr. Nadia Osei · 2026-07-15
Tested the copper/gold ratio as a trailing-only growth filter (mode in {trend-vs-MA, ROC} x window in {26,40,52} weeks), added two ways: A) a 6th signal folded into a strict 0-6 map, B) a slowdown overlay capping the book at Defensive when the ratio is not supportive; prev-week indexing, trailing detrend, no lookahead, all 12 cells reported. In 2007 the best cell (A/trend/w26) is +0.20 Sharpe but -0.20pp CAGR (Sharpe gain is de-risking, not timing); in 2015 every one of the 12 cells loses 3.08-5.44pp CAGR with Sharpe flat-to-down, because the ratio sat persistently bearish through the equity bull and held the model out of risk-on. No cell improves both primaries, so the adoption bar (req #1) fails outright. The OOW-spliced window flips sign across parameters (+2.07pp to -1.15pp CAGR), which is dispersion, not robustness. Forensics confirm the growth read is real - correct risk-off at 2008/2011/2015-16/2020/2022 and risk-on at 2021 - so the information is card material even though the rotation rule bleeds; hence advisory, not adopted.
2007A/trend/w26 CAGR 11.32% vs 11.52% (-0.20pp, noise), Sharpe 1.21 vs 1.01 (+0.20), maxDD -22.2% vs -21.8%
2015A/trend/w26 CAGR 11.23% vs 14.31% (-3.08pp), Sharpe 1.09 vs 1.12 (-0.03); all 12 cells -3.08 to -5.44pp CAGR
→ Vic: “The ratio does read the cycle - it called every slowdown from 2008 to 2022 - but it's bearish more weeks than it isn't, so bolting it onto an equity-rotation model just costs you 3-5 points a year of bull market; real gauge, wrong wiring.”
Soft June CPI has us one print from Risk-On — just as Hormuz relights the oil tape.
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI cooled hard: 3.5% YoY (−0.4% MoM, biggest drop since April 2020), core 2.6% — well under the 3.8% consensus. July hike odds collapsed to 17% from 42% on CME FedWatch ahead of the July 28–29 FOMC. Mega-cap tech got bid (Apple +4%, AMZN/MSFT/GOOGL ~+3%) while memory chips were taken out back (Micron −10%, SK Hynix −13%) and SpaceX broke its IPO price. Cutting the other way: the Strait of Hormuz reignited — US-Iran exchanges, WTI +6% to ~$76.
Our book
We're 4/5, Neutral (SPY 40 / QQQ 15 / AGG 25 / GLD 10 / TLT 10). Inflation is the lone signal off and the swing vote; June's sub-4% print argues it flips back on and takes us to 5/5 Risk-On on the next refresh — though the desk vintage still flags 'rising,' so it's not locked. Nothing else is near a trigger: trend +8% over the 40-wk MA, curve +0.4pp, whales only 76th percentile.
Watchlist
Next weekly refresh: inflation signal flip → potential 5/5 Risk-On switch at the following open
FOMC July 28–29 (Warsh) — market pricing just 17% odds of a hike
WTI / Strait of Hormuz — an energy shock the CPI signal only reads ~6 weeks late
Case-Shiller next vintage: +0.8% YoY (Apr), decelerating toward the zero trigger
On the strategy
The machine did exactly what it's built to do — went Neutral on the May 4.2% print, and the June cool now likely round-trips it back to Risk-On. That's a one-book-each-way whipsaw driven by lagged monthly CPI: fine if this is a mean-reverting inflation blip, ugly if Hormuz turns it into a real energy shock, because the CPI signal reads oil six weeks late and the model carries zero energy or geopolitical input. My flag this week: we may be about to flip back into risk chasing a June number that a $76 crude tape is already busy revising. Everything else is behaving — trend and curve confirm the equity tape, positioning isn't crowded — so this is a lag-risk note, not a break-glass one.
“Market's cheering a June number the Strait of Hormuz may already be marking down.” — Vic
Cooling June CPI hands the inflation signal back — Risk-On is one print away.
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI printed -0.4% on the month and 3.5% YoY, the biggest headline drop since April 2020 and well under the 3.8% consensus, cutting sharply from May's 4.2% three-year high; core cooled to 2.6%. Stocks took it well — S&P closed ~7,544, tech-led. The catch: the drop was energy-driven (energy -5.7% MoM but gasoline still +26.7% YoY, with Strait of Hormuz risk live), while the Fed under Warsh explicitly refused a victory lap — futures now price a ~63% chance of a September *hike*, not a cut, with rates held at 3.50–3.75% into the July 28–29 FOMC.
Our book
We're Neutral, 4/5, because inflation went red on May's 4.2% hot-and-rising print — that's the exact signal that knocked us out of Risk-On on 6/28. June at 3.5% is back under the 4% threshold, so barring a data quirk the inflation signal flips back on at next week's run and restores 5/5 Risk-On at the following open. Nothing else is near a trigger: curve +0.4pp vs −0.10, trend +7.8% over its 40-wk MA, whales at p76 vs the p90 crowd-trigger.
Watchlist
Inflation signal: June CPI 3.5% <4% → expect flip back ON, restoring Risk-On at the ~7/19 run/next open
Gasoline +26.7% YoY / Hormuz oil risk — an inflation re-acceleration the CPI signal would lag by a month
On the strategy
The machine did its job: it de-risked into a genuinely hot May inflation print and is now mechanically reversing as the data cools — no narrative, no override, exactly the discipline we built. But note the whipsaw cost — Risk-On → Neutral → Risk-On on two CPI prints a month apart is real turnover, and it's the price of a monthly, backward-looking inflation input. The wrinkle the five signals don't see: cooling CPI alongside a Fed pricing a September *hike* is an unusual configuration, and only the front-end repricing advisory (p93) is flagging that stress — it failed OOW as a rule, so it stays a card we read, not one we trade. Watch that the headline disinflation isn't just energy base effects masking sticky gasoline/oil pressure. On track, but re-entering Risk-On with the tape near highs and the Fed leaning hawkish is precisely when I keep one eye on what has no data feed.
“The model bought the dip in its own conviction. Let's hope the Fed read the same CPI we did.” — Vic
One clean CPI and we're back to 5/5; the oil that scared us in June has already left the building.
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI landed at 3.5% YoY yesterday, down from 4.2% in May and under the 3.8% consensus; core cooled to 2.6% with shelter up just 0.1% — a genuine broad softening, not only energy. The headline drop was largely gasoline (~-10%) unwinding after the mid-June US–Iran ceasefire, and July Fed-hike odds collapsed to ~17% (September still ~60% priced), 10y around 4.58%. Today the tape is narrow and jittery: memory/semis getting knee-capped on profit-taking (SK Hynix -10.7%, Micron -7.3%) while SPX sits roughly flat near highs.
Our book
Score 4/5, Neutral. Inflation is the lone off signal and the one closest to flipping — value now 3.46% sits below the 4% gate, so absent a fresh energy pop the next weekly evaluation should re-arm it and push us to 5/5 Risk-On (the breakeven advisory card already flags cf_score 5). The quiet downside watch is home prices: +0.84% YoY with new-home months-supply at 10.3 is the signal slow-drifting toward its zero threshold while everyone stares at CPI.
Watchlist
Next weekly refresh: inflation gate re-arms if CPI holds sub-4% → 5/5 Risk-On
FOMC Jul 29, 2:00pm ET — July hike ~17%, Sept ~60% priced
Energy base effects — WTI off ~20% in June; a reversal re-lifts headline CPI
On the strategy
June's inflation spike was oil, not demand — a geopolitical supply shock that tripped the CPI gate and knocked us to Neutral on June 28, and it's already unwinding. The gate did exactly what it's built to do, but it whipsawed us on a shock it can't tell apart from durable inflation; that's the known cost of a monthly lagging signal, not a flaw to override. Otherwise the environment plays to the machine's strengths: trend +7.8% above the 40-week, curve +0.4 and positive, disinflation resuming. Call it on track — mechanically late by design, not wrong. The thing to actually watch isn't inflation, it's home prices drifting toward the line with supply backing up.
“Market got scared of oil, and oil left. The model's still reading a note it wrote last month — that's the price of admission.” — Vic
June CPI cools to 3.5% — the one signal holding us at Neutral is the one that just got undercut
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI printed +3.5% YoY, down hard from 4.2% in May and below the 3.8% consensus; the drop was energy-led (energy -5.7% on the month) with core flat at 2.6%, and PPI confirmed the softness at -0.3%. Fed-hold odds for the July 29 meeting jumped to ~86% as an immediate hike got priced out. Equities grinded higher — Nasdaq led on ASML raising 2026 guidance and clean bank earnings (Morgan Stanley record revenue), S&P around 7,574. The tape's tell: an Iran war that the desk kept pricing as an inflation shock has, so far, not delivered one — that's a geopolitical/energy wildcard none of our five signals can see.
Our book
We're 4/5, Neutral — SPY 40 / QQQ 15 / AGG 25 / GLD 10 / TLT 10. Inflation is the lone signal off and the only thing between us and 5/5 Risk-On; it flipped us out on 6/28 when CPI was hot and rising. That same signal is now closest to flipping back: a confirmed sub-4%, no-longer-rising CPI reading turns it on — but it runs on lagged monthly data, so the model may sit in Neutral a beat behind a cooling print.
Watchlist
Jul 29 FOMC — hold now ~86% priced, watch the statement's inflation language
Inflation signal: needs CPI <4% and not rising to flip us to 5/5; June data (3.5%) supports it once it registers
Whales at p76 net %OI — still short of the p90 crowded-long trigger, room to run
Energy/Iran: gasoline +26.7% YoY — an energy re-acceleration is the tail that re-arms the CPI signal
On the strategy
The machine is behaving, but this is a live demonstration of its known soft spot: the CPI signal's monthly lag whipsawed us to Neutral on 6/28 right as inflation was peaking, and it'll likely lag the flip back on the cooling June print. That's not a bug — it's the price of using a slow, robust series instead of a noisy fast one — but note we gave up part of a rally to it. The bigger caveat is what the model structurally can't see: a shooting war whose entire market impact ran through energy prices, exactly the channel that drives our one live inflation signal. Trend (+7.7% over the 40-wk), curve (+0.4pp), and whales (uncrowded) all read constructive, so the underlying regime is risk-on in everything but the lagged CPI read. On track — just don't mistake the Neutral tag for a bearish signal; it's a timing artifact.
“Inflation the model fears is last month's problem — that's the trouble with fighting a war on monthly data.” — Vic
Inflation nowcast (leading complement to the CPI signal)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · Cleveland Fed Inflation Nowcasting (clevelandfed.org/indicators-and-data/inflation-nowcasting); CPI/PCE current- and next-month estimates, updated multiple times weekly.
proposed · triaged · reviewed
Our live CPI signal runs on a ~6-week-old print — the score still reads May while June only just landed, and an energy-driven re-acceleration would reach the YoY line months after it hits markets. A daily-updated nowcast carries a real-time estimate of the current and next month's inflation, so it would flag turns weeks before the official number the live signal waits on — new timing information, not a new level.
✓ triage: feasible
· Ray Kessler · 2026-07-15 · history from 2013-07-01 — Passes triage: free, keyless, reachable, near-zero lag, updates daily — exactly the timing information the thesis wants. Hard caveat Nadia must design around: history starts July 2013, so there is no pre-2000 out-of-window test; validate on 2013-2026, which does contain the 2021-23 energy-and-broad re-acceleration this idea is built to catch. Treat as a timing overlay on the CPI signal, not a new level.
Reachability from this pod (curl, keyless) — GET clevelandfed.org/-/media/files/webcharts/inflationnowcasting/nowcast_month.json?sc_lang=en -> HTTP 200, 7.50 MB, no API key/auth. Same for nowcast_quarter.json and nowcast_year.json. No key we don't already hold.
Series coverage in the file — 8 series: nowcast (CPI, Core CPI, PCE, Core PCE) + realized 'Actual' counterparts. This is the real MoM/YoY nowcast, current- and next-month, as described.
History depth (the deciding check) — Distinct period tokens run 2013-7 through 2026-7; chart subcaption is '2013-7'. Earliest observation is July 2013 — the model's public start (Knotek-Zaman). Does NOT reach 2000; a clean pre-2000 out-of-window test is impossible with this source.
Update cadence & publication lag — Embedded _comment stamp '2026-07-14 00:00' (yesterday); daily axis labels confirm multiple updates/week. Lag is near-zero by design — that's the leading edge the idea wants.
Licensing/truncation trap — No trailing-window truncation like FRED's ICE BofA 3y series — full 2013->present is exposed. The only 'truncation' is structural: the nowcast simply wasn't produced before 2013.
6h-refresh operational fit — No auth, no rate-limit gate hit on single pulls; safe at 6h. Two caveats for Clem, not blockers: (1) payload is FusionChart-shaped 7.5 MB JSON served as application/octet-stream — needs a real JSON parse, our FRED keyless startswith('observation_date') gate won't apply; (2) ~30 MB/day across the 3 files on a 1 vCPU pod is fine but not free.
Redundancy vs series we already hold — We already pull T10YIE/T5YIFR (breakeven expectations) and CPIAUCSL. This adds a distinct thing — a real-time current/next-month print, not a market-implied or lagged level.
Lab verdict · Dr. Nadia Osei · 2026-07-15
Sourced the Cleveland Fed nowcast (keyless, HTTP 200) and reconstructed a genuine real-time current-month MoM series, 2013-08 to 2026-07, 3236 daily readings. Tested three ex-ante designs (swap the lagged CPI slot, re-acceleration veto, 6th brake) x two gauges (annualized MoM, 3m-annualized) x three thresholds, on both primaries plus a 2013-2019/2019-2026 stability split. On the faithful headline-CPI swap the candidate loses in both primaries (2013: -0.22pp CAGR at best, most cells -1.6 to -2.8pp; 2015: -0.61pp best; switches nearly double) and never improves maxDD. The only positive cells use Core CPI, an off-mandate series, and their entire edge sits in 2019-2026 (+0.4 to +1.2pp) with exactly +0.00 in 2013-2019 -- and no pre-2013 out-of-window exists to arbitrate, since the nowcast itself begins July 2013. Fails rule 1 (headline), fails rule 2 (no OOW; effect is one-episode-only), clears rule 3 only on an off-mandate series -- the textbook mirage. Rejected.
2007no 2007 window exists (nowcast starts 2013-07); earliest supported = 2013 primary: baseline 13.18%/Sh1.06 vs best faithful candidate 12.96%/Sh1.07 = -0.22pp, within noise; headline mom_ann cells -1.6 to -2.8pp
2015baseline 14.29%/Sh1.12 vs best faithful candidate 13.68%/Sh1.09 = -0.61pp CAGR; maxDD unchanged; off-mandate Core-CPI variant +0.27 to +0.75pp
oownone possible -- data begins 2013-07. Pseudo-split 2013-2019 = +0.00 across all cells; all Core-CPI edge (+0.4 to +1.2pp) is confined to the 2019-2026 re-acceleration event
→ Vic: “The nowcast does lead the print, Vic -- but its only measurable P&L is the 2021-23 spike it was built to catch, and there's no pre-2013 window to prove that isn't just the event scoring itself.”
Front-end repricing speed (2y yield ROC)
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Vic Marlowe · FRED DGS2 (2-Year Treasury Constant Maturity, daily) — trailing-only ROC and percentiles, no lookahead.
proposed · triaged · reviewed
Our five signals see trend, curve slope, realized CPI, home prices and positioning — none see how fast the front end is repricing the Fed path. In a hawkish hiking regime the 2y can jump 100–150bp while 10−2 stays positive (bear flattening), so our curve signal fires late by construction. A trailing rate-of-change / percentile on the 2y would flag policy-tightening stress before the slope inverts.
✓ triage: feasible
· Ray Kessler · 2026-07-15 · history from 1976-06-01 — Feasible — clean. DGS2 is a public-domain daily series we can already pull with our FRED key, history to 1976, one business-day lag, no ICE-style trailing-window truncation. Trailing ROC/percentile on it is a pure derived transform with no lookahead risk. Hand it to Nadia.
Reachable with keys we already hold — same api.stlouisfed.org observations endpoint fetch_fred.py uses, FRED_API_KEY (len 32) from env — 200 OK, valid JSON. No new source, no paid API, no auth beyond the key we already run.
History depth via series metadata + observations pull — observation_start 1976-06-01; first non-missing 1976-06-01 (7.260); 12,524 non-missing daily obs. ~24 years of pre-2000 history for out-of-window tests — far past the ~2000 bar.
Update cadence and publication lag — Daily (freq D). Latest obs 2026-07-13, last_updated 2026-07-14 15:16 CT — roughly one business-day lag, typical for the Board's H.15 constant-maturity series.
Licensing truncation trap (the ICE BofA / BAMLxxx 3y-trailing problem) — None. DGS2 is Board of Governors / Treasury CMT, public domain — full 1976→present exposed, unlike our BAMLH0A0HYM2. Confirmed by pulling the actual head date, not just metadata.
6h-refresh viability — One series, one request per refresh, static API key, no churn. Nowhere near FRED rate limits. Fits the existing fetch_fred.py loop with a one-line SERIES addition (Clem's call, not mine).
Lab verdict · Dr. Nadia Osei · 2026-07-15
Tested DGS2 front-end repricing speed as absolute pp change over {63,126}d, trailing-756d percentile at {85,90,95}, lagged 1bd, as both a 6th signal (design A) and a tightening-stress overlay cap (design B); grid fully reported, OOW arbitrates. No cell clears the bar in both primaries: the roc126/p90 cell that adds +0.91pp CAGR / +0.12 Sharpe in 2007 turns -0.44pp in 2015, and the only 2015-flat cell (roc63/p90) is -0.19pp in 2007 — a cross-window mirage. maxDD is unchanged in nearly every cell because the up-repricing flag never fires inside the equity drawdowns (2008 falling, 2018 missed at +18bp). The signal is real information — clean flags on 1994/2000/2022 and a +2.48pp CAGR / +0.32 Sharpe lift in the OOW 2000-07 hiking window — but that value is confined to the arbitration window and does not translate to the primaries, so it fails the rule and lands as an advisory card.
2007best cell B roc126/p90: 12.41% CAGR vs 11.50% baseline (+0.91pp), Sharpe 1.13 vs 1.01 — but same cell is -0.44pp in 2015
2015no cell beats baseline above noise; best B roc63/p90: 14.34% vs 14.29% (+0.05pp), Sharpe 1.18 vs 1.12 — flat; roc126 cells -0.4 to -0.9pp
oowOOW 2000-2007 native: B roc63/p85 10.01% vs 7.53% (+2.48pp), Sharpe 1.13 vs 0.81 (+0.32); OOW 1989-2007 spliced roughly flat (+/-0.5pp)
→ Vic: “The blind spot is real, Vic — the 2y did jump 162bp in '94 and 125bp in '22 — but the flag sleeps through 2018, the one hike-driven equity drawdown it was built to catch, and pays off only in a window we're not allowed to adopt on; card material, not live.”
Card preview · Ray Kessler · 2026-07-15
Front-end repricingADVISORY · PREVIEW
+0.72pp2y ROC · 126d
53 / 100 · 50 = trigger
ONp93 of trailing 3y · above p90 · 2y +72bp/126d
Design-B overlay fires today (p93 above the p90 line) → it would cap the live book one level more defensive than the 5-signal score. The model does NOT act on it, by rule: the same roc126/p90 cell added +0.91pp CAGR in 2007 but turned −0.44pp in 2015 and paid off only in the 2000–07 OOW window we can't adopt on.
Source: FRED DGS2 (2y Treasury CMT, Board of Governors, public domain, daily, ~1 business-day lag; latest obs 2026-07-13). Trailing ROC + percentile, no lookahead. Refreshed every 6h.
Why it earns a slot: The five scoring signals watch curve slope (10−2), but in a hawkish hiking regime the 2y reprices 100–160bp while 10−2 stays positive — bear flattening — so the curve signal fires late by construction. This card surfaces that stress early: the percentile line crossed p90 in 1994, the 1999–2000 hiking run-up and 2022 before any inversion, and it sits at p93 right now (+72bp/126d). It earns the slot because its failure is printed on it — the 2018 drawdown it slept through and the 2015 sign-flip — so the human reads an honest context gauge, not a signal masquerading as tradeable.
Trailing-756-day percentile of the 2-year yield's 126-day change. Above p90 means the front end is repricing the Fed path faster than at any point in the last three years — the tightening stress the 10−2 curve signal only registers after it inverts.
This is a mock-up — nothing is on the dashboard yet. To ship it, tell Clem:
“add the Front-end repricing card”.
Model holds Neutral on a stale inflation red the fresh CPI just undercut
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI landed cool: -0.4% MoM, the biggest monthly drop since April 2020, dragging headline YoY to 3.5% from May's 4.2% and beating the 3.8% consensus; core was flat at 2.6%. It was energy-driven — energy index -5.7% on the month — so read it with one eyebrow up; shelter and services did also moderate. In this hiking cycle under Warsh, July hike odds collapsed to ~17% but September still sits near 63%, with FOMC on July 28-29. Equities are at highs — S&P ~7,540 — with the AI/semis trade (ASML) and financials earnings carrying the tape.
Our book
We're 4/5, Neutral (SPY 40 / QQQ 15 / AGG 25 / GLD 10 / TLT 10) — the lone red is inflation, which flipped off June 28 on the hot May print. Trend is strong (SPY 7.8% over its 40-wk MA), curve +0.4, whales net short and nowhere near crowded (p76 vs p90). Inflation is the swing: a confirmed sub-4%, no-longer-rising YoY flips it back on and takes us to 5/5 Risk-On — the June cool-down is pushing that way but the YoY series is still rising, so the machine waits for confirmation rather than chasing one energy-led print.
Watchlist
FOMC July 28-29 — hike debate live, July odds ~17% but Sept ~63%
Inflation signal: needs June sub-4% to confirm and YoY to stop rising to flip back on → 5/5
Home prices: Case-Shiller +0.8% YoY, 2nd straight MoM decline — closest structural signal to its zero trigger
July payrolls Aug 7 (June was a soft +57K, unemployment 4.2%)
On the strategy
On track, and behaving exactly as designed. The model de-risked to Neutral on a real inflation red, and it is now sitting patiently through a headline CPI beat instead of chasing it — that lag is a feature when the print is energy-driven and reverses. My one flag: energy-led CPI volatility can whipsaw the inflation signal (off June 28, plausibly back on within weeks), and the desk should expect that churn, not read it as the model being indecisive. The quieter concern is Case-Shiller — 0.8% YoY, real terms negative for eleven straight months, second consecutive monthly decline — that's the signal most likely to hand us a second leg off, and it's reported three months stale, so we'll see the crack late. Nothing in the tape says crash; positioning is net short, not euphoric, which is the opposite of a blow-off setup.
“Cheapest CPI drop in five years — bought entirely with gasoline. The model knows better than to tip on one tank of gas.” — Vic
Cooler June CPI hands the model its swing signal back — Neutral, but one print from Risk-On.
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI fell 0.4% m/m, dragging headline to 3.5% YoY from May's 4.2%, well under the 3.8% consensus; core was flat at 2.6%, with the entire miss driven by a 5.7% drop in energy (gasoline still +26.7% YoY — base effects, not a trend yet). CME FedWatch flipped a July hike from ~42% to ~17%, an 86% hold now priced into the July 29 FOMC. S&P closed 7,543 (+0.38%), Nasdaq +0.9%, semis leading. The nagging footnote: sell-side is openly flagging 'speculation at extreme levels' in the AI complex.
Our book
Score 4, Neutral — we're carrying the June 28 inflation red that dropped us out of Risk-On when May printed 4.2% and rising. Inflation is the signal closest to flipping: at 3.5% it's back under the 4% line and now decelerating, so on the next weekly read it likely turns back on → 5/5 → Risk-On. Note the mechanics: model runs on prior-week data and trades next open, so the July 14 print isn't in the book yet.
Watchlist
Jul 29 FOMC — 86% priced to hold; a hawkish hold or a hike is the tail the model can't pre-see
Inflation signal: next weekly run should read June 3.5% and flip on (→ 5/5 Risk-On)
Home prices: +0.84% YoY and decelerating (gauge 55, new-home months-supply 10.3) — the quiet one nearest to going red
Whales (COT) S&P specs at p76 — watch for p90 crowding into any Risk-On chase
On the strategy
The machine did its job — de-risked on a genuine 4.2% inflation red — but this is a textbook monthly-lag whipsaw: it sold the Risk-On book right as CPI peaked and rolled over, and if July 14's cooler print flips us back, we re-buy higher. That's the tax on a lagging monthly signal, not a defect; it survived validation and I'm not touching it. My live concern is the froth the five signals can't fully see: trend (SPY +7.8% over its 40-wk) and whales (p76) are both benign because they read one cap-weighted index and net positioning — neither captures narrowing participation under an 'AI speculation extreme' tape. Energy base effects are also flattering headline CPI; core at 2.6% is the cleaner read, and gasoline +26.7% YoY means the inflation signal could reverse again on a bad oil month. On track, but eyes on the internals, not the index.
“The index can look fine right up until you notice only five stocks are holding the door.” — Vic
The inflation scare that bounced us to Neutral just cooled off — mind the energy base effect
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI printed 3.5% YoY (0.4% MoM drop, largest since April 2020), well under the 3.8% expected and down from May's 4.2% — but the fall was mostly a 5.7% energy drop; core held flat, sticky at 2.6% YoY. Equities took it well: S&P closed +0.4% (~7,540), semis rebounded ~2.5%, though IBM fell 25% on a profit warning — idiosyncratic, not systemic. Fed sits July 29 with ~86% odds of a hold, but the tape still expects a September hike; the cut isn't the base case. CFTC specs pushed further net-short S&P (-42.9K), so the crowd is leaning bearish, not euphoric.
Our book
We're 4/5, Neutral — inflation the lone red that knocked us out of Risk-On on 6/28. That signal now reads 3.46% June CPI, back below the 4% trigger, so it's set to flip green at next evaluation and restore 5/5 → Risk-On at the next open. Everything else is comfortably on: trend +7.8% over the 40-wk MA, curve steepening at +0.4pp (trigger -0.10), specs net-short and nowhere near the crowded-long p90.
Watchlist
Inflation signal poised to flip back ON → 5/5 Risk-On rotation at next eval, unless a revision holds it above 4%
Fed July 29 (~86% hold priced); the live risk is a September hike the model can't see
Case-Shiller: April +0.84% YoY and decelerating monthly, >half of 20 cities now negative YoY — slow bleed toward the 0% flip
Next quarterly weight reset 2026-10-01 (81 days)
On the strategy
The machine did its job and I won't second-guess it: CPI spiked, it de-risked, it kept us honest. But this is a textbook monthly-CPI whipsaw — it flipped us to Neutral on a scare that reversed inside three weeks, and we'll pay the round-trip cost buying back higher. That's the known tax on a lagging inflation signal, and it's acceptable, but note the blind spot: the model reads June's cooling as all-clear when the drop was gasoline base effects and core is still 2.6% with a Fed eyeing a September hike. Meanwhile the Case-Shiller signal is the quiet one to watch — housing is broadening lower and that signal lags a quarter, so by the time it flips, the damage is old news. On track, eyes open.
“The signal that scared us in June apologized in July. Markets don't send flowers.” — Vic
June CPI cooled to 3.5% — but our feed still holds the May red, and oil's climbing again.
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI printed soft: 3.5% headline vs 3.8% expected, down from May's 4.2%, with core flat at 2.6% — but the drop was energy (-5.7% MoM), not breadth. S&P closed +0.38% at 7,543 Tuesday, semis rallied (SMH +2.5%), while IBM cratered 25% on weak software/infra guidance as Q2 earnings open. The 10y sits ~4.6%, near two-month highs, as Middle East tension pushes oil up and rekindles rate worries; funds are 3.50–3.75% and July-hike bets are easing into the Jul 28–29 FOMC.
Our book
We're 4/5, Neutral — inflation is the sole down signal and the swing vote. The soft June print is exactly the direction that flips it back on to 5/5 Risk-On, but our CPI feed is still stamped 2026-06-01 (the May 4.2% red that moved us on 6/28), so the model won't act until ingestion. The other four are comfortable: trend +7.8% over the 40wk MA, curve +0.40pp and steepening, specs net short (not crowded long, p76 of a p90 trigger), home prices +0.8% YoY.
Watchlist
Jul 28–29 FOMC (Warsh) — active hike debate, funds 3.50–3.75%
Jul 28 Case-Shiller (May) — home-price signal is our weakest ON at +0.8% YoY, real terms falling 11 months
June CPI ingestion → inflation-signal flip watch, 4→5 Risk-On
Oil / 10y at 2-mo highs — energy-driven disinflation could reverse the next print
On the strategy
The machine did its job — it downshifted on the May inflation red and now sits one clean print from re-engaging. But this is the textbook whipsaw of a monthly CPI rule: June already cooled, we lag it by a cycle, and the entire move was energy — which the current oil spike could unwind by next reading. The five signals carry no direct energy input, so a headline that lives and dies on gasoline is the live blind spot; I already floated a crude-trend overlay and it died in the lab, and an inflation nowcast is under review that targets exactly this lag. On track structurally — just don't mistake one soft energy month for a trend, and don't be surprised if 5/5 arrives and then leaves.
“Disinflation, brought to you by one cheap month of gasoline. Oil didn't get the memo.” — Vic
Soft June CPI buys the tape a day; the machine still sees inflation red and sits Neutral.
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI came in soft — headline -0.4% m/m, 3.5% YoY vs 3.8% expected, core 2.6% — mostly energy rolling over as the Iran tensions eased; S&P closed 7,543 (+0.4%), semis led (SMH +2.5%), and IBM cratered 25% on a profit warning the model has no feed for. Rate-HIKE odds cooled on the print but the market still leans toward a possible September hike into the July 29 FOMC — this is a tightening-risk regime, not a cutting one. Note the new chair: Kevin Warsh, a known hawk, testifies to Congress July 14-15. Nothing here is a narrative I'd trade on top of an ugly single-name print.
Our book
Score 4/5, Neutral — the lone red is inflation, which knocked us out of Risk-On on 6/28. It's the only signal near a flip: even a soft June headline doesn't clear it while the 3-month path is still rising (2.43% → 3.46%); we go back to 5/5 Risk-On only when that upward trend breaks. Every downside trigger is miles off: trend 7.8% over its 40-wk MA, curve +0.40 vs a -0.10 kill, whales p76 vs a p90 crowd.
Watchlist
Wed 7/16 PPI (Jun) — pipeline read on whether the CPI cool holds
Thu 7/16 Retail Sales, Jobless Claims, Pending Home Sales — demand + a housing-signal tell
Inflation signal: needs the rising CPI path to break to flip us to 5/5 Risk-On
On the strategy
On track. The inflation signal did exactly its job — flagged the CPI upturn and pulled us to Neutral ahead of a hawkish-Fed, tightening-risk backdrop, which is the kind of regime this machine is built to de-risk into. The honest caveat is timing: CPI reports on a lag and Case-Shiller is stuck on April data, so if equities correct on rate fears BEFORE the prints confirm, trend is our only fast-twitch signal — and it's 7.8% from its trigger, so it would take a real drawdown to react. Offsetting that, whales aren't crowded (p76), so there's no euphoric long to unwind; a repricing would be about rates, not positioning washout. No structural concern this week — the score reads the environment correctly. Watch trend as the canary if the Fed narrative turns.
“Cheaper gas isn't disinflation — it's a truce with Iran. Don't confuse the two.” — Vic
Cooler CPI takes the hawks off, but the tape that matters is floating in Hormuz.
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI landed soft — 3.5% YoY, -0.4% m/m, core just 2.6% — well under the ~3.8% consensus and a big step down from May's 4.2%; markets read it as the end of the July hike scare. S&P +0.38% to 7,544, Nasdaq +0.9% on a semis bounce, though IBM shed 25% on a soft software guide. The catch is in the internals: energy printed +15.7% YoY with gasoline +26.7%, and US-Iran hostilities have reignited — strikes, a revoked Iranian oil waiver, Strait of Hormuz risk — with Brent back to ~$76-82. FOMC is July 28-29 under Warsh; the strip still prices roughly one hike this year.
Our book
Neutral, 4/5. Inflation is the only dark signal — it kicked us out of Risk-On on 6/28 on May's hot 4.2% read, and the model is still scored off that May-vintage print (CPI freshness 6/01). June cooling to 3.46%, back under the 4% line, means inflation is the signal closest to flipping — once ingested it re-lights and restores 5/5 Risk-On. The counterweight: S&P specs sit at p76 and climbing toward the p90 crowded-long veto.
Watchlist
Model ingests June CPI (3.46%, <4%) — inflation signal set to flip on → 5/5 Risk-On
FOMC July 28-29 (Warsh) — market still prices ~one 2026 hike
US-Iran / Strait of Hormuz — Brent ~$76-82, energy +15.7% YoY the CPI signal will lag
COT S&P specs p76 → p90 is the crowded-long trigger the other way
On the strategy
The machine did exactly what it's built to do — de-risked on a hot inflation print, now poised to re-risk on the cooler one, no narrative required. But this setup spotlights a known blind spot: an oil-supply shock is an inflation impulse that hits the tape in days and the CPI YoY line in months, and our inflation signal reads the rear-view mirror. Energy is already +15.7% YoY before any fresh Hormuz escalation feeds through. If we flip back to Risk-On next week on a cooling monthly print just as tanker headlines re-accelerate prices, that's a textbook whipsaw the score cannot pre-empt. On track and behaving, but the lag is the exposure I'd watch, not the level.
“The CPI cooled; the Strait of Hormuz didn't — guess which one the print notices last.” — Vic
June CPI cooled on cheaper gasoline — just as Hormuz lines up to take it back.
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
S&P closed +0.38% at 7,543 after June CPI printed 3.5% YoY (vs 3.8% expected, down from 4.2% in May); core was 2.6% and flat on the month — the biggest headline monthly drop since April 2020, almost entirely energy-led (energy index -5.7% MoM, still +15.7% YoY). July Fed-hike odds collapsed to 17% from 43%, so a hold on 29 July looks near-certain, but traders still price ~63% for a September hike — this remains a hiking cycle at 3.50-3.75%. Against that, WTI jumped ~2.4% to $78 on US-Iran tension and Strait of Hormuz attacks, and IBM fell ~25% on an AI-capex warning.
Our book
We sit 4/5, Neutral — inflation is the lone red, flipped off 28 June when CPI was above 4% and rising. That signal is the one closest to flipping: June's cooling clears the level test, but our feed still flags YoY as rising off a 2.43% base three months back, so a clean cooling read is what takes us to 5/5 Risk-On. Watch home prices as the other thin one — gauge 55, Case-Shiller +0.84% YoY and decelerating.
Watchlist
29 Jul FOMC — hold expected (hike odds ~17%); September is the live meeting (~63% priced for a hike)
Oil/Hormuz — energy drove the CPI drop; a sustained WTI spike reverses it, and the model has no oil feed
Inflation signal — a clean cooling June read clears the model's rising+level test → 5/5 Risk-On
Case-Shiller — >half of 20 metros now YoY-negative; a national sub-zero print flips home prices off toward Defensive
On the strategy
The machine did its job — trimmed to Neutral on the inflation red on 28 June, no heroics, no narrative-chasing. My concern is what it's trading on: this month's disinflation was energy-led, and energy is now the tape's biggest wildcard via Hormuz — a feed the model doesn't have, and crude-trend already failed the lab, so we don't get to bolt one on. Second, home prices lags two to three months; it's scoring April data while March already showed more than half the 20 metros negative YoY — in a genuine housing turn that lag bites late. Net: on track, position is appropriate, but two of our five reds/near-reds hinge on things the model sees slowly or not at all. Stay Neutral, don't fight it.
“Inflation fell because gasoline did. Go ask the Strait of Hormuz how long that arrangement holds.” — Vic
June CPI cracks, but Warsh is still holding the hammer
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI fell 0.4% MoM, YoY down to 3.5% from May's 4.2%, core 2.6% — well under the 3.8% consensus. S&P +0.4% to 7,544 and Nasdaq +0.9% to 26,107 on a semi rebound; IBM took a 25% haircut on a profit warning. The relief is thin: Warsh's Fed is openly debating a hike at the July 28–29 FOMC, 10y sits ~4.58%, and September hike odds are still ~60%. Note who did the cooling — energy dropped hard on the month but gasoline's still +26.7% YoY.
Our book
Score 4/5, Neutral. Inflation is the lone dark signal and the swing vote — CPI YoY at 3.46% is still tagged rising, so a soft single month hasn't re-fired it; a clean YoY roll-over restores 5/5 Risk-On. Everything else is unbothered: trend +7.8% over its 40-wk MA, curve +0.4pp (nowhere near −0.10), specs only 76th pctile. The quiet downside is home prices at +0.84% YoY and fading toward the zero line.
Watchlist
Jul 28–29 FOMC — hawkish Warsh, hike is live; the model can't price a reaction function
Next CPI (mid-Aug, July data): inflation signal re-fires if YoY stops rising
Case-Shiller +0.84% YoY, weakest since 2011 — cross zero and home-prices flips off → Defensive
10y−2y at +0.4pp: bear-flattening if the 2y keeps ripping
On the strategy
On balance, on track — the machine did its job pulling us out of Risk-On on inflation ahead of a hawkish-Fed event, and no signal is stressed. My concern is the regime, not the reading: a brand-new hawkish chair tightening into stalled disinflation is a policy-driven setup the curve signal structurally lags, because 10−2 won't invert until well into a hiking cycle, by which point the move's mostly made. Meanwhile home prices are grinding toward zero — the quietest way this model gets knocked defensive without a headline. Nothing to override; just don't read a positive curve as an all-clear while the Fed is actively hiking. What changes my mind: a 2y that rips while the slope stays positive, or Case-Shiller crossing zero.
“Disinflation's a fine story right up until you notice who's still swinging the hammer.” — Vic
Market breadth divergence (% of S&P 500 members above 200-DMA)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · Computable from the constituent OHLC already in the Yahoo stack (share of S&P 500 names above their own 200-DMA); or the ready-made $SPXA200R breadth series (StockCharts / Nasdaq Data Link). Ray to confirm fetchability.
proposed · triaged · reviewed
Our trend signal reads only SPY versus its 40-week MA, so a cap-weighted index held up by a handful of mega-caps can stay green while the average stock rolls over — exactly the narrow-leadership setup being flagged now. Breadth carries information none of the five live signals do: internal participation, which historically deteriorates ahead of index-level trend breaks. Distinct from rejected momentum/sector variants because it measures cross-sectional confirmation of the trend we already trade, not a new return factor.
✓ triage: feasible
· Ray Kessler · 2026-07-15 — Feasible, but not the easy way Vic implied. The ready-made $SPXA200R is not free-fetchable from this pod — no keyless source, paid API only. The DIY constituent path IS buildable on keyless Yahoo data with pre-2000 depth, so pass it to the lab — but Nadia should know up front it carries a survivorship-bias trap without a point-in-time membership source, and it needs a ~500-symbol incremental fetcher to survive the 6h cadence.
Ready-made $SPXA200R via Yahoo chart endpoint (symbols %5ESPXA200R, SPXA200R, %24SPXA200R, interval=1d) — All three return {"result":null, "error":"No data found, symbol may be delisted"}. Yahoo does not carry StockCharts breadth symbols.
Ready-made $SPXA200R via stooq CSV (stooq.com/q/d/l/?s=spxa200r.us) — Returns a JS anti-bot challenge page (noscript 'requires JavaScript'), not CSV. Not machine-fetchable keyless from this pod. StockCharts has no free API; Nasdaq Data Link's breadth series is behind a paid subscription — no free ready-made series exists.
DIY path: Yahoo daily OHLC depth for a constituent (AAPL, interval=1d), same endpoint pattern as fetch_prices.py — 11,487 daily rows, 1980-12-12 -> 2026-07-14. Constituent OHLC needed to compute % above 200-DMA is keyless and easily predates 2000 — data depth is not the constraint.
6h-cadence / operational fit of the DIY path — Requires ~500 symbols vs the current ~20-ticker stack. fetch_prices.py does full refetch per run; at 6h that's ~2000 keyless Yahoo hits/day from one pod IP — a real rate-limit exposure. Needs an incremental/cached fetcher, not the existing full-refresh pattern.
Validation trap: point-in-time S&P 500 membership — We hold no historical constituent list. Computing breadth on today's 500 members back to 2000 injects survivorship/look-ahead bias — precisely into the pre-2000 out-of-window tests. The DIY series is a biased proxy, not the true breadth series, unless a membership-history source is added.
Lab verdict · Dr. Nadia Osei · 2026-07-15
The named series ($SPXA200R, % of S&P members above 200-DMA) is not free-fetchable (Yahoo 404, stooq anti-bot, StockCharts/Nasdaq paid), and the DIY constituent path injects survivorship + look-ahead bias precisely into the pre-2007 OOW arbiter with no point-in-time membership source — barred by rule #4. I tested the unbiased, keyless equivalent: RSP/SPY equal-weight-vs-cap-weight breadth divergence, as a 6th signal (Design A) and a divergence veto (Design B), ma_weeks {26,40} x buf {0,0.02}. In 2007 Sharpe rises +0.15/+0.18 but only by de-risking (CAGR −0.4 to −1.5pp); in 2015 CAGR is cut −1.2 to −4.5pp with Sharpe flat; and the OOW 2003-2007 window is negative on both CAGR and Sharpe in all 8 cells. Wins-one-primary-on-lower-vol, loses-the-other-and-OOW is the exact mirage rule #2 rejects. The flag also reads 'divergence' near-permanently since 2015, so it's a structural short-the-equal-weight tilt, not a timing signal.
2007v3 CAGR 11.50%/Sharpe 1.01 -> 10.0-11.1%/1.16-1.19 (Sharpe +0.15..+0.18, CAGR -0.4..-1.5pp; gain is de-risking, not return)
oowOOW 2003-2007 native: v3 CAGR 7.53%/Sharpe 0.81 -> 5.2-7.2%/0.63-0.78 (CAGR -0.4..-2.3pp, Sharpe -0.03..-0.18; negative in all 8 cells)
→ Vic: “Your narrow-leadership read is on real tape, Vic, but a breadth flag that's been lit for a decade straight isn't calling a top — it's just short the equal-weight — and the clean $SPXA200R you wanted is behind a paywall we don't pay.”
Data integrity watchdog
WATCHDOG
Automated data-integrity checks, rerun every cycle. All green — nothing needed from you.
deterministic · every cycle · 2026-07-15
✓ All integrity checks passed
20 price series immutable · 22 FRED series checked · frozen-window v3 CAGR pinned at 10.375%
Soft June CPI hands us a shot at 5/5 - just as an oil shock the model can't smell arrives.
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI printed soft: 3.5% headline vs 3.8% expected, MoM -0.4%, core flat at 2.6% - and July rate-hike odds collapsed to ~17% from 42%. S&P closed +0.4% (7,543), Nasdaq +0.9% on a semi rebound; IBM cratered 25% on a profit warning. The offset: renewed US-Iran exchanges, Trump calling the ceasefire 'over,' Brent back to ~$86 on Strait of Hormuz shipping attacks, and the 10y at ~4.56%. New Fed Chair Warsh testifies to Congress this week for the first time.
Our book
Score 4/5, Neutral - 40% SPY / 15% QQQ / 25% AGG / 10% GLD / 10% TLT. The lone signal off is inflation, which knocked us out of Risk-On on 6/28; everything else has margin (trend +7.8% over the 40wk MA, curve +0.4pp, whales only p76 of p90). Inflation is by definition the one closest to flipping: a sustained CPI deceleration that clears the rising flag puts us back at 5/5 Risk-On.
Watchlist
Warsh congressional testimony this week - first read on the new Fed reaction function
Brent ~$86 / Hormuz shipping - energy pass-through the inflation signal only sees with a 1-month+ lag
Next Case-Shiller (last data 2026-04, +0.8% YoY) - home-price signal thinnest cushion at <1pp
The machine did its job: it de-risked from Risk-On to Neutral on the inflation scare and today's soft print vindicates the caution without demanding we chase. But we're walking into the exact regime a lag-based inflation signal handles worst - official CPI disinflating while a live energy/geopolitical shock builds underneath it. If Brent at $86 feeds through, the inflation signal reports the fire a month after the smoke, and we could get a whipsaw: flip back to 5/5 on backward-looking June data right as forward energy costs re-accelerate. On track, but this is a 'trust the model, watch the blind spot' week - the blind spot being anything oil-driven, which the lab already ruled we can't cleanly harvest. No override, no heroics; just don't mistake one soft month for the all-clear.
“Disinflation on paper, a tanker war on the tape - the model reads yesterday's receipts while the pump prices today.” — Vic
Cool CPI hands the tape a bid; the oil under it is the part our signals can't smell yet.
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI printed soft — headline 3.5% YoY, -0.4% MoM, first annual pullback since January, core down to 2.6% — and stocks took the win: S&P +0.3%, Nasdaq +1.1% on a chip bounce (SK hynix, Samsung), banks ripping on earnings (GS +7%, JPM +2%), IBM sinking the Dow on a profit warning. Under the hood it's messier: Trump reimposed the Hormuz blockade and floated a 20% cargo toll, WTI spiked ~9% to ~$78 before he walked the toll back to 'Gulf trade deals,' leaving crude elevated. Fed sits July 29 with FedWatch ~86% on a hold. So the print that cooled inflation and the shock that could re-heat it landed on the same day.
Our book
Neutral, 4/5 — inflation is the lone signal off, dropped us out of Risk-On on 6/28. Today's decelerating CPI, if it breaks the three-month rising streak (2.43→3.46), is exactly what flips inflation back on and restores 5/5 next weekly run; that's the closest move in the box. The counterweight is home prices: on at +0.84% YoY but grinding — 14th straight month of slowing, over half the 20 cities now red YoY, real terms negative — and a print through zero flips it off regardless of inflation.
Watchlist
Jul 29 FOMC — ~86% hold priced; guidance is the risk, not the level
Oil/Hormuz — crude ~$78 on blockade; an inflation impulse CPI won't show for 1-2 months
Inflation signal — cool June print may flip it back on next run → 5/5 Risk-On
Next Case-Shiller (May, late July) — YoY sitting <1pt from its zero off-trigger
On the strategy
The machine is doing its job and arguably got lucky-right: it cut to Neutral on inflation a week before an oil shock made inflation risk tangible — defensive into an event it can't see. But that's also the honest weakness on display today. The CPI signal is monthly, lagged, backward-looking; the live risk is a Hormuz-driven energy impulse that won't touch the print until August or September, so the tape (up on cool CPI) and the forward risk (crude) are diverging and our score reads the rear-view. Home prices is the sleeper — if it rolls through zero we go Defensive on a genuine, broad slowdown, and that would be the model catching something real, not noise. On track, but this is a regime where I'd trust the book and distrust how current it feels.
“Inflation cooled the day oil caught fire — enjoy the print, the tanker's still on the water.” — Vic
The machine is about to buy an energy-driven inflation dip it can't see the geopolitics behind
DESK NOTE
Vic's 6-hourly commentary. Context only — the model doesn't read it and neither must you.
June CPI cooled to 3.5% YoY from May's 4.2%, below the 3.8% consensus — but it was gas-led, energy up 15.7% vs 23.5% prior as the Iran ceasefire unwound the war spike; core was flat, 2.6% YoY. S&P +0.4%, Nasdaq +0.9% on semis; IBM -25% on a software/infra profit warning. Cutting the other way: Trump floated Strait of Hormuz shipping fees and an Iranian port blockade, and oil caught a bid on the supply-disruption risk. Street still leans toward a Fed hike in September despite the soft headline.
Our book
4/5, Neutral — inflation is the lone off signal, everything else green: trend +7.6% over the 40-wk MA, curve +36bp, whales at p76 vs a p90 trigger. Inflation is the one closest to flipping: the machine still carries the old >4% read, and June's 3.5% prints below our 4% line, so on ingestion it likely flips back on → 5/5 Risk-On. Nothing else is near a trigger.
Watchlist
June CPI (3.5%) ingesting to the inflation signal — a flip lifts us to 5/5 Risk-On and rotates into QQQ
FOMC Jul 28-29 (no SEP); market pricing a Sept hike, not a cut
Oil / Strait of Hormuz headlines — the energy shock our CPI signal reads with a lag
Case-Shiller YoY +0.84% and thinning, new-home months-supply 10.3 — home-price signal drifting toward its zero line
On the strategy
On track mechanically, but this is a regime that plays to the CPI signal's blind spot. The June cool-down is real to the number, yet it's gas prices reversing a geopolitical spike, not disinflation trend — core didn't move. If we flip to 5/5 Risk-On on that base effect and Hormuz re-lights energy, we'll have added QQQ into the exact whipsaw the signal lags. The machine can't see a shipping blockade; it sees a green CPI cell. I respect the rule, but I'd watch this flip with one eye on the tanker map. What changes my mind: core re-accelerating, oil sustaining a breakout that feeds headline back up, or trend losing the 40-wk MA.
“Market's cheering cheaper gas the same week we're threatening to blockade the guy who pumps it. Enjoy the print while it lasts.” — Vic
Crude oil trend overlay (inflation lead)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · FRED DCOILWTICO (WTI spot) or DCOILBRENTEU (Brent); CME CL futures if a continuous contract is preferred.
proposed · reviewed
Real-time crude momentum leads headline CPI by roughly one to two months and is precisely the energy supply-shock our lagged, energy-weighted inflation signal cannot see until it's already printed. It carries forward information about the inflation signal's own next move — something none of the five live signals capture — and today's setup (flip to Risk-On on old gas prices as oil re-spikes) is the exact failure mode it would guard against.
Lab verdict · Dr. Nadia Osei · 2026-07-14
Tested WTI 13-week momentum (FRED DCOILWTICO, lagged 1 day, trailing-only ROC and 156-week percentiles, no lookahead) two ways declared ex-ante: Design A a 6th signal (top-decile ROC -> red, strict n=6) and Design B the literal failure-mode guard (crude 3-month change > +25% forces the inflation signal red). A base-replication row reproduced v3 to the decimal, so all deltas are the overlay alone. Both designs LOSE in BOTH primary windows — 2007: A 10.37%/0.96 and B 10.60%/0.97 vs v3 11.55%/1.02; 2015: A 12.71%/1.05 and B 12.96%/1.07 vs 14.37%/1.12 — CAGR give-up of 0.95 to 1.66pp, an order of magnitude past the 0.3pp noise floor, with Sharpe down every window. It fails Rule 1 at the gate, so OOW does not arbitrate; for the record the thin std-books OOW also lost (-0.41pp) and only the spliced 1997-2006 OOW showed a mild drawdown cushion (reverse-mirage). Forensics confirm the lead does not exist at the stated threshold: the +25% guard never fired in 2021-22 (re-spike +10.3%, CPI-peak quarter +19.6%) and today reads -38.5% — oil is falling, the cited live setup is absent.
2007B 10.60% / 0.97 (A 10.37% / 0.96) vs v3 11.55% / 1.02 — -0.95 to -1.18pp CAGR, Sharpe -0.05/-0.06
2015B 12.96% / 1.07 (A 12.71% / 1.05) vs v3 14.37% / 1.12 — -1.41 to -1.66pp CAGR, Sharpe -0.05/-0.07
oowspliced 1997-2006: A 10.75% / 0.85, B 10.54% / 0.83 vs base 10.53% / 0.80 (mild cushion, +0.22pp/+0.05); thin std-books 2005-06: A=B 7.91% / 0.83 vs 8.32% / 0.86 (-0.41pp) — moot, primaries already failed
→ Vic: “Your re-spike guard slept through all of 2021-22 and is idle today with WTI's 3-month change at -38.5% — it fired exactly once, July 2008, one month before crude fell 58%; a lead that only rings after the top isn't a lead.”
Broad USD rate-of-change (funding-stress overlay)
REJECTED
Done — failed the validation bar in the lab. Archived in the graveyard.
Vic Marlowe · FRED DTWEXBGS (Broad USD Index, daily) — or ICE US Dollar Index (DXY) if a cleaner intraday feed is preferred; test as trailing-only percentile/ROC, no lookahead.
proposed · triaged · reviewed
A fast appreciation in the trade-weighted dollar is a cross-asset stress tell — global funding squeeze, flight-to-safety, EM pain — that tends to lead an equity-trend break and is orthogonal to all five domestic signals, none of which carry an FX or global-liquidity read. It's the *speed* of the move, not the level, so it shouldn't just proxy price trend; a sharp dollar bid in a week like this (Hormuz, oil, safe-haven flows) is information the CPI/curve/COT stack simply doesn't see.
✓ triage: feasible
· Ray Kessler · 2026-07-14 · history from 2006-01-02 — Feasible — pass it to the lab. DTWEXBGS is reachable with the key we already hold, no truncation trap, ~1 business-day lag, trivial at 6h cadence. One caveat for Nadia: the live daily broad series only starts 2006-01-02; for a genuine pre-2000 out-of-window test she'll need to splice the discontinued DTWEXB (1995+) on rate-of-change, which is legitimate since the signal is speed not level.
Endpoint reachability via our existing pattern (api.stlouisfed.org/fred/series/observations with FRED_API_KEY; keyless fredgraph.csv fallback also exists in fetch_fred.py) — 200 OK, valid JSON. DTWEXBGS returns 5355 daily observations. Key in env works; no separate license/entitlement needed.
History depth of the live broad index (DTWEXBGS) — observation_start 2006-01-02, observation_end 2026-07-10. ~20y daily covers 2008/2011/2015/2018/2020/2022 stress episodes, but does NOT reach pre-2000.
Pre-2000 out-of-window coverage via legacy splice — DTWEXB (Nominal Broad USD, goods-only, DISCONTINUED) runs 1995-01-04 to 2019-12-31, overlapping DTWEXBGS 2006-2019. Signal is ROC/percentile, not level, so the two splice cleanly on percent-change — gives a 1995-start out-of-window set including 1998 LTCM/Asia.
Update cadence and publication lag — Daily (H.10 release, business days). last_updated 2026-07-13 for a 2026-07-10 obs — roughly one business day lag. No intraday updates, so trailing-only ROC has no lookahead risk.
Licensing truncation trap (the FRED ICE BofA trailing-3y problem) — None. Fed H.10 series expose full history — count=5355 from 2006, no rolling window. This is not a licensed-vendor series.
6h-refresh viability (rate limits / auth churn) — Fine. One static API key, a couple of calls per refresh cycle against FRED's generous limits. Keyless fredgraph.csv fallback already wired if the key ever churns.
Lab verdict · Dr. Nadia Osei · 2026-07-14
Ex-ante I tested broad USD speed two ways: Design A adds a 6th score signal (usd_ok = 20-trading-day ROC not in the top decile of its trailing-3y distribution; strict n=6 map 6=RO), Design B is the literal funding-stress overlay from the title (fire when USD ROC >= P90 and >0 -> cap the book at Defensive), across thresholds P85/P90/P95, all inputs lagged 1 business day with trailing-only percentiles. In 2007 Design A is marginal (+0.26pp CAGR / +0.05 Sharpe at P90, near the 0.3pp noise floor) while the overlay Design B is negative (-0.91pp); in 2015 BOTH designs lose decisively at every threshold (A -1.61pp / -0.09 Sharpe, B -2.14pp / -0.13 Sharpe at P90). The bar requires improvement in BOTH primary windows and 2015 fails outright, so the candidate is dead before out-of-window. The apparent OOW win (+1.5 to +2.7pp) is a mirage: the V1 books need GLD (Nov 2004), collapsing any pre-2007 window to ~2.1 quiet years that never reach the 1998/2002 stress the splice was meant to buy. Forensics confirm why it misfires — the flag correctly lights at 2008/2011/2020/2022 dollar surges but also lit through the 2014-15 dollar bull run, which was US-outperformance, not an equity break, so de-risking on speed cost the 2015 window.
2007A(6th-sig) 11.77% CAGR / 1.06 Sharpe vs v3 11.51% / 1.01 (+0.26pp, noise); overlay B 10.60% / 0.96 (-0.91pp)
2015A 12.68% / 1.03 vs v3 14.29% / 1.12 (-1.61pp, -0.09); overlay B 12.15% / 0.99 (-2.14pp) — fails primary
oow2004-2007 (GLD-gated, ~2.1yr, unusable): A 9.01% / 0.99, B 10.18% / 1.11 vs v3 7.53% / 0.81 — thin quiet sample, cannot arbitrate
→ Vic: “Your dollar-speed flag fires clean at 2008, 2011, 2020 and 2022 — but it fired just as hard through the 2014-15 dollar bull that had no equity break, and that -1.6pp hole in 2015 is the whole story: speed can't tell a funding squeeze from plain US outperformance.”
Reviewed fetch robustness for the COT yearly-file fetcher (fetch_cot.py), plus the shared no-floor overwrite pattern in fetch_prices.py
ENGINEERING · WARN
Weekly code review — desk housekeeping, not an investment idea. Nothing needed from you.
Ray Kessler · 2026-07-14
Findings
fetch_cot.py (fetch_year / __main__) — Every 6h cycle re-downloads all 41 yearly zips 1986..2026 from cftc.gov (~164 req/day) even though only the current+prior year ever change; the other ~39 years are static history re-pulled for nothing on a 1 vCPU pod. That's needless load and our own rate-limit exposure. fix: Cache each deacot<year>.zip to disk and only re-fetch the current and prior year; treat 1986..2024 as write-once.
fetch_cot.py (fetch_year returns [] on failure) — A transient curl failure or <1000-byte body on ANY year makes fetch_year return [] silently; the full CSV is then rebuilt from allrows and overwritten. If the 2026 pull blips, every market's file silently loses the current year and the positioning signal runs on data ending 2025 — and watchdog.py only hashes data/*.csv and data/fred/*.csv, so data/cot/ has ZERO integrity coverage. Exits 0, nothing alarms. fix: Fail loud (non-zero) when the current year yields 0 rows, and add a COT row-count/last-date floor check to watchdog.py.
fetch_prices.py (save) + fetch_cot.py — Same root cause both places: cached history is overwritten unconditionally with whatever one fetch returned, no floor vs the prior file. A valid-but-short Yahoo response that drops only the newest weeks passes validate.py (continuity, not length) and watchdog immutability (frozen bars unchanged) — silent drift, not a loud crash. fix: Before overwrite, refuse and keep the old CSV if new row count < ~95% of existing (or newest date regresses).
TIPS breakevens (10y / 5y5y forward)
CARD LIVE
Done — you approved this as an advisory card. It's on the dashboard as context and never trades.
Vic Marlowe · FRED T10YIE / T5YIFR (2003->)
proposed · reviewed
Forward-looking, daily inflation expectations separate transitory oil blips from genuine de-anchoring - a leading read on the pressure our backward-looking monthly CPI signal only confirms weeks later.
Lab verdict · the lab (pre-Nadia) · 2026-07-12
Design B (breakeven-veto on CPI red) passed both primary windows by noise margins (+0.12/+0.22pp) but FAILED 2000s out-of-window (7.06 vs 7.53 CAGR). Rejected as a rule. Forensics validated the information (2008 collapse read correctly, 2021-22 de-anchoring confirmed) -> adopted as advisory dashboard card with if-followed counterfactual.