Treasury Yield Curve, H1 2026: Twist, Not Shift
The rank receipt: H1 2026's twist against every prior half, by absolute sizescalar ·
2026-07-26 · 1×642
Every half-year since 1976: the 2y and 10y change, the twist between them, and the half's lowest 2s10s printtable ·
2026-07-26 · 100×7
The 30-year's half: start, end, the first and last 5% prints, time spent at or above 5%, and the highscalar ·
2026-07-26 · 1×84.86
The 2s10s spread, every print of the halftable ·
2026-07-26 · 124×2
The 2s10s slope receipt: start, end, minimum (with its date), maximum, and print countscalar ·
2026-07-26 · 1×672
The H1 2026 move per maturity, split into quarters: the hump sits squarely on the 2-yearranking ·
2026-07-26 · 7×4
Seven maturities, three single-day snapshots: the half's first print, the last March print, and the last June printranking ·
2026-07-26 · 7×4
The rank receipt: H1 2026's twist against every prior half, by absolute size
The rank receipt: H1 2026's twist against every prior half, by absolute size
h1 2026 twist bp
42
rank by magnitude
42
halves compared
100
first year
1,976
halves with inversion
28
last inverted half start
2024-07-01
the exact SQL behind every number
SELECT
round(anyIf(twist, period_start = '2026-01-01'), 0) AS h1_2026_twist_bp,
arrayCount(x -> abs(x) > abs(anyIf(twist, period_start = '2026-01-01')), groupArrayIf(twist, period_start != '2026-01-01')) + 1 AS rank_by_magnitude,
count() AS halves_compared,
toUInt16OrZero(substring(min(period_start), 1, 4)) AS first_year,
countIf(min_2s10s < 0) AS halves_with_inversion,
max(if(min_2s10s < 0, period_start, '')) AS last_inverted_half_start
FROM (
SELECT concat(toString(toYear(date)), if(toMonth(date) <= 6, '-01-01', '-07-01')) AS period_start,
count() AS prints,
(argMax(yield_2_year, date) - argMin(yield_2_year, date)) * 100
- (argMax(yield_10_year, date) - argMin(yield_10_year, date)) * 100 AS twist,
min(yield_10_year - yield_2_year) * 100 AS min_2s10s
FROM global_markets.treasury_yields
WHERE date >= toDate('1976-07-01') AND date <= toDate('2026-06-30')
AND isNotNull(yield_2_year) AND isNotNull(yield_10_year)
GROUP BY period_start
HAVING prints >= 100
)
More from this analysisTreasury Yield Curve, H1 2026: Twist, Not Shift
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
→
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
→
See all 2,170 queries →