Explainer
Bond yields explained: why prices fall when yields rise
A bond’s coupon never changes, so its price does all the adjusting. By 21 October 2026 that arithmetic had taken 7.9% off a long Treasury fund’s price this year, more than four times what a short one lost.
On this page
Key takeaways
- A bond yield is the annual return a bond pays at its current price: 5.13% for the US 10-year Treasury on 21 October 2026, 3.44% for Germany’s.
- The coupon is fixed, so prices fall when yields rise: a 4.25% 10-year bond worth $1,000 at a 4.25% yield is worth $931.83 at 5.13%.
- Priced at 93.00, a 4.25% 10-year bond has three yields: a 4.25% coupon rate, a 4.57% current yield and a 5.155% yield to maturity.
- From a 5.13% yield, a one-point rise takes 1.86% off a 2-year par bond and 13.65% off a 30-year, while a one-point fall adds 17.11% to the 30-year, the asymmetry called convexity.
- From 31 December 2025 to 21 October 2026 the long Treasury fund USTBOND fell 7.9% in price, against 4.6% for USBOND and 1.8% for SHORTBOND.
A bond yield is the annual return a bond pays at its current price, in percent. The coupon is fixed, so yield and price move in opposite directions: a cheaper bond pays more per dollar. On 21 October 2026 the US 10-year Treasury yield was 5.13%: a buyer at that day’s price who holds to maturity earns about 5.13% a year.
What are bond yields?
The coupon rate is fixed at issue as a percent of face value: a 4.25% bond pays $42.50 a year per $1,000 for life. The yield is what that income is worth at today’s price, so it changes whenever the price does. A Treasury yield is the same measure for US government debt; on 21 October the US curve ran from 4.09% at one month to a high of 5.47% at 20 years.
The 2-year yielded 4.81%, so the 2s10s spread behind yield curve inversion, the 10-year minus the 2-year, stood at +32 basis points: the curve was not inverted. Other governments borrow at their own rates, and the gaps between them are what the yen carry trade earns:
Ten-year government bond yields, latest observation
Why bond prices fall when yields rise
Follow a 4.25% 10-year bond as market yields rise to 5.13%:
- The coupon is fixed. The bond pays $42.50 a year per $1,000, in two halves of $21.25, until it matures.
- New bonds pay more. A new 10-year bond issued at 5.13% pays $51.30 a year, $8.80 more.
- The old price drops until the yields match. At $931.83 the old bond also yields 5.13%: the $68.17 discount is exactly the present value of that $8.80 a year shortfall over ten years.
P = Σ (C ÷ 2) ÷ (1 + y ÷ 2)^k + F ÷ (1 + y ÷ 2)^(2n)k = 1, 2, …, 2n
- P
- Price today, on a coupon date (no accrued interest)
- C
- Annual coupon in dollars: coupon rate × face, $42.50 here
- y
- Yield to maturity per year, as a decimal: 0.0513
- n
- Years to maturity: 10, so 20 half-year payments
- F
- Face value repaid at maturity: $1,000
Repeat the sum at other yields and the bond price and yield relationship fits in one table:
| Yield | Price | vs par |
|---|---|---|
| 3.75% | $1,041.38 | +4.14% |
| 4.00% | $1,020.44 | +2.04% |
| 4.25% | $1,000.00 | 0.00% |
| 4.50% | $980.05 | -2.00% |
| 5.00% | $941.54 | -5.85% |
| 5.13% | $931.83 | -6.82% |
| 5.50% | $904.83 | -9.52% |
| 6.00% | $869.82 | -13.02% |
For a holder the drop fades with time. At an unchanged 5.13% yield the bond climbs to 96.16 with five years left and 98.35 with two, then repays 100: the pull to par. The discount measures income given up against a new 5.13% bond, and turns into a cash loss only on a sale before maturity.
Coupon rate, current yield and yield to maturity
Price the same 4.25% 10-year at 93.00 and three different yields appear:
- 4.25%Coupon rate: $42.50 ÷ $1,000 face, fixed at issue
- 4.57%Current yield: $42.50 ÷ $930 price, one year of income
- 5.155%Yield to maturity: coupons plus the $70 gain to par
The yield to maturity (YTM) is the one rate that makes the price formula return today’s price, assuming you hold to the end, every payment arrives and coupons are reinvested at that rate. No closed-form YTM formula exists: ytm() in the script below solves for it by bisection in five lines.
Many guides print a shortcut as the YTM formula: (C + (F − P) ÷ n) ÷ ((F + P) ÷ 2). Here it gives (42.50 + 7.00) ÷ 965 = 5.130%, 2.5 basis points under the exact 5.155%, and on a 4.25% 30-year priced at 80 it falls 18 basis points short. Another common slip divides the coupon by the market price and calls it the coupon rate: that is the current yield.
Bond price calculator
Duration and convexity: why long bonds move more
Modified duration is the standard gauge of interest rate risk: roughly the percent a bond’s price moves for a one-point change in yield. It grows with maturity and shrinks as the coupon rises. Divided by 100 it gives the percent move per basis point; times the price, that is the DV01 worked through in basis points and DV01.
| Maturity | Yield +1 pt | Yield -1 pt | Duration |
|---|---|---|---|
| 2 years | -1.86% | +1.90% | 1.88 |
| 5 years | -4.25% | +4.48% | 4.36 |
| 10 years | -7.39% | +8.12% | 7.75 |
| 30 years | -13.65% | +17.11% | 15.23 |
Read the 30-year row: duration predicts a 15.23% move either way, but the bond loses 13.65% when yields rise and gains 17.11% when they fall. That bend in the price curve is convexity, and it grows with maturity: the gain is 1.02 times the loss at 2 years, 1.25 times at 30.
Price of a 4.25% 10-year bond at yields from 2% to 9%
- Price
- Duration estimate
price per 100 of face
The 2026 test: the longest bonds fell furthest
Fund prices show the same ordering in real data. From the last close of 2025 to 21 October 2026, three US bond ETFs fell in order of the maturities they hold:
US bond fund prices in 2026, rebased to 100 on 31 December 2025
- USTBOND, long Treasury
- USBOND, core bonds
- SHORTBOND, short Treasury
price, 31 Dec 2025 = 100
All three closed lowest on 2 or 5 October and had won part of the loss back by 21 October, USTBOND 4.1% above its low; the USTBOND symbol page tracks the long fund.
Why bond yields rose in 2026
Yields rise when inflation runs ahead of forecasts, when the central bank lifts short rates and when governments sell more debt than buyers want. In 2026 the first two came with an energy price shock: in TickerLayer’s BRENTUSD daily closes, Brent crude went from $60.91 a barrel at the end of 2025 to $109.58 on 21 October, up 79.9%. On 16 September the Federal Reserve raised its target range 25 basis points to 3.75% to 4.00%, saying in its statement that inflation "remains elevated".
TickerLayer’s 10-year observations trace October: 5.24% on the 1st, 5.10% on the 15th, 5.13% on the 21st. Four of these releases came in above consensus and one, housing starts, below:
| Release | Actual | Consensus | Date |
|---|---|---|---|
| CPI, Sep, y/y | 3.7% | 3.6% | 14 Oct |
| Core CPI, Sep, y/y | 2.6% | 2.5% | 14 Oct |
| PPI, Sep, m/m | +1.3% | +0.5% | 15 Oct |
| Retail sales, Sep, m/m | +0.8% | +0.3% | 15 Oct |
| Housing starts, Sep | 1.221m | 1.30m | 20 Oct |
| Fed rate decision | due | 4.00% | 28 Oct |
Hot numbers did not lift yields every time. On 14 and 15 October, when consumer prices, producer prices and retail sales all came in above consensus, the long fund USTBOND still closed 0.7% and 1.4% higher, a sign that long yields fell on both days. The economic calendar endpoint serves these rows.
What high bond yields mean for stocks and borrowers
Higher yields raise the rate used to discount future profits, which weighs most on companies whose earnings lie far ahead, and give stocks a rival that pays about 5% with little credit risk. Borrowers feel it directly: mortgages and corporate loans are priced off the same curve.
Bond yields from an API, priced in Python
TickerLayer serves daily government bond yields for the US curve, 1 month to 30 years, and the German, French, Spanish, Italian and UK curves, 1 to 30 years. The bond snapshot endpoint adds the previous observation:
GET /bond/snapshot/US:10Y
{
"symbol": "US:10Y",
"rate": 5.13,1
"unit": "percent",2
"date": "2026-10-21",3
"timestamp": 1792540800000,
"prev_rate": 5.12,
"prev_date": "2026-10-20",4
"prev_timestamp": 1792454400000,
"change": 0.01,
"change_bps": 1,5
"change_percent": 0.1953
}
rateThe yield to maturity: 5.13 means 5.13%, so y = 0.0513 in the price formula.unitPercent on every bond symbol: divide by 100 before using it as a decimal.dateThe observation date, not the time of the request: read on 22 October, the latest US value was dated 21 October.prev_dateThe date of prev_rate. Compare it with date to see what the change covers: the previous business day on most curves, the previous monthly auction on Italy’s short tenors. Store each day’s row to build a longer history.change_bpsThe move in basis points: whole numbers on the US curve, fractions such as 5.7 on France’s.
bond_yields.py fetches five snapshots and prices the 4.25% bond at the live 10-year yield, reproducing the bond maths on this page. It needs Python 3.9 or newer, the standard library and a TICKERLAYER_API_KEY environment variable.
"""Price a bond at today's government bond yields. Python 3.9+, standard library only."""
import json
import os
import sys
import urllib.error
import urllib.request
API = "https://api.tickerlayer.com"
KEY = os.environ.get("TICKERLAYER_API_KEY") or sys.exit("Set TICKERLAYER_API_KEY first.")
def snapshot(symbol):
"""Latest daily observation and the one before it."""
req = urllib.request.Request(f"{API}/bond/snapshot/{symbol}", headers={"x-api-key": KEY})
try:
with urllib.request.urlopen(req, timeout=30) as resp:
return json.load(resp)
except urllib.error.HTTPError as err: # 403: the key has no Bonds add-on
sys.exit(f"HTTP {err.code}: {err.read().decode()}")
def price(coupon, years, ytm, face=100.0):
"""Price of a bond paying coupon % a year in two halves, at a yield to maturity in %."""
n, c, y = round(years * 2), face * coupon / 200, ytm / 200
return sum(c / (1 + y) ** k for k in range(1, n + 1)) + face / (1 + y) ** n
def ytm(target, coupon, years):
"""Exact yield to maturity in %, by bisection: the price falls as the yield rises."""
lo, hi = -5.0, 60.0
for _ in range(100):
mid = (lo + hi) / 2
lo, hi = (mid, hi) if price(coupon, years, mid) > target else (lo, mid)
return (lo + hi) / 2
def duration(coupon, years, y):
"""Modified duration in years: the % price change for a 1-point move, from 1 bp either side."""
return (price(coupon, years, y - 0.01) - price(coupon, years, y + 0.01)) / (0.0002 * price(coupon, years, y))
print("symbol yield observed change")
rates = {}
for symbol in ["US:2Y", "US:10Y", "US:30Y", "DE:10Y", "FR:10Y"]:
s = snapshot(symbol)
rates[symbol] = round(s["rate"], 3) # some curves arrive unrounded
print(f"{symbol:<8}{rates[symbol]:<7g} {s['date']} {s['change_bps']:+g} bps")
y10 = rates["US:10Y"]
p = price(4.25, 10, y10)
print(f"\n4.25% 10-year at {y10}%: {p:.2f} per 100, ${p * 10:,.2f} per $1,000, "
f"duration {duration(4.25, 10, y10):.2f}")
print("yield per $1,000 vs par")
for y in sorted({3.75, 4.0, 4.25, 4.5, 5.0, 5.5, 6.0, y10}):
q = price(4.25, 10, y)
print(f"{y:5.2f}% {q * 10:>10,.2f} {q - 100:+6.2f}%")
print("\nbond price current exact ytm shortcut")
for years, px in [(10, 93.0), (30, 80.0)]:
shortcut = (4.25 + (100 - px) / years) / ((100 + px) / 2) * 100 # the textbook approximation
print(f"4.25% {years}-year {px:6.2f} {4.25 / px * 100:6.2f}% {ytm(px, 4.25, years):8.3f}%"
f" {shortcut:7.3f}%")
print(f"\npar bond at {y10}% +1 point -1 point duration")
for years in (2, 5, 10, 30):
up, down = price(y10, years, y10 + 1) - 100, price(y10, years, y10 - 1) - 100
print(f"{years:>2}-year {up:+7.2f}% {down:+7.2f}% {duration(y10, years, y10):8.2f}")symbol yield observed change
US:2Y 4.81 2026-10-21 +2 bps
US:10Y 5.13 2026-10-21 +1 bps
US:30Y 5.42 2026-10-21 +0 bps
DE:10Y 3.44 2026-10-21 -1 bps
FR:10Y 4.985 2026-10-21 +5.7 bps
4.25% 10-year at 5.13%: 93.18 per 100, $931.83 per $1,000, duration 7.97
yield per $1,000 vs par
3.75% 1,041.38 +4.14%
4.00% 1,020.44 +2.04%
4.25% 1,000.00 +0.00%
4.50% 980.05 -2.00%
5.00% 941.54 -5.85%
5.13% 931.83 -6.82%
5.50% 904.83 -9.52%
6.00% 869.82 -13.02%
bond price current exact ytm shortcut
4.25% 10-year 93.00 4.57% 5.155% 5.130%
4.25% 30-year 80.00 5.31% 5.640% 5.463%
par bond at 5.13% +1 point -1 point duration
2-year -1.86% +1.90% 1.88
5-year -4.25% +4.48% 4.36
10-year -7.39% +8.12% 7.75
30-year -13.65% +17.11% 15.23On another day the snapshot lines, the live-yield row and the par-bond table follow the curve; the other rows use fixed yields or prices. For a push feed instead, the bonds.quotes channel sends the latest observation on subscribe, then one frame per symbol for each new observation, with the same fields; WebSocket market data covers the client. AI agents get the same numbers from get_bond_yield on the financial MCP server.
Bonds are a data add-on, 39 USD a month on Individual and 349 USD on Business (data add-ons); without it /bond answers 403. Expect gaps in the dates: the US bond market closes on Veterans Day, Wednesday 11 November 2026, while stocks trade, one of the bond market holidays that stock calendars miss.
Questions
Is a higher bond yield good?
It depends on your side: better for new buyers, who lock in more income; worse for holders, whose bonds lose price, and for borrowers. A one-point rise takes 7.39% off a 10-year par bond at 5.13%.
What does a 5% bond yield mean?
Bought at today’s price and held to maturity, the bond returns 5% a year, if every payment arrives and coupons are reinvested at 5%. A 4.25% 10-year bond yields 5% at $941.54 per $1,000.
What is a Treasury yield?
The yield to maturity on US government debt, in percent a year. On 21 October 2026 the 10-year Treasury yield was 5.13%, the 2-year 4.81% and the 30-year 5.42%.
Why do bond prices fall when interest rates rise?
The coupon is fixed, so when new bonds pay more an old bond sells only at a discount. At a 5.13% yield a 4.25% 10-year bond is worth $931.83 per $1,000.
What is the difference between coupon rate and yield?
The coupon rate is fixed interest as a percent of face value. The yield is the return at today’s price: a 4.25% bond priced at 93.00 has a 4.57% current yield and a 5.155% yield to maturity.
What does yield to maturity mean?
The annual return from buying at today’s price and holding to the end, counting every coupon and the gain or loss to face value. It is solved numerically; the common shortcut misses by 18 basis points on a 4.25% 30-year bond priced at 80.