Hull-White Model
Contents
-
Hull-White Model
-
Hull-White Tree
-
Example: Hull-White Tree Calibration
-
Appendix: Interest Rate Derivative PDE
Hull-White Model
This section is adapted from Brigo and Mercurio (2006). As an extension of the Vasicek model, Hull-White model assumes that the short rate follows the mean-reverting SDE:
![]()
where
and
are
positive constants; and
is time-dependent
function that will be used to fit the current zero curve.
To solve this SDE, first apply Ito lemma to ![]()
![]()
Then integrate both sides over [s,t],
![]()
![]()
In order to fit the term structure of interest rates, the
time-dependent
must satisfy
![]()
where
is the market observed
instantaneous forward rate at time 0 for the maturity T.
Then
can be re-written
as
![]()
where
![]()
Therefore,
conditional on
is normally distributed
with mean and variance given respectively by
![]()
![]()
HW model is an affine term structure model where the continuously-compounded spot rate is an affine function in the short rate, i.e.,
![]()
The zero coupon bond price is given by
![]()
where
![]()
![]()
We can also find the close-form formulas for zero-coupon bond options, caps/floors, and swaptions. See Brigo and Mercurio (2006) for detail.
Hull-White Trinomial Tree
To construct HW tree, it is helpful to decompose the short rate into the following format:
![]()
Where
|
|
|
(1) |
|
|
|
(2) |
|
|
|
(3) |
With this decomposition in hand, the tree construction task
can be achieved in two steps. In the first step one constructs the trinomial
tree for
. Then in the second step,
one shifts the tree by
to bring it in
line with the initial term structure.
Step One: Construct the Symmetric Trinomial Tree
From equations (2) and (3), it is known that
![]()
![]()
Denote the tree nodes by
where the time index i
ranges from 0 to N and the space index j ranges from some
to some
. Using the results in A.F
(Brigo and Mercurio 2006), we have
|
|
|
(4) |
where
.
Now, given the node
, we need to locate its
subsequent nodes
and
with the respective
transition probabilities
. This is done as follows.
First find the space in the y direction as
|
|
|
(5) |
Then locate the level k by
|
|
|
(6) |
where round(x) function indicates the closest integer to the real number x. We then set
|
|
|
(7) |
At last the transition probabilities are chosen in a way to match the conditional mean and variance,
|
|
|
(8) |
where
|
|
|
(9) |
Step Two: Displace the Tree
The second step consists of displacing the tree nodes to obtain the corresponding tree for r. An easy way to do so is through equation (1), as in class HullWhite::FittingParameter, where the instantaneous forward rate is approximated by
![]()
This approach has to approximate continuously-compounded rate
with short rate r(0),
therefore doesn’t fit exactly the zero curve.
The other way uses helps from Arrow-Debrew prices. Denote
be the displacement at time
, and
be the Arrow-Debrew price
of node
. A state price security
or an Arrow-Debreu security is defined as a contract which pays off $1 in a
particular state at a particular time and pays zero in all other states. Its
price (net present value) is referred to as
Arrow-Debreu price.
The values of
and
are calculated recursively
as follows.
1. Initialize
![]()
2. Find
![]()
3.
With
in hand, calculate
![]()
where
is
the probability of moving from node
to node
.
4.
With
in hand, find
by solving

that leads to

5.
Loop step 3 and 4 to discover
and
for further steps (i++).
6. Short rate on each node
![]()
Example: Hull-White Calibration
This section illustrates the Hull-White model calibration process with a real example. It calibrates the Hull-White tree to the LIBOR market on Monday, May 16, 2011. The settlement date is Wednesday, May 18, 2011.
Hull-White model has three parameters:
,
, and
.
In this example, the first two will be calibrated to LIBOR swaptions; and the
third one will be calibrated to LIBOR spot curve. To begin with,
and
are initialized as
![]()
Another input is LIBOR spot curve, which is given by

The rates are continuously compounded. Conventions are Act/360 and Modified Following.
The calibration process is carried out in four steps:
Step 1.
construct trinomial tree for process
;
Step 2.
displace
to obtain the tree for
;
Step 3. price swaptions on this tree;
Step 4. calibrate the tree to swaptions market.
Step One: Construct Trinomial Tree for Process x(t)
The outcome of this step is shown in the following figure.
This trinomial tree of
is symmetric.
Figure 1 – Trinomial Tree of x(t)

Now let’s walk through the steps to create this figure.
1.
From equation (2),
, or node (0,0) is 0.
2. Consider node (0,0). From equation (4)
![]()
![]()
3. Go through equations (3) – (5) to locate its descendants: nodes (1,-1), (1,0) and (1,1).
![]()
![]()
![]()
![]()
![]()
4.
Using (8) and (9) to get transition probabilities from
to its descendants.
![]()
![]()
![]()
![]()
By now node (0,0) is finished.
5. Now consider node (1,-1). Follow step 2 to 4,
![]()
![]()
and
![]()
![]()
![]()
![]()
![]()
as well as
![]()
![]()
![]()
![]()
6. Process similarly node (1,0) and node (1,1), then move on to the next tenor (6m). Then the figure will be created.
When the volatility is time-dependent, this trinomial tree is recombining.
Step Two: Displace x(t) to Obtain the Tree for r(t)
We can iteratively find state prices and
,
then shift the symmetric tree from step one by
to
obtain the Hull-White tree. This has been explained in Section 2. Let’s follow
the procedure introduced in that section.
1. Initialize
![]()
2. Find displacement
![]()
3. Move on to time step 1, compute the state prices for the three nodes:
![]()
![]()
![]()
4. The displacement for time step 2
![]()
5. Move on to time step 2, compute the state prices for the five nodes. For example, for the middle node (2,0), it has three incoming nodes: (1,-1), (1,0), and (1,1), then
![]()
![]()
![]()
![]()
6. Given the five state prices on time step 2, the displacement of this time step is
![]()
The results are shown in the following table.

