inversions
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-17, from what-is-the-3m10y-spread.
| began | ended | start_date | months_inverted | deepest_month_bps | average_depth_bps |
|---|---|---|---|---|---|
| Jun 1989 | Aug 1989 | 1989-06-01 | 3 | -16 | -11 |
| Nov 1989 | Dec 1989 | 1989-11-01 | 2 | -7 | -6 |
| Jul 2000 | Jan 2001 | 2000-07-01 | 7 | -70 | -42 |
| Aug 2006 | May 2007 | 2006-08-01 | 10 | -52 | -34 |
| May 2019 | Sep 2019 | 2019-05-01 | 5 | -36 | -17 |
| Feb 2020 | Feb 2020 | 2020-02-01 | 1 | -4 | -4 |
| Nov 2022 | Nov 2024 | 2022-11-01 | 25 | -173 | -115 |
| Mar 2025 | Apr 2025 | 2025-03-01 | 2 | -6 | -5 |
| Jun 2025 | Aug 2025 | 2025-06-01 | 3 | -4 | -3 |
- Rows × columns
- 9 × 6
- Period covered
- to
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
began |
text | 9 distinct values (Aug 2006, Feb 2020, Jul 2000…) | |
ended |
text | 9 distinct values (Apr 2025, Aug 1989, Aug 2025…) | |
start_date |
date | 1989-06-01 to 2025-06-01 | |
months_inverted |
number | 1 to 25 | |
deepest_month_bps |
number | -173 to -4 | |
average_depth_bps |
number | -115 to -3 |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
the exact SQL behind every number
SELECT
formatDateTime(min(month), '%b %Y') AS began,
formatDateTime(max(month), '%b %Y') AS ended,
toString(min(month)) AS start_date,
count() AS months_inverted,
toInt32(round(min(spread_bps))) AS deepest_month_bps,
toInt32(round(avg(spread_bps))) AS average_depth_bps
FROM
(
SELECT
month,
spread_bps,
sum(if(spread_bps < 0, 0, 1)) OVER (ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS run_id
FROM
(
SELECT
toStartOfMonth(date) AS month,
avg(toFloat64(yield_10_year) - toFloat64(yield_3_month)) * 100 AS spread_bps
FROM global_markets.treasury_yields
WHERE date >= toDate('1985-01-01')
AND yield_3_month > 0
AND yield_10_year > 0
GROUP BY month
)
)
WHERE spread_bps < 0
GROUP BY run_id
ORDER BY start_date
Run your own version of this
The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.
More from this analysiswhat-is-the-3m10y-spread
monthly
series 241×4
→
recent
series 60×6
→
front_end
series 42×5
→
episodes_compared
table 3×9
→
One SPY $600 LEAPS call's price over two years (expired Jan 16 2026)
series 470×2
→
2s10s spread, monthly average: last 20 years
series 240×2
→
See all 2,309 queries →