Hull–White Interest Rate Trees

Numerical construction of the trinomial tree for the Hull-White model

This will be focused on numerical methods, next week we will have more examples.

What is the difference between interest rate risk and stock price risk?

One of the most important differences is that the discount rate will vary from node to node. We will look at an example:

We’ll assume that the payoff of a derivative is 100(𝑟−0.11)+

We also know the probability of going up, staying and going down as 0.25, 0.5, 0.25

Hand-drawn Hull-White trinomial tree from the source notes.
Figure 1: Hand-drawn Hull-White trinomial tree from the source notes.

Hull-White uses an alternative branching process. There is the typical (up med down) then (UP up med), (med down DOWN).

𝑑𝑟=[𝜃(𝑡)−𝑎𝑟]𝑑𝑡+𝜎𝑑𝑧

So what is the procedure?

First we have to assume 𝜃(𝑡)=0

And the start is 𝑟(0)=0

The construction of this trinomial tree should match the expectation and variance of the process? Basically we run the simulation based on the parameters.

Then we determine 𝜃(𝑡) so it matches the initial term structure.

Let’s look at the stages:

Handwritten tree-construction steps from the Week 6 source notes.
Figure 2: Handwritten tree-construction steps from the Week 6 source notes.

Then we set Δ𝑅=𝜎3Δ𝑡

This particular equality is chosen for numerical convergence.

We need to determine which branching method applies at each node: (regular, up, down).

Let each node be (𝑖,𝑗) where 𝑡=𝑖⋅Δ𝑡 and 𝑅∗=𝑗Δ𝑅

So this is the position in the state space.

As for indices,

i is related to time, it is positive. j can be positive or negative because Hull-White allows negative interest rates.

switching the branching scheme is dependent on the index j

when a > 0

switch from branching regular to down for sufficiently large positive j.

switch from branching regular to up for sufficiently large negative j.

Let 𝑗max and 𝑗minfor the value where you switch

Hull and White (posted on Canvas) show that the probabilities are always positive if 𝑗max is equal to the smallest integer > 0.184𝑎Δ𝑡

𝑗min=−𝑗max

The point where we change branching is both dependent on the speed of mean reversion and the length of the time step.

Therefore we can say that the probabilities 𝑝𝑢, 𝑝𝑚, and 𝑝𝑑 are chosen to match expected change and variance of change in R*. We will solve for these unknowns with equations. What are those equations?

That depends on the branching strategy:

regular:

𝑝𝑢Δ𝑅−𝑝𝑑Δ𝑅=−𝑎𝑗Δ𝑅Δ𝑡𝑝𝑢Δ𝑅2+𝑝𝑑Δ𝑅2=𝜎2Δ𝑡+𝑎2𝑗2𝑝𝑢+𝑝𝑚+𝑝𝑑>1

So this is your system of equations.

And by setting Δ𝑅=𝜎3Δ𝑡, our system becomes

𝑝𝑢=16+12(𝑎2𝑗2Δ𝑡2−𝑎𝑗Δ𝑡)𝑝𝑚=23−𝑎2𝑗2Δ𝑡2𝑝𝑑=16+12(𝑎2𝑗2Δ𝑡2+𝑎𝑗Δ𝑡)

Note that these are all dependent on index j. We will look at an example of this.

Similarly, for up

𝑝𝑢=16+12(𝑎2𝑗2Δ𝑡2+𝑎𝑗Δ𝑡)

… I didn’t write them down in time.

And for down

𝑝𝑢=76+12(𝑎2𝑗2Δ𝑡2−3𝑎𝑗Δ𝑡)𝑝𝑚=−13−𝑎2𝑗2Δ𝑡2+2𝑎𝑗Δ𝑡𝑝𝑑=16+12(𝑎2𝑗2Δ𝑡2−𝑎𝑗Δ𝑡)

Let’s take values of a zero curve

0.5

1

1.5

2

2.5

3

3.43

3.824

4.183

4.512

4.812

5.086

Building the first tree, we set our vertical spacing to the special numerical value 𝜎3Δ𝑡

Then what is the value of j in our example?

𝜎=0.01

Then after we construct the tree, we have to displace the nodes to match the original term structure.

STEP 2

Convert this R* tree into a tree for R, where we displace the nodes so that we match the initial term structure.

Our displacement function is

