Post

Pricing IR Derivatives in the Hull White Framework

This is a follow up post on the mathematical details of the Hull-White (HW) model introduced in some detail in a previous post. The main purpose here is provide details on pricing of fundamental IR derivative contracts within the Hull White framework.

Pricing IR Derivatives in the Hull White Framework

Caps and Floors


The simplest derivative products that are based on interest rates are caps and floors. At heart, a cap is an insurance against rising interest rates. To see why it has to be built the way it is, it helps to first look at what it’s insuring.

Take a company that has borrowed money at a floating rate for five years, paid quarterly. It doesn’t agree on a single interest rate for the whole five years. Instead, at the start of each three-month period, the reference floating rate (say, 3-month Libor) is observed — this observation is called the fixing, or sometimes the reset, and the date it happens on is the fixing date. Whatever level the rate fixes at that day becomes the rate charged for that one quarter; the resulting interest is then paid at the end of the quarter, and the whole process repeats for the next quarter, and the next, twenty times over five years. So a floating-rate loan doesn’t carry one interest-rate risk — it carries twenty small, separate ones, each tied to its own fixing date.

That’s the reason a cap doesn’t have a single expiry date the way an ordinary option does. The borrower’s pain from rising rates doesn’t arrive once, at the end of the loan — it arrives fresh every quarter, whenever that quarter’s fixing comes in high. So the insurance has to pay out fresh every quarter too. A cap is therefore built, by construction, as one small option per fixing date: each one insures exactly one quarter’s interest cost against exceeding a chosen strike $K$, and is settled and forgotten before the next one’s fixing even happens. What people casually call “a 5-year cap” is just this whole bundle, named after the date its last piece expires — not a single contract with one payoff.

Each of these single-period pieces is called a caplet. If you’ve borrowed at a floating Libor rate and want to keep your interest cost from exceeding, say, 4%, you buy a cap struck at 4%, which is really twenty caplets struck at 4%, one per quarter. In any given quarter, if that quarter’s fixing comes in above the strike, its caplet pays you the difference; if it comes in below, that caplet pays nothing, and the next quarter starts fresh. A floor is the mirror image, built the same way out of floorlets, bought by a floating-rate lender who wants a guaranteed minimum yield: each floorlet pays out when its quarter’s fixing falls below the strike.

This independence is what makes the pricing problem tractable: since each caplet settles on its own, with no dependence on what any other caplet in the strip does, the value of the whole cap is just a sum of the individual caplet values over the schedule.

\[\textrm{Cap}(K) = \sum_{i} \textrm{Caplet}(K,T_{i-1},T_i),\quad\quad\quad \textrm{Floor}(K) = \sum_{i} \textrm{Floorlet}(K,T_{i-1},T_i).\]

So the entire problem of pricing a cap/floor reduces to a single question: how do we price one caplet on one reset, in closed form, within the Hull-White model?

The caplet payoff


In what follows we will restrict our discussion to caplets. An analog discussion can be carried for floorlets. Consider a single caplet with strike $K$, fixing date $T_F$ and payment date $T_P$, covering an accrual period of length $\delta = \delta(T_F,T_P)$ (for example $\delta = 0.25$ for a 3-month period, using the appropriate day-count convention). At time $T_F$ the Libor rate $L(T_F,T_P)$ for that period is observed, and at time $T_P$ the caplet pays

\(\Pi_{\textrm{caplet}}(T_P) = \delta \left(L(T_F,T_P)-K\right)^{+},\) where $(X)^{+} \equiv \max(X,0)$. Notice that the pay-off just looks like a simple call option on an interest rate (actually forward rate as seen from today $t < T_F < T_P$). We can describe it (see previous post) in terms of bond prices (discount factor) which is a central product of any interest rate model. Considering a unit amount of notional invested at time $T_F$ for an accrual time of $\delta$ with an interest $L(T_F,T_P)$ yields to $1 + \delta L$. Of course, by no-arbitrage this amount should be equivalent to the reciprocal of the discount factor between $T_F$ and $T_P$:

