Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor · · Updated 2026-07-25

Macro picture as H2 2026 start, with receipts

Headline CPI dey hot over quiet core, expectations anchor, curve dey flatten, and H2 prints fit change am. Five macro series frame di half, market prices dey keep score.

Five macro series frame di second half — headline inflation wey dey accelerate over creeping core, long-run expectations wey barely move, and labor market wey dey improve on top thinner base — and two market prices keep score: Treasury curve wey dey flatten from di front, and equity tape wey no fit any tidy macro rule. Dis page show all five with as-of receipts, den di H2 calendar: wetin land when, and wetin each print go need show to change di picture. Every number na stored query result; expand any panel for di exact SQL.

Headline inflation accelerate; core creep small

Headline CPI dey price the full consumer basket; core CPI comot food and energy, the two groups wey dey move pass — the comparison dey separate the noisy side from the slow-moving middle. BLS dey publish the index every month, like two weeks after the month wey dem measure. The panel below dey compute both year-over-year rates straight from the index levels, no be from any pre-computed field.

QueryCPI year-over-year, wey dem compute from di index against di same month for last year
The exact SQL behind every number
SELECT toString(date) AS period_start,
    round(cpi, 1) AS cpi_index,
    round((cpi / any(cpi_prior) - 1) * 100, 1) AS cpi_yoy_pct,
    round((cpi_core / any(core_prior) - 1) * 100, 1) AS core_yoy_pct,
    round(cpi_yoy_pct - first_value(cpi_yoy_pct) OVER (ORDER BY date), 1) AS accel_since_jan_pts
FROM global_markets.inflation
INNER JOIN (
    SELECT date + INTERVAL 1 YEAR AS match_date, cpi AS cpi_prior, cpi_core AS core_prior
    FROM global_markets.inflation
    WHERE date >= toDate('2025-01-01') AND date <= toDate('2025-06-01')
) AS p ON date = p.match_date
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-01')
GROUP BY date, cpi, cpi_core
ORDER BY date

Headline CPI run 2.4% year-over-year for January and e peak for 4.2% for May — na acceleration of 1.8 percentage points across five prints — before the mid-July release put June for 3.5%. Core CPI move only from 2.5% to 2.6% across the six. Headline wey dey run comot from im core na specific data shape: na the volatile components dey do the moving. Which components, this table no fit talk — and so this page no dey talk am.

The divergence get start date. For January and February the two series siddon on top each other, headline small below core. March na where dem cross — headline jump go 3.3% against core own 2.6% — and the gap continue dey wide pass 4.2% versus 2.8% for May. June break the pattern: headline fall back to 3.5% while core ease go 2.6%, the first narrowing since the cross.

Year-over-year rate dey blend twelve months of history; the month-over-month prints dey locate the move well-well:

QueryCPI month-over-month, wey dem compute from di index against di month wey pass
The exact SQL behind every number
SELECT toString(date) AS period_start,
    round((cpi / any(cpi_prev) - 1) * 100, 2) AS headline_mom_pct,
    round((cpi_core / any(core_prev) - 1) * 100, 2) AS core_mom_pct
FROM global_markets.inflation
INNER JOIN (
    SELECT date + INTERVAL 1 MONTH AS match_date, cpi AS cpi_prev, cpi_core AS core_prev
    FROM global_markets.inflation
    WHERE date >= toDate('2025-12-01') AND date <= toDate('2026-05-01')
) AS p ON date = p.match_date
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-01')
GROUP BY date, cpi, cpi_core
ORDER BY date

March carry the half im largest monthly headline move for 0.87%, with April next for 0.64%. Core im monthly prints stay low throughout, with April own 0.38% na the firmest of the five. The spring acceleration dey live inside two monthly headline prints and e barely show for the core series.

Expectations: di anchor hold well

Inflation expectation na di average inflation rate wey one model or market price dey expect for di next one, five, or ten years. "Anchored" na short way to talk about one particular pattern — short-horizon expectations dey swing with di latest numbers while long-horizon ones just dey steady. Di series wey dey below na model-based and e dey monthly.

QueryModel-based inflation expectations by horizon, monthly
The exact SQL behind every number
SELECT toString(date) AS period_start,
    round(model_1_year, 2) AS exp_1y_pct,
    round(model_5_year, 2) AS exp_5y_pct,
    round(model_10_year, 2) AS exp_10y_pct
FROM global_markets.inflation_expectations
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30')
ORDER BY date

Di one-year expectation jump around — 2.59% for January, 3.54% for May, 3.02% for June — but di ten-year hardly move: from 2.33% to 2.49%. Di five-year stay close to di ten-year, e dey 2.34% for January and 2.54% for June. Markets repriced di next year inflation and leave di next decade own alone.

Di timing match with di CPI panel: di one-year low print of 2.29% land for March, and di jump to 3.26% for April follow di March CPI acceleration. Dis page record di sequence and stop there. For how di bond market compress dis pricing into one single number — and wetin inverted curve be — check di 2s10s spread explainer.

Wetin di curve dey tok about di Fed?

