Methodology: How We Read Market Conditions
What this label is
The Markets page shows a one-line “market conditions” read — one of five fixed labels — plus a short paragraph narrating the same numbers. This page is the source-of-truth document for exactly how that label is computed, so the read is reproducible, never a black box.
It is a description of today’s tape, computed from two public numbers. It is not a forecast, not a recommendation, and not investment advice.
1. The two inputs
- The S&P 500’s one-day move, measured via the SPY ETF’s percent change on the day. Always the one-day figure — the read never inherits the page’s 1D/MTD/YTD period selector.
- The VIX level — Cboe’s index of expected 30-day S&P 500 volatility, sourced from FRED (series VIXCLS). This series updates at end of day, so the read pairs a live equity move with the most recent published VIX close.
2. The mapping
Five labels, fixed thresholds, first match wins:
| Label | Condition |
|---|---|
| Risk-off | S&P 500 down more than 2%, or VIX above 30 |
| Risk-on | S&P 500 up more than 2% |
| Cautious | S&P 500 down more than 1%, or VIX above 25 |
| Constructive | S&P 500 up more than 1% while the VIX is below 20 (or unavailable) |
| Neutral | everything else |
The thresholds (±1%, ±2%, VIX 20 / 25 / 30) are judgment constants, reviewed on a scheduled cadence in the source code. When we change them, the changelog below records it.
3. What the read does not use
- No news, sentiment, or model-generated interpretation — the paragraph on the Markets page is assembled from fixed sentences and the two numbers above.
- No causal claims. The read reports what moved, never why.
- No VIX adjectives. We print the level; we don’t call it “calm” or “elevated.”
- Rates, the dollar, and commodities appear elsewhere on the page but do not feed this label. The “breadth” clause counts only the four major U.S. stock-index ETFs (SPY, DIA, QQQ, IWM).
4. Staleness
Every payload carries the time it was fetched. If the data is more than an hour old while a U.S. session is open, the regime and VIX sentences are suppressed and only the raw figures render, with their as-of stamp — a cached label must never narrate a market it can no longer see. Outside market hours, age is expected and the last session’s read stands, stamped with its time.
Changelog
- 2026-07-18 — page created alongside the “Day’s Ledger” hero (trust CYCLE 2026-07-02 condition C6). Thresholds unchanged since the mood dial shipped.