\[\begin{equation} \label{caplet-payoff} 1 + \delta L(T_F,T_P) = \frac{1}{P(T_F, T_P)},\quad\quad \Pi_{\textrm{caplet}}(T_P) = \left(\frac{1}{P(T_F,T_P)} - (1 + K \delta) \right)^{+}. \end{equation}\]

Notice that at $T_F$ the price of the bond $P(T_F,T_P)$ (and so as $L(T_F,T_P)$) is already known and revealed so in principle we do not have to wait until $T_P$ to get the caplet’s payoff. We can use this fact to bring to cashflow of the caplet’s payment to $T_F$. Notice that in this way the fixing date of the rate and payment date of the caplet aligns:

\[\Pi_{\textrm{caplet}}(T_F) = P(T_F,T_P)\, \delta\, \left(L(T_F,T_P)-K\right)^{+} = (1 + K \delta) \left(\frac{1}{1 + K \delta} - P(T_F,T_P)\right)^{+}.\]

Now, as a contingent claim settled at $T_F$, caplet is worth exactly $(1 + K \delta)$ units of a put option on the zero-coupon bond $P(T_F,T_P)$ struck at $X = 1/(1 + K \delta)$ and exercised at $T_F$. Denoting the put option on zero-coupon bond with $\textrm{ZBP}$, - a claim that pays $(X - P(T_F,T_P))^{+}$ at $T_F$ - everything so far has been a payoff replication: for every possible state of the world, the caplet’s $T_P$-payoff and $(1+K\delta)$ units of the ZBP’s $T_F$-payoff are the same claim, just relabelled to a different payment date.

Note that a zero-coupon bond put option is not something you will find on a trading screen; it is a mathematical stepping stone that will aid us to derive the price of a caplet. The key idea for pricing the latter in terms of the former comes from the no-arbitrage principle (formalized by the Fundamental Theorem of Asset Pricing): if two claims replicate each other exactly in every possible future state, then they must have the same value at any time prior to maturity. Otherwise, an arbitrage opportunity would exist.

Pricing the ZBP with Black’s Formula and the Caplet Price


Now we need to figure the today’s value for a contingent claim that pays $\max(X - P(T_F,T_P))$ at time $T_F$. To liberate the discount factor from the expectation, we work in the $T_F$ forward measure to simplify the price formula for ZBP as

\[\begin{equation} \label{ZBPpd}\textrm{ZBP}(T_F,T_P,X) = P(0,T_F)\, \mathbb{E}_{\mathbb{Q}_{T_F}} \left[\left(X - P(T_F,T_P)\right)^{+}\right]. \end{equation}\]

Note that the bond price in the expression above can be written as a bond (price) ratio,

\[P(T_F,T_P) = \frac{P(t,T_P)}{P(t,T_F)} \equiv R(t),\]

which can be shown to satisfy the following SDE (see e.g our discussion here) in the $T_F$ forward measure

\[\frac{\mathcal{d}R(t)}{R(t)} = - \sigma_R(t) \mathrm{d}W_{t}^{\mathbb{Q}_{T_F}}, \quad\quad \sigma_R(t) = \sigma(t)\left(B(t,T_P) - B(t,T_F)\right),\]

where $\sigma(t)$ is the time dependent volatility parameter in the HW framework, $B(t,T) = E(t)\int_{t}^T \mathrm{d}s/E(s)$ and $E(t) = \exp[\int_0^t a(s)\mathrm{d}s]$ with $a(t)$ as the time dependent mean reversion rate of the HW model. The key point here is that the bond ratio we are interested in is log-normally distributed at $T_F$, which can be seen easily integrating the SDE above:

\[\ln\left(\frac{R(T_F)}{R(0)}\right) \sim \mathcal{N}\left(-\frac{1}{2}V_p, V_p\right),\]

where we defined the integrated variance as