Di three-month bill dey siddon closest to di Federal Reserve current policy rate; di two-year note dey mix di rate path wey dem expect for di next two years; di ten-year dey add term premium — extra yield for bearing duration. Di panel dey take each month last joint print of di three.

QueryDi Treasury curve for each month-end of H1 2026: bill, 2-year, 10-year, and di spreads between dem
The exact SQL behind every number
SELECT toString(toStartOfMonth(date)) AS period_start,
    round(argMax(yield_3_month, date), 2) AS y3m_pct,
    round(argMax(yield_2_year, date), 2) AS y2_pct,
    round(argMax(yield_10_year, date), 2) AS y10_pct,
    round(argMax(yield_10_year, date) - argMax(yield_2_year, date), 2) AS spread_2s10s_pct,
    round(argMax(yield_2_year, date) - argMax(yield_3_month, date), 2) AS y2_minus_bill_pct,
    round(round(argMax(yield_2_year, date), 2) - first_value(round(argMax(yield_2_year, date), 2)) OVER (ORDER BY toStartOfMonth(date)), 2) AS y2_chg_since_jan,
    round(round(argMax(yield_10_year, date), 2) - first_value(round(argMax(yield_10_year, date), 2)) OVER (ORDER BY toStartOfMonth(date)), 2) AS y10_chg_since_jan
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-01-01') AND date < toDate('2026-07-01')
  AND yield_2_year IS NOT NULL AND yield_10_year IS NOT NULL AND yield_3_month IS NOT NULL
GROUP BY toStartOfMonth(date)
ORDER BY period_start

Di bill no go anywhere for five months — every month-end through May dey within few hundredths of 3.67% — den e step go 3.87% for June. Di two-year move di whole half: e drop go 3.38% for February end, den e go higher for every month-end after, finish for 4.14% — 0.62 percentage points above January. Di ten-year add just 0.18 points over di same span, so di 2s10s spread compress from 0.74 to 0.3 points — di narrowest month-end of di six. Di H1 curve deep-dive dey track di same spread daily.

Di two-year-minus-bill column na di Fed read: negative mean di average policy rate wey dem price for di next two years dey siddon under today own — cuts, as arithmetic. E print -0.15 and -0.29 points for January and February, flip positive for March — di same month wey di headline CPI prints accelerate — and end di half for 0.27 points. Di market enter di half dey price a lower policy path and exit dey price a higher one, alongside di CPI acceleration and di one-year expectation April jump.

Di labor market: Better headline for thin base

Unemployment rate na di share of di labor force wey dey actively find work; participation rate na di share of di adult population wey dey work or dey find. Both of dem come from di BLS monthly household survey, and e make sense to read dem together well-well: unemployment rate fit dey drop at di same time wey people dey comot from di labor force — di denominator dey do part of di work. Average hourly earnings come from di employer survey, na dollars per hour.

QueryDi labor market, monthly: unemployment, participation, average hourly earnings — with ingest receipts
The exact SQL behind every number
SELECT toString(date) AS period_start,
    unemployment_rate,
    labor_force_participation_rate AS participation_pct,
    round(avg_hourly_earnings, 2) AS avg_hourly_earnings,
    toString(toDate(_ingest_time)) AS arrived_here
FROM global_markets.labor_market
WHERE date >= toDate('2026-01-01') AND date <= toDate('2026-06-30')
ORDER BY date

Unemployment finish di half at 4.2% — na im be di lowest print for di six months — but participation slip from 62.1% to 61.5% for di same period: di rate better as di measured labor force share shrink. Dis table record di co-movement and stop there. Average hourly earnings rise from $37.17 to $37.64.

Di path move for di edges: 4.3% for January, di half high of 4.4% for February, den three spring prints wey pass June 4.2% low. Participation slide no get one single dramatic print — na small-small steps lower, most months.

Stock market follow wetin macro dey print?

E no follow am well. Di panel wey dey below dey calculate SPY return month-by-month inside regular hours — from first regular-session open go last close, New York time.

QuerySPY month by month for H1 2026: regular-hours open-to-close return per month
The exact SQL behind every number
WITH bars AS (
    SELECT toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS m,
           window_start, open, close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-01-01 00:00:00')
      AND window_start < toDateTime('2026-07-01 00:00:00')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
)
SELECT toString(m) AS period_start,
       round(argMin(toFloat64(open), window_start), 2) AS month_open,
       round(argMax(toFloat64(close), window_start), 2) AS month_close,
       round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 2) AS spy_return_pct
FROM bars
GROUP BY m
ORDER BY m

March — di month wey get di half biggest monthly headline CPI print and two-year cross above di bill — na im be SPY worst out of di six at -4.19%. April, wen di one-year inflation expectation jump, na im be im best at 9.87%. Those two rows siddon side by side and cancel any rule wey talk say hot inflation plus rising short rates mean say stocks go fall. June print -1.2% open-to-close, e close at $746.32; di half full scoreboard by index and sector dey inside di H1 market recap.

Wetin dey ground wen dem write dis page

