Peter Warken - Effective Pricing of Cliquet Options - Masters thesis 122015
Venture financeproject1
1. Venture Lab Finance Course
Project 1: Bond Portfolio Management
Team: AlphaBeta
Comments : Please see first 10 pages for results (little text, mostly column
numbersand figures for easy reading)
Steps 1 and 2 (Max Points: 9)
Dirty Prices
The dirty prices, obtained by adding the accrued interest to the bond prices, are as follows :
Out[455]//TableForm=
102.404
100.261
104.303
101.521
106.163
101.775
108.158
100.647
109.182
(1)
103.665
111.315
100.109
112.088
106.649
114.377
102.787
116.103
105.61
System of Equations for Zero - coupon prices in Step 2
The zero - coupon bond portfolio are created as in Example 4.3 (page 77) in the text, except that the discrete compound-
ing formula is replaced with continuous compounding formula.
portfolioPrice couponsB couponsA askPriceOriginalA askPriceOriginalB;
portfolioFaceValue couponsB couponsA 1 FaceValue; (2)
Exp SpotRate t t portfolioFaceValue portfolioFaceValue
2. 2 VentureFinanceProject1.nb
Solve this system of equations for each time, keeping in mind that it starts from a non-zreto value (as done in code
below).
The results are (in percentages) :
0.956849
0.495406
0.544766
0.577495
0.556351
0.521734
0.41242
0.561462
0.922664
The code below shows the steps used in the calculations :
zeroCoupon couponsB couponsA askPriceOriginalA askPriceOriginalB;
portfolioFaceValue couponsB couponsA 1 100;
spotRates Flatten Table Solve s 2 ii 1 tillFirst Log portfolioFaceValue ii zeroCoupon
spotRates tillFirst .01 0.5 couponsA couponsB 1 ,spotRates Flatten;
Step 3 (Max: 9 Points)
Bond Price Formula
The bond price is given by
N
Fe r tN tN Ck e r t k t k.
(3)
k 1
The Mathematica code for the above is below :
priceOfBondContinuous FV_,couponRate_,n_,m_:2 : Module coupon ,
coupon couponRate FV m;
FV discountRate n Total Table coupon discountRate ii , ii,1 m,n,1 m
Also, the form of the spot rate and the corresponding discount rate is below :
spotRate t_ : a0 a1 t a2 t^2 a3 t^3 a4 t^4;
discountRate t_ : Exp spotRate t t ;
Objective Function
The objective function to be minimized is the sum of squares of the 18 terms:
9
ModelBondTypeAk AskPriceBondTypeAk ^ 2
k 1 (4)
ModelBondTypeBk AskPriceBondTypeBk ^ 2
3. VentureFinanceProject1.nb 3
The only subtlety is that the start time is not zero. This is taken into account. The Mathematica code implementing this
is below :
tillFirst numberofDaysBeforeNextCoupon 365;
modelA priceOfBondContinuous 100,couponsA 100, tillFirst 2 & Range 1 ,9,1 ;
modelB priceOfBondContinuous 100,couponsB 100, tillFirst 2 & Range 1 ,9 ,1
sol NMinimize modelA askPriceA ^2 modelB askPriceB ^2 Total,a0 0.0 , a0,a1,a2,a3,a4
Results for ais
The results for the ai ’s are
0.0134751
0.0259828
0.0167159 (5)
0.00412212
0.00035758
The minimum value for the cost function is found to be
0.629816 (6)
Step 4 (Max: 9 Points)
Plot Fitted Term Structure
0.012
0.010
0.008
Out[440]=
0.006
0.004
0.002
0.000
0 2 4 6 8
The curve in red is the result computed using the polynomial fit, and the green one is using the zero - coupon calcula-
tion noted above.
Advant ages/Disadvant ages
The spot rate is highly sensitive in fluctuations at any measurement, something which is inevitable in real life.
The polynomial approach is more robust against such fluctuations, as it incorporates all the measurements in
arriving at the final estimate of an instantaneous spot rate.
The quality of the polynomial fit depends on the number of data points. That is, if the degree in t is chosen to
be too large, the problem of overfitting results.
4. 4 VentureFinanceProject1.nb
The choice of least-squares is widely used, due to it nice analytical properties (e.g., one can differentiate the
cost function). However, in many cases, a better choice is one tht minimizes the L-1 norm (see vast literature
on compressive sensing).
A better model would be to use a stochastic model (in place of the polynomial model) for the spot rate and fit
that to the data.
Step 5: Cash Matching (Max. Points: 9)
Formulation of Part A (3 Points)
First, form the bond matrix, i.e., the payments from the bonds of the various durations and coupon rates. Note it is
clipped due to matrix size.
Out[453]//MatrixForm=
102.313 100.438 2.1875 0.875 1.9375 0.6875 2.125 0.375 2 0.9375 2.125
0 0 102.188 100.875 1.9375 0.6875 2.125 0.375 2 0.9375 2.125
0 0 0 0 101.938 100.688 2.125 0.375 2 0.9375 2.125
0 0 0 0 0 0 102.125 100.375 2 0.9375 2.125
0 0 0 0 0 0 0 0 102 100.938 2.125
(7)
0 0 0 0 0 0 0 0 0 0 102.125
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
Form the vector of the bond matrix times the amounts minus the liabilities, which is the excess periodic cash flows:
bondMatrix vars liabilities; (8)
Now the excess periodic cash flows are fed back (at zero interest) to purchase the bonds. Thus, he equation to solve is
in Mathematica code as follows:
In[456]:= bM bondMatrix.vars liabilities;
simpleMatching bM 1 0,
bM 1 bM 2 0,
bM 1 bM 2 bM 3 0,
bM 1 bM 2 bM 3 bM 4 0,
bM 1 bM 2 bM 3 bM 4 bM 5 0,
bM 1 bM 2 bM 3 bM 4 bM 5 bM 6 0,
(9)
bM 1 bM 2 bM 3 bM 4 bM 5 bM 6 bM 7 0,
bM 1 bM 2 bM 3 bM 4 bM 5 bM 6 bM 7 bM 8 0,
bM 1 bM 2 bM 3
bM 4 bM 5 bM 6 bM 7 bM 8 bM 9 0 ;
solutionSimpleMatching NMinimize vars.askPrice,
Flatten simpleMatching, Thread vars 0 , vars
Chop bondMatrix.vars liabilities . solutionSimpleMatching 2
Observe that :
The cost function is the vector dot product of vars (the bond amounts) and the bond price computed in Step 1
(reflecting accrued interest rate).
The excesses from the previous step are fed back next time period, as evident from the first nince inequality
structures;
The excesses all must exceed 0;
5. VentureFinanceProject1.nb 5
The quantities all exceed zero (no short-selling).
Solution of Part A (1 Point)
The solution obtained from the above is :
Out[475]//TableForm=
0.
74.933
0.
25.2608
0.
375.482
0.
48.0633
0.
(10)
778.244
0.
105.54
485.803
0.
55.5195
0.
146.699
0.
The cost is found to be
222 207.29 (11)
Formulation of Part B (3 Points)
The formulation is similar except that there is discounting.
discounts Exp spotRatesAnalytical 0.5
The optimization problem is similar in structure, but note the discounting of the surplus at each time step.
In[476]:= bM bondMatrix.vars liabilities;
simpleMatching discounts 1 bM 1 0,
discounts 2 bM 1 bM 2 0,
discounts 3 discounts 2 bM 1 bM 2 bM 3 0,
discounts 4
discounts 3 discounts 2 bM 1 bM 2 bM 3 bM 4 0,
discounts 5 discounts 4 discounts 3
discounts 2 bM 1 bM 2 bM 3 bM 4 bM 5 0,
discounts 6 discounts 5 discounts 4
discounts 3 discounts 2 bM 1 bM 2 bM 3
bM 4 bM 5 bM 6 0,
discounts 7 discounts 6 discounts 5
discounts 4 discounts 3 discounts 2 bM 1 bM 2 (12)
bM 3 bM 4 bM 5 bM 6 bM 7 0,
discounts 8 discounts 7 discounts 6 discounts 5 discounts 4
6. 6 VentureFinanceProject1.nb
discounts 3 discounts 2 bM 1 bM 2 bM 3
bM 4 bM 5 bM 6 bM 7 bM 8 0,
discounts 9 discounts 8 discounts 7
discounts 6 discounts 5 discounts 4 discounts 3
discounts 2 bM 1 bM 2 bM 3 bM 4
bM 5 bM 6 bM 7 bM 8 bM 9 0 ;
solutionSimpleMatching NMinimize vars.askPrice, Flatten
simpleMatching, Thread vars 0 , vars
Chop bondMatrix.vars liabilities . solutionSimpleMatching 2
vars . solutionSimpleMatching 2 Total
Solution of Part B (1 Point)
The solution obtained from the above is :
Out[488]//TableForm=
0.
74.933
0.
25.2608
0.
375.482
0.
48.0633
0.
(13)
778.244
0.
105.54
485.803
0.
55.5195
0.
146.699
0.
The cost is found to be
222 207.29
In this case, the numbers turn out to be the same. This is not going to be the case in general.
Step 6: Immunization (Maximum Points : 9)
Derivatives (3 points)
Firs, note the simple structure of the derivatives :
n
PV tN tN F tN a0 a1 t N a2 t2 a3 t3 a4 t4
N N N tk Ck tk a0 a1 t k a2 t2 a3 t3 a4 t4
k k k , (12)
a0 k 1
,
(14)
7. VentureFinanceProject1.nb 7
n
PV tN tN 2 F tN a0 a1 t N a2 t2 a3 t3 a4 t4
N N N tk 2 Ck tk a0 a1 t k a2 t2 a3 t3 a4 t4
k k k ,
a1 k 1
n
PV tN tN 3 F tN a0 a1 t N a2 t2 a3 t3 a4 t4
N N N tk 3 Ck tk a0 a1 t k a2 t2 a3 t3 a4 t4
k k k ,
a2 k 1
n
PV tN tN 4 F tN a0 a1 t N a2 t2 a3 t3 a4 t4
N N N tk 4 Ck tk a0 a1 t k a2 t2 a3 t3 a4 t4
k k k ,
a3 k 1
n
PV tN tN 5 F tN a0 a1 t N a2 t2 a3 t3 a4 t4
N N N tk 5 Ck tk a0 a1 t k a2 t2 a3 t3 a4 t4
k k k .
a4 k 1
It is straightforward to write the same for a portfolio.
Const raint s
The structure of the derivatives is rather simple. It is as if appropriate powers of t are applied to the coupon and face
value. In Mathematica code, all the terms a0-a4 case is implemented as
factor ConstantArray 1, 18 tis tis ^ 2 tis ^ 3 tis ^ 4 ; (15)
Here, tis are the different times at which the payments are made. This factor multiplies the liabilities and the coupons.
vars Array a, 18 ; Variables
tis Riffle Range 0, 8, 1 2., Range 0, 8, 1 2. ;
modFV factor 100;
(16)
modcoupons factor semiAnnualcoupons;
modliabilities factor 1 ;; 18 ;; 2
10 000, 5000, 40 000, 7000, 80 000, 12 000, 50 000, 6000, 15 000 ;
The bond matrix is then also suitably modified:
bondMatrix
modcoupons modFV 1 , modFV 2 , ConstantArray 0, 16 Flatten ,
Flatten 0, 0, Drop modcoupons, 2
Flatten 0, 0, modFV 3 , modFV 4 , ConstantArray 0, 14 ,
Flatten 0, 0, 0, 0, Drop modcoupons, 4
Flatten 0, 0, 0, 0, modFV 5 , modFV 6 , ConstantArray 0, 12 ,
Flatten 0, 0, 0, 0, 0, 0, Drop modcoupons, 6
Flatten 0, 0, 0, 0, 0, 0, modFV 7 , modFV 8 , ConstantArray 0, 10 ,
Flatten 0, 0, 0, 0, 0, 0, 0, 0, Drop modcoupons, 8 Flatten
0, 0, 0, 0, 0, 0, 0, 0, modFV 9 , modFV 10 , ConstantArray 0, 8 ,
Flatten 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Drop modcoupons, 10 Flatten (17)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, modFV 11 , modFV 12 , ConstantArray 0, 6 ,
Flatten 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Drop modcoupons, 12 Flatten 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, modFV 13 , modFV 14 , ConstantArray 0, 4 ,
Flatten 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Drop modcoupons, 14
Flatten 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
modFV 15 , modFV 16 , ConstantArray 0, 2 ,
Flatten 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Drop modcoupons, 16
Flatten 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, ,
(14)
8. 8 VentureFinanceProject1.nb
0, 0, 0, 0, 0, modFV 17 , modFV 18
;
The optimization problem that is solved is then simply that the
sum of the number of bonds is minimum not the cost as in previous case .
solDeriv Minimize Total vars,
Thread bondMatrix.vars modliabilities , Thread vars 0 , vars (18)
vars . solDeriv 2 Total
Answers (2 Points)
a0
The objective value is 2026.87.
Out[515]//TableForm=
58.8723
0.
10.2338
0.
360.458
0.
37.4415
0.
768.237
0.
103.602
0.
485.803
0.
55.5195
0.
146.699
0.
a0 - a1
The objective value is 1909.30
Out[539]//TableForm=
0.
0.
0.
0.
335.968 (17)
0.
23.9821
0.
762.076
(19)
0.
100.558
0.
484.858
0.
10. 10 VentureFinanceProject1.nb
a0 - a4
The objective value is 1459.58.
Out[566]//TableForm=
0.
0.
0.
0.
0.
0.
0.
0.
701.08
0.
79.1567
0.
479.145
0.
53.4955
0.
146.699
0.
Step 7 and 8 : Comparison of 5A, 5B and 6 and Write-
Up(Maximum Points : 9)
Risk (2 Points)
Simple Cash Matching: An advantage is that it is simple. However, it is not robust against changes of interst
rates.
Complex Cash Matching: This is certainly more robust against changes in interest rates, comapred to simple
cash matching as it incorporates expected interest rates.
Immunization Portfolio: This is much more robust as it incorporates the changes in the parameters in the spot
rate model. However, it is more complicated to implement (but much more so).
In terms of risk, the immunization portfolio is definitely the best option.
Cost (2 Points)
In the example, the simple cash matching and complex cash matching yielded the same result. In general, the
complex cash matching is preferred.
The immunization portfolio was devised such that the total number of shares were the smallest. IN fact, it
turned out the cost was also the smallest.
In terms of cost, use immunization portfolio.
Implementation in Practice (2 Points)
The simple cash matching should definitely not be implemented in practise, as heavy losses are possible in
uncerain times.
18. 18 VentureFinanceProject1.nb
n
tN a0 a1 t N a2 t2 a3 t3 a4 t4 tk a0 a1 t k a2 t2 a3 t3 a4 t4
PV tN tN F N N N tk Ck k k k ,
a0 k 1
n
a0 a1 t N a2 t2 a3 t3 a4 t4 a0 a1 t k a2 t2 a3 t3 a4 t4
PV tN tN 2 F tN N N N tk 2 Ck tk k k k ,
a1 k 1
n
a0 a1 t N a2 t2 a3 t3 a4 t4 a0 a1 t k a2 t2 a3 t3 a4 t4
PV tN tN 3 F tN N N N tk 3 Ck tk k k k ,
a2 k 1
n
a0 a1 t N a2 t2 a3 t3 a4 t4 a0 a1 t k a2 t2 a3 t3 a4 t4
PV tN tN 4 F tN N N N tk 4 Ck tk k k k ,
a3 k 1
n
a0 a1 t N a2 t2 a3 t3 a4 t4 a0 a1 t k a2 t2 a3 t3 a4 t4
PV tN tN 5 F tN N N N tk 5 Ck tk k k k .
a4 k 1
0., 0., 0.5, 0.5, 1., 1., 1.5, 1.5, 2., 2., 2.5, 2.5, 3., 3., 3.5, 3.5, 4., 4.
modliabilities
10 000, 5000, 40 000, 7000, 80 000, 12 000, 50 000, 6000, 15 000
1., 1., 1.5, 1.5, 2., 2., 2.5, 2.5, 3., 3., 3.5, 3.5, 4., 4., 4.5, 4.5, 5., 5.
It is as if appropriate powers of t are applied to the coupon and face value.
20. 20 VentureFinanceProject1.nb
Out[530]//TableForm=
58.8723
0.
10.2338
0.
360.458
0.
37.4415
0.
768.237
0.
103.602
0.
485.803
0.
55.5195
0.
146.699
0.
Out[529]= 2026.87, a 1 58.8723, a 2 0., a 3 10.2338, a 4 0., a 5 360.458, a 6 0.,
a 7 37.4415, a 8 0., a 9 768.237, a 10 0., a 11 103.602, a 12 0.,
a 13 485.803, a 14 0., a 15 55.5195, a 16 0., a 17 146.699, a 18 0.
2026.87, a 1 58.8723, a 2 0., a 3 10.2338, a 4 0., a 5 360.458, a 6 0.,
a 7 37.4415, a 8 0., a 9 768.237, a 10 0., a 11 103.602, a 12 0.,
a 13 485.803, a 14 0., a 15 55.5195, a 16 0., a 17 146.699, a 18 0.
58.8723
0.
10.2338
0.
360.458
0.
37.4415
0.
768.237
0.
103.602
0.
485.803
0.
55.5195
0.
146.699
0.