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.
the exact SQL behind every number
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
)
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 analysisTreasury Yield Curve, H1 2026: Twist, Not Shift
Seven maturities, three single-day snapshots: the half's first print, the last March print, and the last June print
ranking 7×4
→
The 2s10s spread, every print of the half
table 124×2
→
Every half-year since 1976: the 2y and 10y change, the twist between them, and the half's lowest 2s10s print
table 100×7
→
The rank receipt: H1 2026's twist against every prior half, by absolute size
scalar 1×6
→
The 30-year's half: start, end, the first and last 5% prints, time spent at or above 5%, and the high
scalar 1×8
→
The 2s10s slope receipt: start, end, minimum (with its date), maximum, and print count
scalar 1×6
→
See all 2,170 queries →