QueryDi as-of receipts: every June print wey dey on file, di July CPI column wey dem arm as di next tripwire
The exact SQL behind every number
SELECT
    (SELECT count() FROM global_markets.inflation WHERE date = toDate('2026-06-01')) AS june_cpi_rows,
    (SELECT count() FROM global_markets.inflation WHERE date = toDate('2026-07-01')) AS july_cpi_rows,
    (SELECT count() FROM global_markets.labor_market WHERE date = toDate('2026-06-01')) AS june_labor_rows,
    (SELECT count() FROM global_markets.inflation_expectations WHERE date = toDate('2026-06-01')) AS june_expectations_rows,
    (SELECT toString(toDate(max(_ingest_time))) FROM global_markets.labor_market WHERE date = toDate('2026-06-01')) AS june_labor_arrived

Macro data dey show face on schedule, and any page wey dey honest go tell you where the schedule stand: wen dem generate am, all di three June prints don land — labour (1 row, wey show face 2026-07-02, AFTER June finish, as e dey always be), expectations (1 row), and CPI (1 row, di mid-July release). Di July CPI column na di next tripwire: if you see 1 for there, e mean say di page dey wait for refresh.

H2 2026: wetin to dey watch

Di second half dey land on top calendar wey everybody sabi; wetin follow na schedule and arithmetic, no be forecast.

  • June CPI land for mid-July and close di gap. May run 4.2% headline over 2.8% core; June print 3.5% headline over 2.6% core — di volatile components dey give back, na di first time dat gap dey narrow since February. Di next print, July CPI, go land mid-August, and di page go refresh when e land.
  • Jobs reports, di first Friday of every month. Di half end for 4.2% unemployment on top 61.5% participation. Participation na di tell: weda e stabilize or e continue to slide go decide how much of any further headline improvement na di denominator work.
  • Four FOMC meetings wey dem schedule. Di 2026 calendar wey dem publish show one each for July, September, October, and December. Di scoreboard to carry enter dem na di curve panel two-year-minus-bill gap, 0.27 points for June end, wey dem dey reprice around every CPI and jobs release; im sign dey show weda di priced path dey point up or down.
  • Di anchor check. Di ten-year expectation sit for 2.49% for June. One-year wey dey jumpy on top ten-year wey still steady na wetin anchored regime be like; ten-year print wey breakout from im narrow H1 band go be di first genuinely new macro fact of di half.

Macro data FAQ

Wetin be US CPI year-over-year for June 2026?

Headline CPI print 3.5% year-over-year for June 2026, wey dem calculate from di index level against June 2025, e drop from 4.2% for May. Core CPI — all items minus food and energy — print 2.6% for di same window.

Where di US unemployment rate dey as of June 2026?

June 2026 come in at 4.2%, na im be di lowest reading for di first half, alongside labor-force participation of 61.5% — e drop from 62.1% for January.

Wetin di 2s10s spread do for H1 2026?

E flatten from di front: 0.74 percentage points for January month-end to 0.3 for June own — na im narrowest of di six — with di two-year up 0.62 points against di ten-year own 0.18. Na di short end do di moving.

Long-run inflation expectations still dey anchored?

For dis data, yes: di ten-year expectation print 2.33% for January and 2.49% for June, while di one-year swing from 2.29% for March to 3.54% for May. Di short horizon repriced; di long horizon hold.

Why June 2026 CPI no dey for dis tables?

Dem never publish am wen dem generate dis page — di as-of receipt wey dey above show 1 June CPI rows for di warehouse, against 1 June labor row (dem ingest am 2026-07-02). Monthly CPI dey arrive around di middle of di following month, and di page go regenerate once di print land.

Data notes

Full data notes
  • CPI year-over-year na wetin dem calculate inside di query from di index level against di same month for last year — dem no ever take am from any field wey dem don calculate before (di table own year-over-year column empty for dis window). Di month-over-month panel stretch back go December 2025 for im January print.
  • Di ingest column na di date dis warehouse receive di data — di June labor row arrive 2026-07-02, na why any analysis wey dem do for late June no fit see am. Monthly-macro rows dey always arrive after di month wey dem dey describe.
  • Expectations na model-based series; di market-implied columns no too get data for dis window and dem no dey use am.
  • Treasury rows na di last joint print of di bill, two-year, and ten-year for each month (other maturities no dey always get data); di series dey run about one day behind.
  • SPY monthly returns na regular-hours only, from di first regular-session open go di last close for New York time, from di delayed minute view.

How We Do Am

  • Period: January 1 – June 30, 2026 — monthly macro series, month-end Treasury prints, plus regular-hours SPY minute bars. Di year-over-year and month-over-month joins go back enter 2025 by design; everi oda tin dey filter to di period.
  • Equity returns dey group by ET clock, we no dey ever hardcode UTC offsets.
  • Generation dey run through di gated read-only path; di public page no dey ever query live. Di receipts panel dey record which prints di warehouse bin hold wen dem generate am.

Everi panel na one stored object — chart, table, and SQL. Carry any series go front for di Strasmore terminal.

#macro#inflation#cpi#labor market#treasury yields#fed