What held up when bond yields spiked? 20 episodes since 1963

Since 1963 the 10-year Treasury yield jumped 1 point or more in a year 20 times. In the 7 when stocks fell, 10-year Treasuries lost money every time and T-bills made money every time; a 60/40 with Treasuries lost a median 6.6%, one with T-bills 2.5%.

Julien Esnault
Julien Esnault

· 9 min read

Grouped bar chart of the 7 yield spikes since 1963 when the S&P 500 fell, 12-month returns of 100% US stocks, a 60/40 with 10-year Treasuries and a 60/40 with T-bills: the Treasury mix lost about as much as stocks, down 17.3% against 17.5% in 2022, while the T-bill mix lost less every time

The short version: in the 7 episodes since 1963 when the 10-year Treasury yield jumped 1 point or more in a year and the S&P 500 fell, 10-year Treasuries lost money all 7 times. One-month Treasury bills made money all 7 times. A 60/40 portfolio with Treasuries lost a median 6.6%, barely less than stocks' 7.4%; the same 60/40 holding T-bills lost 2.5%.

Part 2 of a series on rising yields and your portfolio. Part 1 found the 20 yield spikes and showed that stocks fell only when inflation was 3% or more. This part asks what, in the same 20 episodes, held up.

The usual answer to "what do I own when yields rise?" is a bond fund, because the 60/40 portfolio counts on bonds to rise when stocks fall. That works when stocks fall because the economy is slowing and yields drop. A yield spike is the opposite case: the bonds are what is falling.

In the table, "bad 7" are the spikes when the S&P 500 fell, "hot 14" those with inflation at 3% or more, "cool 6" those under 3%. Each count is how many finished their 12 months up.

12 months of the spikeUp, bad 7Median, bad 7Up, hot 14Up, cool 6Up, all 20
US stocks (total return)1−7.4%7613
10-year Treasury0−5.5%101
1-month T-bills7+6.1%14519
Gold30.0%9413
60/40 stocks / 10-year Treasuries1−6.6%7512
60/40 stocks / T-bills2−2.5%9615
60/30/10 stocks / 10-year / gold1−7.0%8513
Grid of the 20 yield spikes since 1963, one row per asset or portfolio: the 10-year Treasury finished up in 1 of 20 and in none of the 7 when stocks fell, T-bills in 19 of 20 and all 7, gold and stocks in 13 of 20
Each square is one spike, filled when the asset or portfolio finished its 12 months up; pink columns are the 7 when the S&P 500 fell. Source: Ken French Data Library, FRED (DGS10, CPI), World Bank Pink Sheet; Portfolio Terminal calculations.

The 7 bad years, one by one

Each row is the 12 months ending at the sharpest point of the climb, the same windows as in part 1. "60/40 + 10y" is 60% US stocks and 40% 10-year Treasuries; "60/40 + bills" holds T-bills instead. Inflation over these windows ran from 3.5% (1966) to 11.8% (1974).

12 months toStocks60/40 + 10y60/40 + bills10yT-billsGold
Aug. 1966−7.2%−5.7%−2.5%−3.8%+4.4%0.0%
Sept. 1969−8.4%−8.0%−2.6%−8.1%+6.1%+2.5%
Oct. 1974−31.3%−19.5%−16.9%−0.2%+8.0%+59.0%
June 1978+4.7%+2.2%+5.4%−1.9%+6.0%+30.5%
Sept. 1981−2.0%−3.9%+4.7%−7.5%+14.8%−34.1%
May 1984−7.4%−6.6%−0.9%−5.5%+9.3%−13.9%
Oct. 2022−17.5%−17.3%−10.1%−17.9%+0.8%−6.4%

The 60/40 with Treasuries beat stocks alone in 5 of the 7, but by little: in the 12 months to October 2022 it lost 17.3% against 17.5%. Swapping the 40% of Treasuries for T-bills did better than the Treasury version in all 7, and in all 20 episodes.

June 1978 is the one year stocks come out positive here while part 1 counts it as a loss: part 1 used the S&P 500 price index, this table counts dividends and the whole US market, and that is the difference.