\[V_p(0,T_F,T_P) = \int_0^{T_F} \sigma_R^2(u) \mathrm{d}u = \int_0^{T_F} \sigma^2(u)\left(B(u,T_P) - B(u,T_F)\right)^2\, \mathrm{d}u.\]

In light of the discussion above we write the pricing formula for ZBP in eq. \eqref{ZBPpd} as

\[\begin{align} \nonumber \textrm{ZBP}(T_F,T_P,X) &= P(0,T_F) \int_{-\infty}^{\infty} \left(X - R(0) \mathrm{e}^{-V_p/2 + \sqrt{V_p} z }\right)^{+} \frac{e^{-z^2/2}}{\sqrt{2\pi}} \mathrm{d}z,\\ \label{ZBPp}&= P(0,T_F)\, X\,\mathcal{N}(d_+) - P(0,T_F)\,R(0)\,\mathrm{e}^{-V_p/2} \int_{-\infty}^{d_+} \mathrm{e}^{\sqrt{V_p} z} \frac{e^{-z^2/2}}{\sqrt{2\pi}} \mathrm{d}z, \end{align}\]

where we defined

\[d_+ = \frac{\ln(X/R(0)) + V_p/2}{\sqrt{V_p}} = \frac{\ln(X P(0,T_F)/P(0,T_P)) + V_p/2}{\sqrt{V_p}},\quad R(0) = \frac{P(0,T_P)}{P(0,T_F)}.\]

Completing the exponent of the integrand to square and shifting the integration variable in eq. \eqref{ZBPp}, we obtain the Black’s formula for ZBP price as

\[\textrm{ZBP}(T_F,T_P,X) = P(0,T_F)\, X\,\mathcal{N}(d_+) - P(0,T_P)\,\mathcal{N}(d_{-}), \quad\quad d_{-} = d_{+} - \sqrt{V_p}.\]

Finally, following the replication arguments we discussed in detail above, the Caplet’s price today can thus be written as

\[\boxed{ \begin{align} \nonumber \textrm{Caplet}(K,T_F,T_P) &= (1 + K \delta)\,\,\textrm{ZBP}\left(T_F,T_P,\frac{1}{1+K\delta}\right),\\ \nonumber \textrm{ZBP}(T_F,T_P,X) &= P(0,T_F) X\,\mathcal{N}(d_+) - P(0,T_P) \mathcal{N}(d_{-}),\\ d_{\pm} &= \frac{\ln\left(\frac{X P(0,T_F)}{P(0,T_P)}\right) \pm \frac{1}{2}V_p(0,T_F,T_P)}{\sqrt{V_p(0,T_F,T_P)}}. \end{align}}\]

Pricing (European) Swaptions under Hull-White framework

A swaption gives the holder the right to enter into a swap contract at a future date. There are two types of swaption: payer/receiver. A payer swaption gives the holder the right, at $T_0$, to enter a swap paying fixed $K$ interest and receiving floating rate on a notional amount with cashflow dates $T_1,\dots,T_n$ with $T_n = T_P$ as the swap tenor/maturity. The fixed rate of the underlying swap determines the strike price of the swaption. To brush up some

A receiver swaption is the mirror image: the right, at $T_0$, to enter the opposite swap instead — receiving fixed $K$ and paying floating. Where a payer swaption is insurance against rates rising by $T_0$ (exercised when the fixed rate you’d have to pay in the market has climbed above your locked-in $K$), a receiver swaption is insurance against rates falling (exercised when the fixed rate you’d receive in the market has dropped below $K$). This mirrors exactly the cap/floor distinction above: a payer swaption behaves like a single, larger-scale caplet-type bet on rising rates, a receiver swaption like a floorlet-type bet on falling rates — except the “rate” being bet on here is a whole swap rate rather than a single Libor reset.

Whether the holder exercises depends on the value, at the exercise/maturity date $T_0$ (of swaption), of the underlying swap itself: a payer swaption pays off exactly when that swap — paying $K$, receiving floating — would be worth entering, i.e. whenever its value to the fixed-rate payer is positive; a receiver swaption pays off under the opposite condition. This gives us the following payoff for a payer swaption,

