The Hull–White Model
CIR
fixed Vasicek's negative-rates problem, but both models share a second, quieter weakness: a
constant long-run mean b can't be tuned to match every point on
today's real, humped, kinked, occasionally inverted market yield curve at once. For a trading
desk that has to price a new swaption today, against bonds and swaps whose prices are
already quoted in the market, that's disqualifying — a model that mis-prices the
instruments you can already see traded will happily mis-price the ones you're trying to sell
too. John Hull and Alan White's 1990 fix is almost embarrassingly simple: stop insisting on a
constant mean, and let it vary with time instead.
From a constant mean to a moving target
The Hull–White (or "extended Vasicek") model replaces the constant product
ab in Vasicek's drift with a deterministic, time-varying function
\theta(t):
dr = \big[\theta(t) - a\,r\big]\,dt + \sigma\,dW.
Everything else is untouched — a is still the reversion speed,
\sigma is still the constant volatility, and
r is still pulled back toward a target level. The only change is
that the target is no longer one fixed number b for all time — it's
a whole curve \theta(t)/a that can be a different level at every
future date.
That extra freedom is exactly enough to calibrate the model to fit today's entire
observed yield curve exactly. Write f(0,t) for today's
market instantaneous forward rate curve (readable straight off today's bond prices).
Hull and White showed that choosing
\theta(t) = \frac{\partial f}{\partial t}(0,t) + a\,f(0,t) + \frac{\sigma^2}{2a}\Big(1 - e^{-2at}\Big)
forces the model's own bond prices, computed today, to reproduce
f(0,t) — and hence today's whole discount curve — exactly,
for every maturity at once. (You won't need to re-derive this any more than you re-derived
Black–Scholes to price an option — treat it as a formula to feed today's curve into.) Notice
one clean special case: at t=0, the last term vanishes
(1 - e^0 = 0), leaving simply
\theta(0) = f_t(0,0) + a\,r_0 — the model's very first instant of
drift is pinned by nothing more than the slope of today's curve at the front end and today's
actual short rate.
A constant target can't chase a moving curve
The picture below makes the whole point in one glance: a stylized "today's market forward
curve" — humped, the way real curves usually are — against the single flat level a
Vasicek-style constant mean is stuck offering. No matter where you slide that flat line, it
can match the market curve at one maturity, or on average, but not everywhere at once.
Hull–White's \theta(t) is precisely the function that bends the
model's implied curve to trace the market curve exactly, point for point.
Worked example: \theta(0) and one later point
Take reversion speed a = 0.1, volatility
\sigma = 0.01, and today's short rate (and forward curve level at
t=0) r_0 = f(0,0) = 0.03, with the
market forward curve rising at a slope of f_t(0,0) = 0.004 (40
basis points per year) right at the front end.
\theta(0) = 0.004 + 0.1\times 0.03 = 0.004 + 0.003 = 0.007.
Now look two years out. Suppose the market curve has flattened by then, with
f(0,2) = 0.035 and a now-slightly-negative slope
f_t(0,2) = -0.001. With
e^{-2\times 0.1\times 2} = e^{-0.4} \approx 0.6703:
\theta(2) = -0.001 + 0.1\times 0.035 + \frac{(0.01)^2}{2\times 0.1}\big(1 - 0.6703\big) = -0.001 + 0.0035 + 0.000165 \approx 0.00267.
\theta(t) genuinely moves around as the shape of the market curve
changes — it isn't just ab repeated forever, which is exactly the
flexibility a single constant b could never offer.
A trading desk isn't just modelling interest rates in the abstract — it's pricing a new
derivative relative to instruments the market has already priced. If a model doesn't
reproduce today's quoted bond and swap prices, using it to price a new swaption creates an
immediate, embarrassing arbitrage: the model disagrees with the market about the value of
things everyone can already see traded, before it's even said anything about the new
instrument. That mismatch shows up as "basis" that has to be plugged by hand, hedges that
slip for no good reason, and P&L that doesn't reconcile. Hull–White (and its cousins —
the Black–Karasinski, Cheyette, and full Heath–Jarrow–Morton frameworks all follow the same
philosophy) trades away Vasicek's tidy interpretability of b as
"the long-run rate" in exchange for internal consistency with the market you're actually
quoting into. In practice, exact curve-fitting almost always wins the trade.
Two traps specific to Hull–White:
-
Curve-fitting is not the same as fixing the negative-rates problem.
Hull–White's short rate is still driven by a constant-\sigma
Gaussian shock, exactly like Vasicek — only the drift's target moved. The rate can still, in
principle, go negative with positive probability. Calibrating \theta(t)
to today's curve solves the curve-fitting problem; it does nothing about the sign problem
CIR was built to solve. (In practice this became a genuinely live issue during the era of
negative government yields — some desks came to see it as a feature rather than a bug.)
-
It's a whole function, not one extra number. A common misreading is that
Hull–White just "adjusts b a little." It doesn't add one
parameter — it replaces a single constant with an entire time-varying function, bootstrapped
directly off today's full curve of bond prices. Getting that curve wrong (stale quotes, a
bad interpolation between tenors) feeds directly into every
\theta(t) value, and hence every price the model produces
downstream.