UnRisk code: click to enlarge
Let's assume we want to price the following callable fixed rate bond:
- the underlying bond pays annual coupons of 5.2%, following the 30/360 day-count convention and corresponding to a nominal amount of 100,000 EUR
- the first coupon period starts at October 10, 2008 and the redemption (the nominal amount) is paid at October 10, 2018
- in addition, the bond is callable at each coupon date, starting from October 10, 2011
What are the steps to translate the termsheet of this callable fixed rate bond into the language of UnRisk?
The picture above gives the answer (due to the descriptive language of UnRisk, the code does not need to be explained in detail): First, the underlying fixed rate bond is constructed - this is done by the constructor MakeFixedRateBond. In the next line it is shown how the cashflows of the underlying bond may be generated (the function Cashflows is applied). In order to make the bond callable, a call schedule (constructed by MakeCallPutSchedule) has to be assigned - the callable bond is then constructed by the use of the function MakeCPFixedRateBond. That's about it.
The next question is: How do I get a fair price for this callable bond under, e.g. , a Hull & White (or a Black Karasinski or a LIBOR market) model?
Again, the picture above shows how this can be done: First, the Hull & White model has to constructed - we use the command MakeGeneralHullWhiteModel (usually this has to be done by the use of the UnRisk calibration routine, which identifies the parameters of the interest rate model from given bond, cap and swaption prices). The available interest rate models (especially their calibration) will be explained in a later blog.
But let's come back to our callable bond: By the use of the function Valuate (which may be used to price any financial instrument under any model) we gain the fair value of the callable bond under the given Hull & White model (the credit spread is assumed to be 80bp). The returned list contains the dirty / clean value of the underlying bond, the value of the call option and the dirty / clean value of the callable bond.