\[\begin{equation} \label{swptpayoff}V_{\textrm{swpt}}(T_0) = \textrm{max}\left(V_{\textrm{swap}}(T_0), 0\right). \end{equation}\]

Anyone with a simple finance knowledge might be tempted to think the value of the swap that appear in this expression is zero, as a fair swap should have. Note however that the “zero value at inception” rule is about a freshly negotiated swap: two parties sitting down together to choose the fair fixed rate $K$ such that neither side pays anything upfront. A swaption’s underlying swap is a different animal because its fixed rate $K$ was fixed back when the swaption itself was written, and it stays locked for the life span of this option. By the time $T_0$ arrives and the holder actually considers entering the swap, the market has moved: the fair zero-value fixed rate for a freshly negotiated swap starting at $T_0$ is now whatever the par rate happens to be - almost certainly not $K$ anymore. Setting this discussion aside, the swaption payoff in eq. \eqref{swptpayoff} prompts us to recall the swap value from first principles, which is what we turn next closely following the discussion here.


Digression: Swap valuation. An IR swap is simply a financial product in which two parties exchange interest payments on a notional amount at scheduled intervals. One party pats a fixed rate, determined at the onset of the contract while the other pays a floating rate that resets periodically based on a reference rate (e.g SOFR or LIBOR). Note that the notional is never exchanged and only the net interest difference is settled at each payment date. Now suppose that we have fixed payment/cashflow dates we mentioned above.

The fixed leg of the swap contract then involves making payments at times $T_{i}$ ($i = 1, 2 \dots n$) for an amount of $K \delta(T_{i-1},T_{i})$ where $K$ is the agreed swap rate. The present value of these cashflows can then be written in terms of a series of discount factors (zero-coupon bonds) $P(t_0, T_{i})$:

\[V_{\rm swap, \rm fixed}(t_0) = K \sum_{i = 1}^{n}\, \delta(T_{i-1},T_{i}) P(t_0,T_{i}),\]

where $t_0$ denotes a reference time we want to evaluate the contract. Note that for the party making the fixed payments, the swap is said to be a payer swap. Conversely, a party receiving the fixed payments is in a receiver swap.

The floating leg of the swap consists of payments made at time $T_{i}$ ($i = 1, 2 \dots n$) for the interest accrued from $T_{i-1}$ to $T_{i}$, based on the spot rate observed at $T_{i-1}$. This is why the floating rate is sometimes referred as “resetting”. Although the floating rate isn’t known in advance at the time of the swap agreement, the expected value under no-arbitrage equals to the forward rate $L(t_0;T_{i-1},T_i)$ for each reset period. Therefore, the present value of the all cashflows in the floating rate can be written as

\[\begin{align} \nonumber V_{\rm swap, \rm float}(t_0) &= \sum_{i = 1}^{n}\, L(t_0;T_{i-1},T_i) \delta(T_{i-1},T_i) P(t_0,T_{i}),\\ \nonumber &= \sum_{i = 1}^{n} \frac{1}{\delta(T_{i-1},T_i)}\left(\frac{P(t_0,T_{i-1})}{P(t_0,T_{i})} - 1\right) \delta(T_{i-1},T_i) P(t_0,T_{i}),\\ \nonumber &= \sum_{i = 1}^{n} P(t_0,T_{i-1}) - P(t_0,T_{i}),\\ &= P(t_0,T_{0}) - P(t_0,T_{n}), \end{align}\]

where in the last step we carried the telescopic sum explicitly. Since fixed and floating legs represents opposing cashflows during the lifetime of the swap, its value at any instance can be described by the difference between the values of the fixed and floating leg:

\[V_{\rm swap}(t_0) = \nonumber V_{\rm swap, \rm float}(t_0) - V_{\rm swap, \rm fixed}(t_0) = P(t_0,T_{0}) - P(t_0,T_{n}) - K \sum_{i = 1}^{n}\, \delta(T_{i-1},T_{i}) P(t_0,T_{i}).\]