By displacing the symmetric trinomial tree in step one with
corresponding
, the Hull-White tree is constructed as in the
following figure.

Note that the rates on node (1,-1) and node (2,-2) are negative. Hull White model can produce negative rates due to normal distribution.
Step Three: Price Swaptions on the Tree
Before we can proceed to swaption pricing, it needs to point
out the way in calculating the discounting factor
D(t,T) on the short rate tree. To calculate the discount factor, for
example
, we need to retrieve the
rate at the beginning of the period, in this case 0.0026 on time
. This contrasts with the
general case when the term structure curve is used, where we usually retrieve
the rate from the end of the period, in this case 0.0026 on time
. This rule applies to other
time steps as well.
Now we are ready to price on this tree a 3mx6m ATM European
payer Swaption with notional $1,000 and ATM rate 0.007427. The swaption can be
exercised only on
, giving the owner the right
to enter into the long position (pay fixed) of a 3mx6m forward starting swap.
Therefore the value of this swaption on each of the three nodes on
, or nodes (1,j), j= -1, 0,
1, is simply
![]()
So it comes down to price the underlying swap, which is priced by discounting its fixed leg cash flows and floating leg cash flows respectively, via the following formula,
![]()
First consider the fixed leg. It pays on
the amount
![]()
where the year fraction
according to 30/360 day
count. The results are shown in the following table.

Now we explain how to discount one step backward, from time step 3 to from step 2. Later we will use the same logic to discount backward the floating leg.
Consider the node (2,-2) for instance. It has three
descendants: node (3,-3), (3, -2), and (3, -1). Denote
the value of node (3, j).
In this particular case
![]()
To roll one step back,
![]()
![]()
![]()
![]()
![]()
![]()
![]()
We continue to deal with other four nodes in step 2 and then move on to step 1. This leads to Table 3.
For the floating leg, we can do it similarly by first identifying the cash flows and then discounting them. An alternative and quicker way is through equivalent cash flows.
Unlike fixed leg, floating leg has tenor of 3 months (see
chapter LIBOR Rates). Therefore, it contains two cash flows. The first one
resets at time
and pays at time
; the second one resets at
time
and pays at time
.
Look at the second cash flow. On node (2,-2), the rate is fixed at
![]()
So the payment made at time
is
![]()
which is equivalent to
![]()
on time
after discounting. Thus by
starting with
via equivalent cash flows,
it saves us one step of backward induction. The results are shown in the
following table.

In Table 4, the two floating cash flows are treated independently, and then added up together. Cash flows start with equivalent cash flows. For example, second cash flow pays at time step 3. Its equivalent cash flow on node (2, -2) at time step 2 is
![]()
After figuring out the other four nodes at time step 2, they are discounted back to time step 1 via the same procedure as has been seen in the fixed leg part. Total value at time step 1 is the sum of the first and second cash flows.
Now we have treated both floating and fixed legs, it is ready to price the swap and the 3mx6m swaption. The pricing procedure is shown in the following table.

In Table 5, the fixed leg column and floating leg column are inherited from Table 3 and 4, respectively. Then a long swap position receives floating leg while pays fixed leg. The Swaption is only exercised when it is in the money, or underlying swap has positive value. The last column, NPV, is the product of the Swaption value column and state price column. Finally the NPV of swaption price is the sum of NPV column, or 0.739527.
This example is done in Excel. In comparison, the accompanying C++ code gives 0.739461.
Step Four: Calibrate the Tree to Swaptions Market
Step three calculates the 3mx6m swaption on the HW tree. It
is known as the model price, which
depends on the model parameters. In this case, it depends on the (initial) value
of
and
.
Market calibrates the Hull-White model to swaption volatility cube by minimizing
![]()
where model price
is calculated by following
step three; and
is the market price, obtained by plugging the
volatility quotes into Black model. Pay attention to whether the volatilities
are quoted as log vol or normal vol (see Chapter LIBOR Volatility).
The optimization can be achieved by iterations. In that case, a new Hull-White tree will be constructed for each iteration (when α and σ change).
Bloomberg Commands: SWPM, VCUB.
Appendix
This appendix derives PDE for Interest Rate Derivatives (IRDs) in short rate model. Let the short rate SDE be
![]()
An interest rate derivative (IRD) has payoff V at time T. Its value at time t is
![]()
Using Ito lemma
![]()
![]()
![]()
by defining
![]()
![]()
We construct a hedging portfolio with two instruments with
two different maturities,
and ![]()
![]()
![]()
In order to be risk-free
![]()
and no-arbitrage
![]()
![]()
![]()
which shows that the market price of risk is independent of maturity T
![]()
Then
![]()
Substitute it into the drift equation we obtain the PDE
![]()
A faster way to get the PDE under risk-neutral measure
uses
martingale property. Let the bank account numeraire be
![]()
We know that an instrument with payoff
,
is a martingale under
risk-neutral measure Q. Therefore,
![]()
![]()
whose drift term should be 0. It leads to,
![]()
Reference
[1] Brigo, D. and Mercurio, F (2006). Interest rate models: theory and practice: with smile, inflation, and credit. Springer Verlag.
[2] Daglish, T. Lattice methods for no-arbitrage pricing of interest rate securities. The Journal of Derivatives. 2(18), pp. 7—19, 2010.
