AI Research BACSPYmacro:treasury_10y

BAC daily returns vs 10y yield moves and market beta (last ~3 years)

The simple story — "banks win when rates rise" — does not survive a close look at same‑day moves for BAC over the past ~3 years. I regressed BAC daily returns against same‑day 10‑year yield changes and broad market returns (SPY) across 730 trading days and found the yield link essentially nil while market beta dominates the day‑to‑day.

BAC’s univariate beta to SPY is about 0.94 and explains roughly 35% of its daily variance (R² ≈ 0.35). By contrast, daily 10‑year changes explain almost nothing (R² ≈ 0.0005; corr ≈ −0.021) and add only ~0.0008 incremental R² with SPY in the model. On the biggest positive yield‑jump days BAC averaged −0.09% versus +0.12% on other days (Welch p ≈ 0.37). The full analysis, charts, and tests follow below.

The research question

For BAC over the past ~3 years, does the 'banks win when rates rise' mantra survive the tape — do days the 10-year Treasury yield jumps actually deliver stronger Bank of America returns, and how much of its daily variance does the yield move explain versus plain market beta (SPY)? Thesis: BAC's link to daily 10-year yield changes comes out weak-to-negative and swamped by its SPY beta, so its day-to-day is a market-risk-appetite story rather than the clean rising-rate play the narrative promises.

How this was measured

Resampled BAC and SPY minute bars to daily closes and computed close-to-close returns over the last ~3 years. Reindexed the 10-year Treasury yield (treasury_10y_df['value']) onto the trading-day calendar with forward-fill, then used the daily change in yield in basis points (Δ10y_bps = diff(percentage points) × 100). Ran OLS regressions of BAC returns on SPY returns (univariate), on Δ10y_bps (univariate), and jointly on both (multivariate). Compared univariate R²s and incremental R² contributions in the full model. Defined 'yield-jump' days as the top-20% absolute Δ10y_bps where the change is positive, and contrasted BAC returns on those days versus all others with a Welch t-test.

The key numbers

Trading days analyzed
730
2023-07-19 to 2026-06-30
BAC beta to SPY (univariate slope)
0.9377
Close-to-close daily returns
Slope vs Δ10y (per +1 bp, univariate)
-0.000061
Return change per 1 bp 10y move
BAC~SPY R²
0.3506
Univariate
BAC~Δ10y R²
0.0005
Univariate
BAC~SPY+Δ10y R²
0.3514
Multivariate
Incremental R² of Δ10y (given SPY)
0.0008
R²(full) − R²(SPY only)
Corr(BAC, Δ10y change)
-0.0214
Daily BAC return vs 10y bps change
Mean BAC return — big +Δ10y days
-0.0934%
N=80 (top 20% |Δ10y| & positive)
Mean BAC return — other days
0.1159%
N=650
Welch p-value (big +Δ10y vs others)
0.3725
p=0.3725 ≥ 0.05 → no clear mean difference

Reading the numbers

Across 730 trading days, BAC moves almost one-for-one with the market: SPY slope 0.9377425 and SPY-only R² = 0.3505868. By contrast, 10y moves have essentially no daily effect (univariate R² = 0.0004562; slope per +1 bp = -6.056754e-05).

The charts

BAC vs SPY daily returns
What this chart says

This scatter plots each day’s BAC return against the market (SPY). The cloud slopes up and hugs a line consistent with the reported beta of 0.9377425, and that alignment is why SPY explains about R² = 0.3505868 of BAC’s daily variance. Look at the diagonal pattern more than the individual outliers — it shows market beta is the dominant daily mover for BAC.

BAC daily return vs Δ10y (basis points)
What this chart says

This is BAC return versus daily 10-year bps change; the points form a near-flat cloud across a -19 to +19 bps range (mean Δ10y ≈ 0.1027). The fitted slope is tiny and negative (−6.056754e-05 return per 1 bp) and the correlation is essentially zero (−0.02135816), so there’s no visible upward tilt that would support a clean ‘banks win on rate jumps’ story at daily frequency. In short, big one-day moves in the 10y do not reliably lift BAC on the same day.

Variance explained (R²): SPY vs Δ10y
What this chart says

The bars contrast how much variance each regressor explains: SPY univariate R² = 0.3505868 versus Δ10y univariate R² = 0.0004562. Adding Δ10y to a SPY model raises full R² only from 0.3505868 to 0.3513873, an incremental R² of 0.0008005535. Practically speaking, market moves explain ~35% of BAC’s day-to-day swings and 10y moves add essentially zero incremental explanatory power.

BAC returns on big positive Δ10y days vs others
What this chart says

The box plots compare BAC returns on the 80 biggest positive Δ10y days versus the other 650 days: the big+Δ10y mean is −0.0009340174 while others average 0.0011586231. The distributions overlap heavily and the Welch p-value is 0.3725105265, so the slight negative mean on big rate-up days is not statistically significant. That pattern undercuts the idea that large same-day 10y upticks translate into reliably stronger BAC daily performance.

Regression coefficients (BAC returns)

modelvariablecoeft_statp_value
BAC ~ SPYconst0.0002330.4960.6202
BAC ~ SPYspy_ret0.93774319.8250
BAC ~ Δ10y (bps)const0.0009361.6060.1086
BAC ~ Δ10y (bps)d10y_bps-6.1000e-05-0.5760.5645
BAC ~ SPY + Δ10yconst0.0002220.4720.637
BAC ~ SPY + Δ10yspy_ret0.94150619.8330
BAC ~ SPY + Δ10yd10y_bps8.1000e-050.9470.3438

Model R² summary

modelr_squared
BAC ~ SPY0.3506
BAC ~ Δ10y (bps)0.0005
BAC ~ SPY + Δ10y0.3514
Incremental R² of SPY (given Δ10y)0.3509
Incremental R² of Δ10y (given SPY)0.0008

The takeaway

Short answer: no — over the last ~3 years, days when the 10‑year yield jumps did not produce stronger same‑day BAC returns; BAC’s day‑to‑day is dominated by broad market beta, not same‑day 10y ticks. A BAC beta to SPY of about 0.94 explains roughly 35.1% of its daily variance (R² = 0.3506), while daily 10y changes explain essentially zero on their own (R² ≈ 0.0005) and add only ~0.0008 incremental R² when SPY is included. The raw relationship is near zero (corr = −0.021) and the yield‑slope estimates are vanishingly small (≈ −0.00006 to +0.00008 return per 1 bp across models) and statistically insignificant (p values ~0.34–0.56). On the biggest positive yield‑jump days (top 20%, N=80) BAC averaged about −0.09% versus +0.12% on other days (N=650); that gap is not significant (Welch p = 0.3725 — roughly a 37‑in‑100 chance this is luck). Bottom line: this is a clear null for the simple “banks win same‑day when rates rise” pitch in this sample — focus on market beta and risk‑appetite drivers for BAC’s daily moves, not same‑day 10y spikes.

The fine print