For an isolated swap contract, the first reset day is typically aligns with the onset, $t_0 = T_0$, such that the first term above equals to unity.


When pricing a swaption, we are instead interested in the value of a swap contract at the exercise date $T_0$ of the swaption, which also aligns with the first reset date $T_0$ of the underlying swap. For the swaption price \eqref{swptpayoff}, we therefore have

\[V_{\textrm{swpt}}(T_0) = \left(1 - P(T_0,T_{n}) - K \sum_{i = 1}^{n}\, \delta(T_{i-1},T_{i}) P(T_0,T_{i})\right)^{+} = \left(1 - \sum_{i = 1}^{n}\, c_i P(T_0,T_{i})\right)^{+},\]

where we defined $c_i = K \delta(T_{i-1},T_i) > 0$ for $i < n$ and $c_n = 1 + K \delta(T_{n-1},T_n) > 0$. Notice that this payoff isn’t a function of one bond like the caplet was –it’s a function of $n$ different bond prices at once, resembling the pay-off of basket option. This generates extra layer of difficulty in pricing swaptions as compared to caplets which we will try to overcome by the insight provided by Farshid Jamshidian.

First notice that, all the bond prices that appear in the payoff are monotonically decreasing (positive) function of a single state variable $r(T_0)$:

\[P(T_0,T_i;r) = \mathrm{e}^{A(T_0,T_i) - B(T_0,T_i)r(T_0)}\]

so that there exist a unique $r_\star$ at which the positive weighted combination of these prices satisfy

\[\sum_{i = 1}^{n}\, c_i P(T_0,T_{i};r_\star) = \sum_{i = 1}^{n} c_i X_i(r_\star) = 1,\quad\quad X_i(r_\star) \equiv P(T_0,T_{i};r_\star).\]

This allows us to re-write the payoff

\[\begin{equation} \label{swptpoff}V_{\textrm{swpt}}(T_0) = \left(\sum_{i = 1}^{n}\, c_i \left(X_i(r_\star) - P(T_0,T_{i};r)\right)\right)^{+}. \end{equation}\]

Now the fact that every single term inside the sum flips sign depending on the state of the world, we can change the order of the summation and the max function because each weight is also strictly positive $c_i > 0$ for every $i$. For example, for $r<r_{\star}$ the sum will evaluate to a strictly negative value which will be floored to 0 by the max function. This would be equivalent to first taking the individual max functions for each term, i.e $(X_i(r_{\star}) - P(r))^{+}$ and summing then after. The same applies to $r>r_{\star}$ for which every term inside the sum \eqref{swptpoff} is positive and the max function will return this positive number. The same result could be obtained of course by first taking the max of individual and then summation. This is Jamshidian trick that turns maximum of the sum in \eqref{swptpoff} to the sum of individual max functions:

\[\begin{equation} V_{\textrm{swpt}}(T_0) = \sum_{i = 1}^{n}\, c_i \bigg(X_i(r_*) - P(T_0,T_{i};r)\bigg)^{+}. \end{equation}\]

This tells us that the swaption payoff can be replicated by a series of zero bond put options (ZBP) and by the law of one price so does its value any time prior to its exercise:

\[\boxed{ \begin{align} \nonumber V_{\textrm{swpt}}(K,T_0,T_P) &= \sum_{i = 1}^n c_i\, \textrm{ZBP}(T_0,T_i,X_i),\\ \nonumber c_i & = K \delta\left(T_{i-1}, T_i\right), \quad\quad\quad i < n,\\ \nonumber c_n &= 1+K \delta\left(T_{n-1}, T_n\right), \quad\quad i = n,\\ \nonumber X_i &=\exp \left(A\left(T_0, T_i\right)-B\left(T_0, T_i\right) r^*\right). \end{align} }\]

References


1. “Calibration methods of Hull-White Model”, Risk Management Department, Mizuho Securities. Sebastien Gurrieri, Masaki Nakabayashi and Tony Wong

This post is licensed under CC BY 4.0 by the author.