Why Treasuries couldn't cushion this fall

A bond's price moves against its yield. Over a 1-point rise, the price a 10-year Treasury lost outweighed the year of coupon it paid in 19 of the 20 episodes. It finished positive once, in the 12 months to February 1989 (+1.3%). The median was −6.4%.

So the thing a 60/40 relies on, bonds up while stocks are down, needs yields to fall. In a spike, both sides lose together. That is what happened in 2022, and it is the same mechanism our study of long-term Treasuries at 5% measured on the 30-year bond. Today's level is on the 10-year Treasury yield page and the whole curve on Treasury yields.

Cash won the spike, not the inflation

T-bills are what the rising rate is paid on, so they rise with it: +14.8% in the 12 months to September 1981. They never lost money in the 20 episodes (the lowest was 0.0%, in 2013).

After inflation it is a different score. In the 7 bad episodes T-bills beat US inflation 4 times, with a median real return of +0.4%. In the 12 months to October 2022 they returned 0.8% while prices rose 7.8%. Nothing held its purchasing power every time: gold beat inflation in 2 of the 7, US stocks and every stock-bond mix in none.

Gold: the biggest wins and the biggest loss

Gold's median in the bad 7 is 0.0%, and that median hides the widest spread in the table: +59.0% in the 12 months to October 1974, −34.1% in the 12 months to September 1981. It rose in 3 of the 7. Adding 10% of it to a 60/40 (60/30/10) did not change the median loss in the bad years (−7.0%). Before 1968 the price was fixed at $35, so 1966 shows no move. Our oil-shock study found the same pattern over weeks: gold helps, then gives it back. The fund most people hold it through is GLD; GLD vs TLT puts it next to long Treasuries.

Which stocks held up

Ken French's 12 US industry portfolios, same 7 bad episodes:

IndustryMedian, bad 7Up, bad 7Median, hot 14
Consumer non-durables (food, tobacco, apparel)+0.5%4+3.7%
Utilities−0.7%3+2.0%
Health care−2.2%3+5.7%
Energy−7.8%2+13.3%
Business equipment (tech)−10.3%2+2.0%
Finance−10.9%2+7.0%
Retail and wholesale−15.4%2+6.2%

Staples came closest to holding flat; the usual fund for them is XLP. Energy is the trap: it led across the 14 high-inflation spikes, with a median of +13.3%, and still lost 7.8% in the ones where the market fell.

And after the spike

The loss on bonds was mostly deferred income. In the 12 months after the sharpest month of each spike, 10-year Treasuries gained 18 times out of 20, a median 8.3%, and beat T-bills 14 times. The two exceptions were the 12 months to March 2022 (−3.6%) and to October 2023 (−2.5%).

Paired bars for each of the 20 yield spikes since 1963: the 10-year Treasury's total return during the 12 months of the spike, negative in 19 of 20, and over the next 12 months, positive in 18 of 20 with gains of 42% after 1981 and 38% after 1984
Pink: the 12 months to the sharpest month of each spike; green: the 12 months after. Source: FRED DGS10, a par 10-year bond repriced monthly; Portfolio Terminal calculations.

The catch is timing. The sharpest month is only known afterwards; in 2021 the next year brought a bigger spike, not a rebound. Nobody we tested could call the turn in yields: in our walk-forward test no model beat "no change".

What it means for a portfolio today

On September 24, 2026 the 10-year yield was 5.18%, up 1.02 points on the year, with US inflation at 3.4% in August: the high-inflation side of the table, where the 7 bad episodes sit. The S&P 500 was still up 16.7% on the year. This is not a forecast, and it is not investment advice.

What the 20 episodes say about a portfolio is narrower: in a yield spike, the part meant to cushion a stock fall is only as good as its maturity. Long bonds (TLT) and a total bond fund (BND vs TLT) carried the loss; T-bills didn't. Here is the 2022 rate shock, from the January 2022 high to the recovery in early 2024, replayed on what you hold today:

› your portfolio vs the shock

you, Jan 3, 2022 close → Feb 9, 2024

−?.?%

worst week

−0.0%

