The H1 2026 move per maturity, split into quarters: the hump sits squarely on the 2-year
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-07-26, from Treasury Yield Curve, H1 2026: Twist, Not Shift.
| maturity | q1_change_bp | q2_change_bp | h1_change_bp |
|---|---|---|---|
| 1-month | 2 | -4 | -2 |
| 3-month | 5 | 17 | 22 |
| 1-year | 21 | 30 | 51 |
| 2-year | 32 | 35 | 67 |
| 5-year | 18 | 27 | 45 |
| 10-year | 11 | 14 | 25 |
| 30-year | 2 | 3 | 5 |
- Rows × columns
- 7 × 4
- 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 |
|---|---|---|---|
maturity |
text | 7 distinct values (1-month, 1-year, 10-year…) | |
q1_change_bp |
number | 2 to 32 | |
q2_change_bp |
number | -4 to 35 | |
h1_change_bp |
number | -2 to 67 |
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.
Run it yourself
This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.
WITH
(SELECT (yield_1_month, yield_3_month, yield_1_year, yield_2_year, yield_5_year, yield_10_year, yield_30_year) FROM global_markets.treasury_yields
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') ORDER BY date ASC LIMIT 1) AS jan_row,
(SELECT (yield_1_month, yield_3_month, yield_1_year, yield_2_year, yield_5_year, yield_10_year, yield_30_year) FROM global_markets.treasury_yields
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-03-31') ORDER BY date DESC LIMIT 1) AS mar_row,
(SELECT (yield_1_month, yield_3_month, yield_1_year, yield_2_year, yield_5_year, yield_10_year, yield_30_year) FROM global_markets.treasury_yields
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30') ORDER BY date DESC LIMIT 1) AS jun_row
SELECT z.1 AS maturity,
round((z.3 - z.2) * 100, 0) AS q1_change_bp,
round((z.4 - z.3) * 100, 0) AS q2_change_bp,
round((z.4 - z.2) * 100, 0) AS h1_change_bp
FROM (
SELECT arrayJoin(arrayZip(['1-month','3-month','1-year','2-year','5-year','10-year','30-year'],
[jan_row.1, jan_row.2, jan_row.3, jan_row.4, jan_row.5, jan_row.6, jan_row.7],
[mar_row.1, mar_row.2, mar_row.3, mar_row.4, mar_row.5, mar_row.6, mar_row.7],
[jun_row.1, jun_row.2, jun_row.3, jun_row.4, jun_row.5, jun_row.6, jun_row.7])) AS z
)
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.