Bond Options
Governments issue callable bonds so they can refinance if rates fall; corporations embed a
put in a bond so investors will accept a lower coupon; and the CBOT lists plain, exchange-
traded options on Treasury bond futures that a fixed-income desk uses to hedge — or simply
bet on — the direction of long rates. All three are the same instrument: a
bond option, the right (not the obligation) to buy or sell a bond at a fixed
price on or before a fixed date.
You already have two of the three ingredients this lesson needs.
Interest-rate futures
gave you a market-quoted forward price for a bond, and
multi-step binomial trees
gave you a numerical fallback for anything with no closed form. This lesson supplies the
third: a Black–Scholes-style closed form, adapted so it actually fits how bond prices behave.
Why not just reuse Black–Scholes?
A stock price can wander anywhere over any horizon; nothing pulls it back. A bond price
cannot — it is anchored to converge to par (or the strike, at the option's
expiry, to whatever the market's current view of that par value is) as maturity approaches.
A 30-year bond's price swings a great deal over a year; the same bond with three months left
barely moves — its yield can wander, but there's too little time left for that yield move to
translate into much of a price move. This is called pull to par, and it means
a bond's price volatility is not constant the way Black–Scholes wants — it shrinks
as the bond ages.
The fix, due to Fischer Black himself, is to stop modelling the bond's spot price and instead
model its forward price for delivery on the option's expiry date. A forward
price for one fixed future date doesn't have a "pull to par" problem — over the life of the
option, the forward price behaves reasonably close to lognormal with an
(approximately) constant volatility, even though the underlying bond's spot-price volatility
is shrinking the whole time. That single substitution — forward price in, spot price out — is
Black's model, and it is the standard practitioner tool for every
interest-rate option in this module.
Let F_0 be the bond's forward price for delivery at the option's
expiry T, K the strike,
P(0,T) today's discount factor to T,
and \sigma the (assumed constant) volatility of the forward
bond price. Then:
-
Call:
c = P(0,T)\big[F_0\,\Phi(d_1) - K\,\Phi(d_2)\big];
-
Put:
p = P(0,T)\big[K\,\Phi(-d_2) - F_0\,\Phi(-d_1)\big];
-
d_1 = \dfrac{\ln(F_0/K) + \tfrac12\sigma^2 T}{\sigma\sqrt{T}},
d_2 = d_1 - \sigma\sqrt{T}.
Compare this line by line with the ordinary
Black–Scholes formula:
every S_0 e^{rT} has become F_0, and
the lone discount factor P(0,T) now sits outside the
brackets rather than being smuggled into a drift term. There is no r
inside d_1,d_2 at all — the forward price has already absorbed it.
Worked example: a one-year at-the-money call
A desk wants to price a one-year European call, struck at par, on a Treasury bond futures
contract with $1,000 face value.
F_0 = \$1{,}000, \quad K = \$1{,}000, \quad \sigma = 5\%, \quad T = 1\text{ year}, \quad r = 5\%\text{ (cont. comp.)}.
Step 1 — the volatility scale.
\sigma\sqrt{T} = 0.05\sqrt{1} = 0.05.
Step 2 — d_1 and d_2.
At the money, \ln(F_0/K) = \ln 1 = 0, so
d_1 = \frac{0 + \tfrac12(0.05)^2(1)}{0.05} = \frac{0.00125}{0.05} = 0.025, \qquad d_2 = 0.025 - 0.05 = -0.025.
Step 3 — the normals. Near zero, \Phi(x)\approx 0.5 + 0.3989\,x
(the standard normal density at the origin), so
\Phi(0.025)\approx 0.5100 and
\Phi(-0.025)\approx 0.4900.
Step 4 — discount factor.
P(0,T) = e^{-0.05\times 1} = 0.9512.
Step 5 — assemble.
c = 0.9512\big[1000\times 0.5100 - 1000\times 0.4900\big] = 0.9512 \times 20.00 \approx \$19.02.
A one-year at-the-money call on this bond costs about $19.02 per $1,000 of
face value — about 1.9% of par, for a forward-price volatility of just 5% a year (bonds are
far less volatile than stocks, and the option is priced accordingly cheap).
The shape of the price
Exactly as with Black–Scholes, the call price sits smoothly above the kinked payoff
(F_0 - K)^+, discounted back — the gap is time value, and it grows
with both volatility and time to expiry.
Black's model assumes you can already hand it F_0 — but that
number itself has to be built, using exactly the cost-of-carry logic from
cost-of-carry and forward pricing.
Take the bond's current cash (dirty) price B_0, subtract the
present value I of any coupons paid before the option
expires (the option holder never receives those — the current owner keeps them), and grow
the rest forward at the risk-free rate to the expiry date:
F_0 = (B_0 - I)\,e^{rT}.
Get this step wrong — forget to strip out the coupons, say — and every downstream
d_1, d_2, and price is wrong too,
even though Black's formula itself was applied correctly.
Two classic slips when pricing bond options in practice:
-
Price volatility vs. yield volatility. Traders quote and think in terms
of yield volatility, not price volatility — it's far more stable across the
curve. The two are related by the bond's
duration
(roughly, price vol \approx duration
\times yield vol \times yield
level), but plugging a yield-volatility number straight into
\sigma above — without that conversion — silently misprices
the option.
-
Clean vs. dirty price. Bond quotes are usually the clean price
(excluding accrued interest); the cost-of-carry argument above needs the dirty
(cash) price. Forgetting to add accrued interest before computing
F_0 is a small error that compounds through
d_1 and d_2.