From the stochastic short rate to forward-rate models and the LIBOR market model — how the yield curve is allowed to wiggle, and what that costs to price.
Deck 11 treated the discount rate as a deterministic curve. To price options on bonds, swaptions, caps and floors, we need to give that curve a probability distribution. The simplest way: pick the instantaneous rate $r_t$ and make it follow a stochastic differential equation
$$dr = u(r, t)\, dt + w(r, t)\, dW.$$
$r_t$ is the rate at which the money-market account grows for the next instant:
$$dM_t = r_t M_t\, dt.$$
You can't trade it directly — it's an idealisation — but every bond price will be derived from it.
One Brownian shock drives the whole curve. In reality the level, slope and curvature each move semi-independently, but a single-factor model is the right place to start — it gets the qualitative picture right, and most exotic-rate desks layer in extra factors only when they have to.
A model is then a choice of the drift $u(r, t)$ and the volatility $w(r, t)$. The rest of this deck is a tour of the popular options.
This deck covers chapters 16, 17, 18 and 19 of Wilmott. The interactive widget on slide 10 lets you switch between Vasicek, CIR and Ho–Lee, watch the path bundle evolve, and read off the empirical mean and standard deviation of $r_T$ against the theoretical predictions.
Let $V(r, t; T)$ be the price at time $t$ of a zero-coupon bond paying 1 at $T$. Ito's lemma applied to $V$:
$$dV = \left(V_t + u V_r + \tfrac{1}{2} w^2 V_{rr}\right) dt + w V_r\, dW.$$
The hedging argument can't use the underlying — $r$ isn't traded. Wilmott's trick: hedge one bond against another bond of different maturity. The hedge eliminates $dW$. Setting the residual to the risk-free rate $r$ and rearranging yields the bond pricing equation:
$$\boxed{\;V_t + \tfrac{1}{2} w^2 V_{rr} + (u - \lambda w) V_r - rV = 0\;}$$
$\lambda(r, t)$ is determined by the market — it appears in any traded bond's drift through
$$\text{drift of }V - rV = \lambda\, (\text{vol of }V).$$
The same $\lambda$ has to apply to every bond, otherwise there's an arbitrage between them.
Black–Scholes uses $S$ to hedge an option. Here we use one bond to hedge another, because $r$ is not tradable. The PDE has the same shape: a parabolic equation with a drift that has been adjusted for risk.
Terminal condition: $V(r, T; T) = 1$. Boundary conditions depend on the model — on whether $r$ can go negative, hit a barrier, etc.
Under the real-world measure $\mathbb{P}$, the short rate follows
$$dr = u\, dt + w\, dW^\mathbb{P}.$$
Under the risk-neutral measure $\mathbb{Q}$ (with the money-market account as numeraire), the drift becomes
$$dr = (u - \lambda w)\, dt + w\, dW^\mathbb{Q}.$$
The market price of risk $\lambda$ is exactly the change-of-measure quantity that takes us from $\mathbb{P}$ to $\mathbb{Q}$. Once we're in $\mathbb{Q}$, every traded asset divided by $M_t$ is a martingale.
Use $\mathbb{Q}$. The bond price is the discounted expectation of its terminal payoff:
$$V(r, t; T) = \mathbb{E}^\mathbb{Q}\!\left[ e^{-\int_t^T r_s\, ds} \,\Big|\, r_t = r\right].$$
Use $\mathbb{P}$. Things like value-at-risk, P&L distributions and scenario tests need the real-world distribution of $r_t$ — not the one that's been adjusted to make the prices arbitrage-free.
This is a recurring source of confusion. Pricing and risk live under different measures, and the same model can — and routinely does — produce different drifts depending on what question is being asked.
Many model parameters are quoted directly under $\mathbb{Q}$ — calibrated to traded option prices — so the market price of risk never appears explicitly. The literature usually states the SDE under $\mathbb{Q}$ from the start.
The first named one-factor model. Linear drift, constant volatility:
$$dr = (a - br)\, dt + \sigma\, dW.$$
Gaussian:
$$\mathbb{E}[r_T] = e^{-bT} r_0 + \frac{a}{b}(1 - e^{-bT}),$$
$$\mathrm{Var}[r_T] = \frac{\sigma^2}{2b}(1 - e^{-2bT}).$$
Stationary distribution exists at $T \to \infty$.
Bond prices have a clean closed form: $V(r, t; T) = A(t, T) e^{-B(t, T) r}$, with $A$ and $B$ given by integrating ODEs — the model is "affine" in the short rate, the prototype of the affine-term-structure family.
The drawback. Because $r$ is Gaussian, it can go negative with positive probability. In the 1990s this was considered an embarrassment. After 2014 the eurozone, Switzerland and Japan ran with negative policy rates for years — and the Vasicek property suddenly looked less like a flaw and more like a feature.
The same drift as Vasicek, but the volatility scales with $\sqrt{r}$:
$$dr = (a - br)\, dt + \sigma \sqrt{r}\, dW.$$
As $r \to 0$, the volatility vanishes faster than the drift, so the SDE pushes $r$ back upward. The Feller condition
$$2a \ge \sigma^2$$
guarantees that $r$ never hits zero. If it's violated, $r$ can touch zero but is instantly reflected away.
A non-central chi-squared distribution. Skewed, with a long right tail — capturing the empirical observation that rate moves are bigger when rates are higher.
Like Vasicek, CIR is affine: $V(r, t; T) = A(t, T) e^{-B(t, T) r}$, with different $A$ and $B$. Closed-form bond options exist, though the expressions get messy.
| Property | Vasicek | CIR |
|---|---|---|
| SDE | $dr = (a-br)\,dt + \sigma\,dW$ | $dr = (a-br)\,dt + \sigma \sqrt{r}\,dW$ |
| Can $r$ be negative? | Yes | No (with Feller) |
| Distribution of $r_T$ | Gaussian | Non-central $\chi^2$ |
| Vol scales with rate? | No | Yes |
| Affine? | Yes | Yes |
Vasicek and CIR have a small number of parameters; they can't possibly reproduce an arbitrary observed yield curve. The fix: make the drift time-dependent.
The simplest possible no-arbitrage model:
$$dr = \theta(t)\, dt + \sigma\, dW.$$
$\theta(t)$ is chosen so that the model exactly reproduces today's bond curve. Constant volatility, no mean reversion — $r$ wanders freely.
Vasicek with a time-dependent drift target:
$$dr = (\theta(t) - br)\, dt + \sigma\, dW.$$
Same affine structure as Vasicek; $\theta(t)$ is fitted to today's curve, while $b$ and $\sigma$ control the volatility structure.
For Hull–White there's a closed form for $\theta(t)$ in terms of the instantaneous forward rate $f(0, t)$ today:
$$\theta(t) = \frac{\partial f(0, t)}{\partial t} + b\, f(0, t) + \frac{\sigma^2}{2b}(1 - e^{-2bt}).$$
Plug in and the model prices every traded bond exactly. It then has only two free parameters ($b$, $\sigma$), which are calibrated to traded options — caps, swaptions — not to the curve itself.
You pick up curve-fitting at the cost of giving up parameter stability over time: today's $\theta(t)$ won't be tomorrow's. Anything you derive about how the curve moves — e.g. forward-rate dynamics — depends on the entire function $\theta$, not just a number.
This isn't unique to rates — volatility models that fit the surface (Dupire local vol, SLV) have the same problem — but it's most acute in interest rates because the curve has thirty-plus tenors and traders look at every one.
Fit the model to a smooth interpolation of the curve rather than every market quote, and let small bid–ask mismatches go. Some shops re-calibrate $\theta(t)$ daily; others keep it weekly and report the small mispricings as a "model adjustment."
Short-rate models price through the short rate — bond prices fall out. HJM goes the other way: model the forward rates $f(t, T)$ directly:
$$df(t, T) = \mu(t, T)\, dt + \sigma(t, T)\, dW.$$
If $\sigma(t, T)$ is your choice (free), then $\mu(t, T)$ is not free — it's pinned down by the requirement that bond prices remain arbitrage-free:
$$\mu(t, T) = \sigma(t, T) \int_t^T \sigma(t, s)\, ds.$$
Drift is the integral of vol against vol. The famous HJM result.
HJM is the right framework conceptually but it has a sting: forward rates are non-Markov in general, so you can't always reduce the price to a PDE in finitely many variables. In practice, special $\sigma$ choices (separable, Markovian) are picked so that the model becomes computationally tractable.
HJM tells you that once you've picked the volatility structure of the forwards, the no-arbitrage drift is no longer your decision. This is the rates analogue of the BS result that picking $\sigma$ pins down option prices.
HJM models the instantaneous forward rate — a continuum. The market trades discrete forward LIBOR/SOFR rates, indexed by maturity dates $T_0 < T_1 < \cdots < T_n$. The BGM (Brace–Gatarek–Musiela) or LIBOR market model takes those market quantities as the primitives:
$$dL_i(t) = \mu_i(t)\, L_i(t)\, dt + \sigma_i(t)\, L_i(t)\, dW_i,$$
i.e. each forward LIBOR is log-normal under its own appropriate forward measure.
BGM has been the workhorse of fixed-income derivatives desks since the late 1990s. Recent decades have added stochastic volatility (SABR-LMM) on top to fit the caps and swaptions smile as well as the at-the-money rates.
With LIBOR retired in 2023, the same machinery is now applied to forward SOFR / SONIA / €STR rates. The mathematics is unchanged — the day-count conventions and the fixing mechanics differ.
Pick a model (Vasicek / CIR / Ho–Lee), pick $r_0$, the mean-reversion speed $b$, the long-run-mean parameter $a$, the volatility $\sigma$, the horizon $T$ and the number of paths $N$. The widget simulates a bundle of short-rate paths, plots them with the running mean across paths, and draws a histogram of $r_T$ on the right.
Notice how Vasicek lets the paths cross zero whenever $r_0$, $a/b$ or $\sigma$ pulls them down, how CIR pins them at zero from below, and how Ho–Lee — with no mean reversion — lets the paths fan out unboundedly.