lowest point

−0.0%

You held up better than European stocks. One holding cost you the most, another cushioned the blow.

−30−20−100+10+20peakgold +13.3%s&p 500 +4.8%you ?Dec 20, 2021Feb 9, 2024

what moved it

The crash test runs the same holdings through the COVID crash and the 2024 yen unwind, and the portfolio X-ray shows how much of them sits in long bonds and rate-sensitive funds. Every study in the series is on the research page.

How we measured

Monthly returns from February 1962 to August 2026. US stocks are the CRSP value-weighted US market with dividends (Ken French's Mkt-RF plus RF); T-bills are the 1-month Treasury bill (Ken French RF). The 10-year Treasury is built from FRED's DGS10: each month a par 10-year bond is bought at last month's close and repriced at this month's, one month shorter, plus a month of coupon. On calendar years it returns −7.1% for 1994 and −16.4% for 2022. Gold is the World Bank Pink Sheet monthly average price, so it smooths month-end swings. Industries are Ken French's 12 value-weighted portfolios. Portfolios are rebalanced every month, with no fees or taxes. Real returns deduct CPI (FRED CPIAUCSL) over the same 12 months.

The 20 episodes are part 1's: runs of months when the 10-year yield was up 1 point or more on the year, each measured over the 12 months ending at its sharpest month. "Bad" means the S&P 500 price index fell over those months. What would change the result: the episodes are chosen in hindsight, so a live strategy would enter late and leave late; a shorter bond than 10 years would lose less in each spike and earn less after it.

Reproduce it

The headline counts, T-bills up in 7 of the 7 bad episodes and the 10-year Treasury in 0, in about 60 lines of Python on public data only: FRED for the 10-year yield and CPI, Yahoo Finance for the S&P 500, Ken French for stocks and T-bills, month-ends through August 2026. Gold is left out, because the Pink Sheet is an Excel file. We ran it on September 29, 2026; it finds part 1's 20 episodes, then prints the counts.

# Reproduces https://portfolio-terminal.com/blog/portfolio-when-bond-yields-rise
# pip install pandas yfinance
# Month-ends through August 2026. Gold is left out: its source is an Excel file.
import pandas as pd
import yfinance as yf

END = "2026-08"
FRED = "https://fred.stlouisfed.org/graph/fredgraph.csv?id={}&coed=2026-09-25"
FRENCH = "https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/F-F_Research_Data_Factors_CSV.zip"


def month_end(s):
    return s.groupby(s.index.to_period("M")).last()


def fred(series):
    s = pd.read_csv(FRED.format(series), index_col=0, parse_dates=True, na_values=".").iloc[:, 0]
    return month_end(s.dropna())


y10, cpi = fred("DGS10"), fred("CPIAUCSL")  # 10-year yield in %, CPI
spx = yf.Ticker("^GSPC").history(start="1960-01-01", end="2026-09-01", auto_adjust=False)["Close"]
spx = month_end(spx.tz_localize(None))

ff = pd.read_csv(FRENCH, skiprows=3, index_col=0)  # monthly block, then annual
ff = ff[ff.index.astype(str).str.strip().str.fullmatch(r"\d{6}")].astype(float) / 100
ff.index = pd.PeriodIndex(ff.index.str.strip(), freq="M")

# Par 10-year bond bought at last month's yield, repriced a month later, plus a month of coupon.
c, y, t = y10.shift(1) / 100, y10 / 100, 10 - 1 / 12
v = (1 + y / 2) ** (-2 * t)
bond = c / y * (1 - v) + v - 1 + c / 12

r = pd.DataFrame({"stocks": ff["Mkt-RF"] + ff["RF"], "T-bills": ff["RF"], "10y Treasury": bond}).loc["1962-02":END]
r["60/40 Treasuries"] = 0.6 * r["stocks"] + 0.4 * r["10y Treasury"]
r["60/40 T-bills"] = 0.6 * r["stocks"] + 0.4 * r["T-bills"]

# Part 1's episodes: runs of months with the yield up 1 point or more on the year
# (gaps under a quarter joined), each taken at its sharpest month.
m = pd.DataFrame({"dy": y10 - y10.shift(12), "spx": spx / spx.shift(12) - 1, "cpi": cpi / cpi.shift(12) - 1}).loc[:END].dropna()
hits = m[m["dy"] >= 1]
run = (pd.Series([p.ordinal for p in hits.index]).diff() > 3).cumsum().values
peaks = hits.groupby(run)["dy"].idxmax()


def pct(p, first, last):
    return ((1 + r.loc[p + first:p + last]).prod() - 1).mul(100).round(1)


ep = pd.DataFrame({p: pct(p, -11, 0) for p in peaks}).T
after = pd.DataFrame({p: pct(p, 1, 12) for p in peaks}).T
bad = m.loc[peaks, "spx"].values < 0
print(f"{len(ep)} episodes, {(m.loc[peaks, 'cpi'] >= 0.03).sum()} with inflation at 3%+, stocks fell in {bad.sum()}")
print("During the 12 months of the spike:")
for col in r.columns:
    print(f"  {col:17} up in {(ep[col][bad] > 0).sum()} of {bad.sum()} bad episodes (median {ep[col][bad].median():.1f}%),"
          f" up in {(ep[col] > 0).sum()} of {len(ep)}")
print(f"  T-bills beat the 10y Treasury in {(ep['T-bills'] > ep['10y Treasury']).sum()} of {len(ep)}")
print(f"In the 12 months after: 10y Treasury up in {(after['10y Treasury'] > 0).sum()} of {len(after)}"
      f" (median {after['10y Treasury'].median():.1f}%), beat T-bills in {(after['10y Treasury'] > after['T-bills']).sum()}")
20 episodes, 14 with inflation at 3%+, stocks fell in 7
During the 12 months of the spike:
  stocks            up in 1 of 7 bad episodes (median -7.4%), up in 13 of 20
  T-bills           up in 7 of 7 bad episodes (median 6.1%), up in 19 of 20
  10y Treasury      up in 0 of 7 bad episodes (median -5.5%), up in 1 of 20
  60/40 Treasuries  up in 1 of 7 bad episodes (median -6.6%), up in 12 of 20
  60/40 T-bills     up in 2 of 7 bad episodes (median -2.5%), up in 15 of 20
  T-bills beat the 10y Treasury in 20 of 20
In the 12 months after: 10y Treasury up in 18 of 20 (median 8.3%), beat T-bills in 14

Sources: FRED, 10-year Treasury constant maturity rate (DGS10) · FRED, consumer price index (CPIAUCSL) · Kenneth R. French Data Library · World Bank commodity prices (Pink Sheet) · S&P 500 index history, Yahoo Finance

#research#treasury-yields#portfolio#market-data

Keep reading

8 min readDo stocks fall when bond yields rise? 20 yield spikes since 1963Since 1963 the 10-year Treasury yield rose 1 point or more in a year 20 times. The S&P 500 fell over that year in 7, all with inflation at 3% or more; with inflation under 3%, it rose every time. Today: yield +1.02 points, inflation 3.4%.12 min readLong-term Treasuries at 5%: what you can gain, what you can lose, and how to hedgeThe 30-year Treasury pays 5.29%, its highest since 2007. We measured what 10, 20 and 30-year bonds gain or lose if yields move, tested whether machine learning can call the next move, and looked at what actually protected investors in 2022.9 min readHow Russia, Saudi Arabia and oil move your portfolio — and whether gold protects itDrones shut Saudi Arabia’s Hormuz bypass and Putin warned Europe of war in the same week. How an oil shock reaches your stocks, why Europe feels it first, what gold really did last time, and a replay you can run on your own holdings.

cite: Julien Esnault, “What held up when bond yields spiked? 20 episodes since 1963”, Portfolio Terminal, 2026-09-29. plain-text version for AI tools

Try it on your own holdings

portfolio terminal

Measure your own portfolio’s risk, not a textbook one.

Import your positions from any broker and see your volatility, beta, drawdown and correlations every morning.

Wall Street in 60s, every morning. What’s in it

One short email before the open. Unsubscribe anytime.