Interest Rate Derivatives Assignment Hull-White one

Interest Rate Derivatives Assignment
Hull-White one-factor spot rate model
This version: 16 September 2011
29. For 25. Perhaps I am not understanding correctly. The spreadsheet that you provided has got 2
sections. The first section displays the HW interest rate tree and the second one display the
probability and the bond option pricing. My question is, can I use the HW interest rate trees in the
first part directly by feeding our a and sigma to build my own backward induction algorithm, or is
the tree (in the top section) displayed dependent on the types of instrument to be priced as well?
[shp] Yes. You can use the tree for other purposes. The bond price calculated is that of a five year
coupon bond.
28. For the Couderc's swaption volatility approximation, similarly we minimize squared difference
between our model vol (calc from Couderc's formula) and the Black volatility (same market data).
[shp] Correct; again by changing ‘a’ and sigma.
27. Since swaptions are quoted ATM, is it correct to assume the forward swap rate as the strike?
[shp] Yes.
26. VOLM on Bloomberg gives us 2 kinds of volatility, Black & Normal. We are using the Black
volatility to obtain our Market swaption prices (BS swaption formula) which is minimized against
our Model swaption price (calculated via the Jamshidian's Trick).
[shp] Correct; by changing ‘a’ and sigma.
25. Given that the implementation of Hull_White trinomial tree is provided, does that mean we can
use the tree directly to price our instrument directly after calibration of a and sigma?
[shp] That code was written specifically for pricing American option on coupon bond. You will
have to make some adjustments for the other interest rate instrucments.
24. To price the floater, do we assume that the spot rate on the HW trinomial tree is the coupon rate
(before taking into account the collar/floater)?
[shp] Yes, provided that dt on tree matches your floater reset period.
23. I tried to calibrate a and sigma by running the Coudrec's matlab code to 31st Aug Swaption vol
but the program returned NaN, would you be able to provide some advice?
[shp] I suggest you stick to the code and data format as close as possible. You should also run
the code as it is i.e. with the data set provided. If that works, then the problem will be your new
input data.
22. calibration to cap vol a) we must strip the cap vol (from Bloomberg) into caplet vol, then get the
caplet price via Black's forumla which we use for calibration against HW analytical caplet price.
Is this process described correct? b) would you be able briefly describe how we should strip the
cap vol?
[shp] Try to read my chapter 8, section 8.4.1 on “volatility”. I have explained the “bootstrap”
procedures for getting caplet vol from capvol. Let me know if you still do not understand after
reading that secition.
21. When solving the Jamshidian trick, a) the coupon payments on the forward coupon bond are
determined via the forward starting swap rate (derived from the yield curve) for the same time
period; b) the option on the forward par yield coupon bond is ATM, thus the option strike =
notional; c) when pricing a receiver (payer) swaption, we are pricing a call (put) on coupon bond
via individual calls (put) on the discounted coupons
[shp] (a) yes, for a par bond, the coupon rate is equal to the swap rate over the same tenor; (b) yes;
(c) receiver receives fixed rate which is the same as a long position on coupon bond; the swaption
part is equivalent to a call. The second part is exact what Jamshidian has proved.
20. Instantaneous forward rate at time t may be approximated from the slope of the log zero coupon
bond price curve from ( t - dt ) to ( t + dt ) choosing small dt
[shp] Yes, the HW C++ code (on my home page) shows how this is done.
19. Is it acceptable to use yield curve information from Bloomberg directly? (i.e. we do not have to
build our own)
[shp] Yes, that will be fine.
18. How do I go about doing the credit risk profile? Do I take the relative changes in interest rate and
swap vols for each scenario? Or do I use the actual yield curve and swap vols on each historical
day as the scenario? Further, in a 1-yr period, there are 25 periods of 10 days each. Do I
recalibrate and reprice 250 scenarios for every period, ie a total of 250 x 25 times = 6250 times?
[shp] If you look at the classic shape of credit risk profile (which is a mirror image of ‘Value at
Risk’), you will notice that the short horizon has a smaller risk than the slightly longer horizon.
This is because, in general, we expect input variables will be a lot more different from today as
the horizon lengthens. So the key is that you need to introduce change to today’s input and not
just introduce another set of input. So the answer to the first part of your question is that you have
to focus on the relative change. Whether you would do a parallel shift or use some principal
component analysis is up to you. If you have only one year worth of historical data (i.e. about
250 days), then there are only 25 10-day change, and one 250-day change. If you use overlapping
data, then you can have 240 10-day change. So if you want to have 250 of 250-day change, you
will need at least two years worth of historical data. If you do not want to use overlapping data,
you will need an even longer historical sample period.
17. There's a report (max 10 pages) that is needed to submit together. Would you be able to elaborate
to me what is your expectation for that report? Is that primarily explanation, background, context ,
user's manual etc on the excels/codes or else?
[shp] The report should be focused on the use of HW model and how to price and risk manage the
interest rate instruments. It should highlight the features, strength and weakness of the model and
the interest rate derivatives. You should not produce very detailed description about the code in
the report, and I am certainly not expecting a user manual. All spreadsheets, computer codes and
detailed information about the running of your computer codes and understanding your
implementation must be attached as appendices.
16. I was able to modify matlab code for LSMC simulation but the variable is the interest rates not the
bond prices. Can I just just assume that call option on interest rates must be equal to a put option
on the bond prices and vice versa.
[shp] I assume you are referring to the regressor used in the least regression to approximate early
exercise decision. The regressor (x in my note) should be a swap rate (calculated from the spot
rate from the Hull-White model) in this case to match the coupon bond.
15. I find it is challenging to work on the assignment with max three people in the group. Right now,
two of us in the group are not from banking industry (studying on part time basis), and there are
also some gaps of knowledge of prep and obtaining needed data. Given that other RMI modules
allows max of 5 people in one group and their assignment is relatively easier to handle, could we
combine with the other group of two, with the needed skills and share of workload, to form a
group of 4-5 for the assignment? Appreciate your understanding and approval.
[shp] The collaboration can extend to infinite number but the report must be submitted by a group
of no more than three members. So you can have 5 people working on the project together but
write two reports. You must make sure the data sets underlying the two reports are slightly
different; different sample period or interest rate on different currencies. Provided you submit
different reports (based on different data sets) you can share all the codes and all the spreadsheets
among all 5 members.
14. I managed to calibrate using results from my workplace (Yield Curve) and Bloomberg (Vol) and
obtained alpha as -0.0803. I wasn't expecting a negative value as I can't see how the rate of
reversion should be negative (deceleration?). However when I input this into our pricing model,
the prices thrown out seems reasonable. Thus will you be able to advise if a negative alpha is
reasonable and if so, what are the possible reasons for this to occur?
[shp] A negative alpha (or ‘a’ in the lecture note) is theoretically wrong as it is the opposite of
mean reversion. The implication is that when the rate is above the long run mean, it will forever
be above; and when it is below, it will never return to the mean or go above the long run mean.
The fact that the price impact is small, when you put the negative ‘a’ back in the valuation
equation, is, I suspect, because the value is very close to zero.
I suggest you re-do the
optimisation and constrain the parameter ‘a’ to take positive values only.
13. Could you explain how to do a credit risk exposure for the bond option, ie part (iii). Since the
swap valued at par on inception, how can we predict the values of the fixed and floating cash
flows over 5 years? The fixed cash flow is easy to predict, but we don't know what Libor will be
in future, so how do we know the discount factor to value the future cash flows? How do we get
the top and bottom 1% values for the cash flows, since we don't know what Libor will be in
[shp] I suspect you were not in the class last week when I explained the credit risk profile. You
have bought a bond option (assume American style) today (to allow you to buy a coupon bond at
a fixed price) using the market data (i.e. term structure and swapvol) today and produce a price for
this bond option. You take some historical data and from this history you understand e.g. the
possible amount of 10-day change to all these input variables. If you have 250 different historical
scenarios, you re-price the same bond option (with 10 day less in maturity). Each time when you
re-price the bond option, you have to calibrate to the term structure and swap vol of that day using
Jamshidian (1989) or Couderc (2006).
From the 250 valuation, the 2nd or 3rd highest value is the potential loss you may suffer should
your counter party default. (This is the opposite tail to the usual VaR which is normally taken as
the lower tail.) Since your bond option has one year to maturity, your exposure to this counter
party should ends at year 1. You change the 10-day change above to e.g. 1 month, 2 month ... 11
month to complete the entire risk profile.
As option payoff is non-linear, the credit risk profile is on one side only i.e. when you long the
bond option (and not when you short the bond option). You can consider the opposite position by
considering a bond option to sell (instead of buy) the same coupon bond.
12. I just realized how heavy the workload of the assignment after fiddling with initial work. I
probably need to join a group or at least get another person to help me especially with access to
bloomberg data. I am currently working alone just getting all my data from the internet, FINRA,
US Treasury website, ESC, etc. If possible I can just do instruments a) bond option and c)
collared floater. I don't even know if I can find time for the valuation/calibration of US type
[shp] There are several choices. 1) you cut down the workload yourself; I have mentioned in the
class that students are not expected to do all listed in the assignment to get a pass; 2) you work
with another student and form a group; 3) even without forming a group, you can still share many
information with other students and other groups. Collaboration is strongly encouraged.
Also, please note that if you are dropping the American option early exercise feature, it is possible
that there are closed form solutions and there is no need to use any numerical scheme. This you
will have to think about and figure it out yourself as part of the requirement of the exercise.
11. Can you elaborate how to use Jamshidian's trick to calibrate ‘a’ and sigma? In this case, do we
keep r* as another free variable or fix it at some approximate value? Leaving it as free variable
may minimize the optimization procedure to zero for any particular set of ‘a’ and sigma. What's
the right way?
[shp] r* should not be in the same level of optimisation as ‘a’ and sigma, but should be estimated
conditioned on the given value of ‘a’ and sigma. Start with one set of ‘a’ and sigma, then change
r* till coupon bond price equal strike price of option, followed by all the steps in Section 5.4 of
the lecture note. Then keep changing ‘a’ and sigma (via an optimiser) till European option prices
are the closest to their market prices.
10. We have managed to form the interest rate tree as per Hull-white model and we have the
following doubt in the approach of the Bond pricing with interest rate.
Approach 1: 1) Form the interest rate tree as per using the Hull-white model, 2) Considering the
yield curve, Price the bond at T0 with considering all, the coupons and assign that as the price of
the bond at the end time step of the bond tree, 3) Start discounting the bond price from the end of
the time step, 4) When the option tree starts (which has lesser time period than the bond),
calculate the option payoff for the bond
Approach 2: Price the bond, with considering the coupons as zero coupon bond, using the closed
form solutions and then start to discount (follow the steps from 3 as above)
[shp] First of all, you must realise that with the Hull-White model, there is closed form expression
for zero coupon (ZC) bond prices, and there is closed form solution for European option on ZC
bond. These results can be extended to coupon bond if we strip coupon bonds into a collection of
ZC bonds. The closed form solution for European option on coupon bond is a bit more
complicated as we need to follow Jamshidian (1989) to repackage European option on coupon
bond into a collection of European options on ZC bonds. So if your objective is to price and
manage European options, you may not need to build the trinomial tree. The tree is built for more
exotic payoff but calibrate to fit the European options.
Next is about Approach 1 vs. Approach 2 in your question. Basically, approach 1 ignore the close
form solution and price option and coupon bond numerically through the tree whereas, Approach
2 prices the bond using the closed form solution but use numerical method to price the bond
option. If implemented correctly, both approaches should give you the same answer. [It is like
pricing a Black-Scholes call option using the formula or by simulations (or binomial tree).]
9. Given today's virtually-zero-interest-rate-and-high-volatility market environment, the Hull-White
model, as a normal model, doesn't seem to work because there is a non-negligible probability of
negative interest rates. Can we instead calibrate to historical yield curve and volatility structure,
which have higher interest rates and lower volatilities?
[shp] Yes, this is fine also so long as you state clearly which date you are calibrating your model
8. Calibrating a and sigma together in C++ may need extra numerical library functions other than the
existing Newton-Raphson method which can solve for one variable only. Can we use NAG or
other libray?
[shp] Yes, this is fine. You can use routines and numerical recipes that you have access to.
7. Your reply below suggests that we should use the closed form solution for bond pricing at every
node, is that correct? Also, based on your reply below, is it correct to say that we should use the
closed-form solution (the one which involves deriving r*) to calculate the European option value
at each node? It works but may take a lot of computational time as we may have to use goalseek
to derive r* at each node. Instead of doing this closed-form calculation and derivation of r*, can
we work out the option value by backward induction from the terminal nodes?
[shp] Yes, you can use simulation or trinomial tree to work out the zero coupon bond price though
I am not sure if this will be faster than the very popular Jamshidian’s trick. It will be good if you
could time it and let me know how much time your programme took.
6. Should the formulas at your changingmeasure.pdf and the corresponding slide be the ones shown
in the attachment? The first one is after “process such that” and the second immediately after
Λ = exp (−
[shp] Yes, you are absolutely right and spot on!
5. In the closed form hull-white bond price equation, there is this forward rate parameter f(0,t). Is
this instantaneous forward rate obtained from the term structure of interest rates built using mkt
cash rates and swap rates?
[shp] In the file “bond.h”, the routine “double CalcA” is used to calculate alpha in Hull‐White
bond price formula that contains f(0,t). In this subroutine, f(0,t) is calculated as
log(Price(t+e)/Price(t‐e))/(2*e) with e = 0.0001
and when you check the routine for calculating Price (i.e. bond price given term structure), you
will notice that the routine simply take linear interpolation between two rates. When the
extrapolation goes below the six month rate (i.e. 4.5%), the routing assume 0% at t=0, and
linearly interpolate to get the rate at six‐month, or 0.5 +/- 0.0001. You could replace the 6-month
rate with the shortest maturity spot rate that you have.
4. (i) Do the mkt swaption vol data input into the calibration procedure (to obtain a and sigma)
require the same option and bond time to maturity as the bond option which we are trying to
price? I.e for the 1x5 american bond option (with semi-annual coupon payment), is it correct to
calibrate using mkt vol for the 4-year swap and 5-year swap in the 1 month, 3 month , 6 month, 9
month and 1 year expiry period? (ii) For calibration using the Jamsidian trick, we have only 1
equation where a European option on a coupon bond is equal to the sum of european options on
zero bonds. However, we have 2 unknowns (a and sigma) to solve for. Do we make an
assumption for "a"? or am i missing something out here
[shp] These two questions are related. You are right that you cannot solve two unknown with one
equation. This is why you need more than one price (or market implied vol). [In Hull’s exercise,
a and sigma are given and the students were asked to back out the implied vol from bond option
price.] So in this context you need a few swaption vol (or bond option prices) to produce the a
and sigma that give the smallest pricing error. You have basically a 1x5 swaption so you should
use implied vol (or option prices) of similar specification. A 10x20 swaption will perhaps be too
3. My group is doing the trinomial tree. We need to value all the cash flows from the bond for the
next four years and discount them to the end of year 1. What rate do we use to discount these cash
flows? Do we use the short rate (ie rt) at the end of year 1? Is it correct to use this rate although
there are eight cash flows occurring at different future dates from the semi-annual coupons and
principal up to Year 5? Or should we use the forward rates on the yield curve, as seen from t0, for
the period starting t =3D 1 year, and thus use the Bt(0.1,1.5) fo r the first coupon and Bt(0,1,2) for
the second coupon, etc?
[shp] The HW model is a spot rate model and is based on spot measure. At every node of the
trinomial tree there is a spot rate; that is the rate you use for discounting. By the way there is
close form solution for bond price in the HW model. So you do not have check the cash flow up
to year 5. The spot rate at the end of year 1 is sufficient in deriving the 4-year maturity coupon
bond price at the end of year 1.
2. Is it practical to use AR or MA models to estimate sigma or theta? What I meant was using
econometrics models to obtain the sigma or theta from the market data, so that we can use the
estimates as inputs to HW model.
[shp] The time series AR or MA estimates of sigma and ‘a’ (not theta) can give you some idea
what the physical measures of these variables look like. They are very likely NOT to be the same
as that used in risk neutral pricing. The objective of the assignment is on calibration and hence it
is a preferred choice to have these values extracted from derivative prices.
1. Does this mean we accumulate the option values monthly or daily over one year historical data?
The y-axis will be cumulative option values while the x-axis will be time to maturity? Does the
credit risk refers to the option positions and not the 5-year bond?
[shp] Yes, the risk profile is that of the option holder. Since risk of option is non-linear, it does not
make sense to analyse the short position of the option itself. You can consider, however, the
counter party risk that the option holder faced if he/she held a call or a put option.
The option has a 1-year to maturity. So the risk profile is 1 year (the x-axis).
Assuming that you have 250 days worth of historical data to allow you to price the options 250
times, then the y-axis is the VaR (Value at Risk at 1%'tile) of the option holder should the seller
default. Unlike the banking sector, one considers the VaR of loss distribution (negative end), for
counter party risk, you take the VaR at the high end. That is the more valuable the option, the
larger is your loss should the seller of option default.
Download PDF