𝛼(𝑡)=𝑅(𝑡)−𝑅∗(𝑡)

These can be calculated from the 𝜃(𝑡) expression. Recall that

𝜃(𝑡)=𝐹𝑡(0,𝑡)+𝑎𝐹(0,𝑡)+𝜎22𝑎(1−𝑒−2𝑎𝑡)

Note

𝑑𝑅=[𝜃(𝑡)−𝑎𝑅]𝑑𝑡+𝜎𝑑𝑊𝑑𝑅∗=−𝑎𝑅∗𝑑𝑡+𝜎𝑑𝑊

So therefore if we substitute in,

𝑑𝛼=[𝜃(𝑡)−𝑎𝛼(𝑡)]𝑑𝑡

Then we can rearrange and integrate to get

𝛼(𝑡)=𝐹(0,𝑡)+𝜎22𝑎2(1−𝑒−𝑎𝑡)2

for infinitesimally small values.

So this is kind of a continuous function. In this case, we need finite Δt to match the term structure exactly. So it’s a little more simple

We define 𝛼𝑖, which corresponds to each time step on the tree,

𝛼(𝑖Δ𝑡)=𝑅(𝑖Δ𝑡)−𝑅∗(𝑖Δ𝑡)

Here we’re interested in the discrete points on the tree.

Then the overall procedure here is that we are given some rates on the zero curve, but you can have multiple rates on the time step. So you have to price, and look at the value given by the market, and the value given by the tree.

Then we can define the present value of the security 𝑄𝑖,𝑗 that pays $1 if node (i, j) is reached and $0 otherwise, so we can add up the probabilities and discount them. And we can calibrate α and Q to match the initial term structure.

So how do we start?

At 0, by definition, we pay $1

𝑄0,0=1

And the displacement of the initial node is chosen to give the right price for a ZCB maturing at Δt. Since our zero rate is 3.824 for a one-year rate, we can set α_0 to be that. In an exercise, if you were to take Δ to be 0.5 it would be that rate.

And then 𝛼1 should be chosen in such a way to be a ZCB that matures in two years.

Then next we calculate 𝑄1,1,𝑄1,0,𝑄1,−1. i.e., at time i=1, there are three possibilities for j.

We use the probabilities, for 𝑄1,1 it’s 0.1667. And then the discount factor is the value of R, in this case 3.824%.

we get the three values 0.1604, 0.6417, and 0.1604. And then we can use it to calculate 𝛼1 which is chosen to match the right price of a ZCB maturing at 2Δt.

We have the rate from the market, so we can price the bond with that rate. Such bond at 2Δt, you will discount with the rate applicable per branch, which is 1.732%. What we will see in this displaced tree, will be this original value 1.732% discounted.

𝑒−(𝛼1+0.01732)×1

Then for node C, the rate 0 will be ignored so we just use α_1

Then having the price of the bond at nodes B, C, and D, we can calculate the price of the node.

𝐴=𝑄1,1𝑒−(𝛼1+0.01732)+𝑄1,0𝑒−𝛼1+…

From the initial term structure, we can get the ZCB for two years as the “market price” = 0.9137.

And then we substitute in the Q values to get the total formula for the adjustment 𝛼1

ln[𝑄1,1𝑒𝑅1,1+𝑄1,0+…P(0, 2)]

The formal approach is to propagate state prices one time step at a time. If 𝑄𝑖,𝑗 is the present value of receiving 1 at node (𝑖,𝑗), then the next layer’s state price is the sum of discounted contributions from every node that can reach it:

𝑄𝑖+1,𝑘=∑𝑗∈𝑃𝑖+1,𝑘𝑄𝑖,𝑗𝑝𝑖,𝑗,𝑘𝑒−𝑅𝑖,𝑗Δ𝑡,

where 𝑃𝑖+1,𝑘 is the set of predecessor nodes and 𝑝𝑖,𝑗,𝑘 is the probability of moving from (𝑖,𝑗) to (𝑖+1,𝑘). At each step, choose the displacement 𝛼𝑖 so the tree’s zero-coupon price matches the observed discount factor:

𝑃(0,(𝑖+1)Δ𝑡)=∑𝑘𝑄𝑖+1,𝑘.

Starting from 𝑄0,0=1, this gives the iterative procedure: calibrate 𝛼𝑖, propagate the state prices with the transition probabilities, and repeat for the next time step.

Recombining binomial tree