Appendix 19 AMicrosoft Excel
Program for Calculating Cumulative
Bivariate Normal Density Function
(19.8.2)
ByCheng Few LeeJoseph Finnerty
John LeeAlice C Lee
Donald Wort
• Option Explicit• Public Function Bivarncdf(a As Double, b As Double, rho As Double) As Double• Dim rho_ab As Double, rho_ba As Double• Dim delta As Double• If (a * b * rho) <= 0 Then• If (a <= 0 And b <= 0 And rho <= 0) Then• Bivarncdf = Phi(a, b, rho)• End If • If (a <= 0 And b >= 0 And rho > 0) Then• Bivarncdf = Application.WorksheetFunction.NormSDist(a) - Phi(a, -b, -rho)• End If • If (a >= 0 And b <= 0 And rho > 0) Then• Bivarncdf = Application.WorksheetFunction.NormSDist(b) - Phi(-a, b, -rho)• End If• If (a >= 0 And b >= 0 And rho <= 0) Then• Bivarncdf = Application.WorksheetFunction.NormSDist(a) + Application.WorksheetFunction.NormSDist(b) -
1 + Phi(-a, -b, rho)• End If• Else• rho_ab = ((rho * a - b) * IIf(a >= 0, 1, -1)) / Sqr(a ^ 2 - 2 * rho * a * b + b ^ 2)• rho_ba = ((rho * b - a) * IIf(b >= 0, 1, -1)) / Sqr(a ^ 2 - 2 * rho * a * b + b ^ 2)• delta = (1 - IIf(a >= 0, 1, -1) * IIf(b >= 0, 1, -1)) / 4• Bivarncdf = Bivarncdf(a, 0, rho_ab) + Bivarncdf(b, 0, rho_ba) - delta• End If• End Function
2
• Public Function Phi(a As Double, b As Double, rho As Double) As Double • Dim a1 As Double, b1 As Double• Dim w(5) As Double, x(5) As Double• Dim i As Integer, j As Integer• Dim doublesum As Double • a1 = a / Sqr(2 * (1 - rho ^ 2))• b1 = b / Sqr(2 * (1 - rho ^ 2)) • w(1) = 0.24840615• w(2) = 0.39233107• w(3) = 0.21141819• w(4) = 0.03324666• w(5) = 0.00082485334 • x(1) = 0.10024215• x(2) = 0.48281397• x(3) = 1.0609498• x(4) = 1.7797294• x(5) = 2.6697604 • doublesum = 0 • For i = 1 To 5• For j = 1 To 5• doublesum = doublesum + w(i) * w(j) * Exp(a1 * (2 * x(i) - a1) + b1 * (2 * x(j) - b1) + 2 * rho * (x(i) - a1) * (x(j) - b1))• Next j• Next i • Phi = 0.31830989 * Sqr(1 - rho ^ 2) * doublesum • End Function
3
Appendix 19 BMicrosoft Excel
Program for Calculating
American Call Options(19.8.2)
ByCheng Few LeeJoseph Finnerty
John LeeAlice C Lee
Donald Wort
Number*
A B C*
1
Option Pricing Calculation
2 3 S (current stock price)= 50
4St* (critical exdividend
stock price)=46.9641
5S(current stock price NPV
of promised dividend)=48.0218 =B3-B11*EXP(-B7*B10)
6X (exercise price of
option)=48
7 r(risk-free interest rate)= 0.08 8 σ(volatility of stock)= 0.2 9 T(expiration date)= 0.24658
10 t(exercise date)= 0.13699 11 D(Dividend)= 2 12 d1(nondividend-paying)= 0.65933 =(LN(B3/B6)+(B7+0.5*B8^2)*B9)/(B8*SQRT(B9))13 d2(nondividend-paying)= 0.56001 =B12-B8*SQRT(B9)
14d1*(critical exdividend
stock price)=-0.16401
=(LN(B4/B6)+(B7+0.5*B8^2)*(B9-B10))/(B8*SQRT(B9-B10))
15d2*(critical exdividend
stock price)=-0.23022 =B14-B8*SQRT(B9-B10)
5
16 d1(dividend-paying)= 0.25285 =(LN(B5/B6)+(B7+0.5*B8^2)*(B9))/(B8*SQRT(B9))
17 d2(dividend-paying)= 0.15354 =B16-B8*SQRT(B9)
18 a1= 0.25285=(LN((B3-B11*EXP(-B7*B10))/B6)+(B7+0.5*B8
^2)*(B9))/(B8*SQRT(B9))
19 a2= 0.15354 =B18-B8*SQRT(B9)
20 b1= 0.48593=(LN((B3-B11*EXP(-B7*B10))/B4)+(B7+0.5*B8
^2)*(B10))/(B8*SQRT(B10))
21 b2= 0.41191 =B20-B8*SQRT(B10)
22
23 C(St*,T-t;X)= 0.9641=B4*NORMSDIST(B14)-B6*EXP(-B7*(B9-B10))
*NORMSDIST(B15)
24 C(St*,T-t;X)-St*-D+X= 2.3E-06 =B23-B4-B11+B6
25
26 N1(a1)= 0.59981 =NORMSDIST(B18)
27 N1(a2)= 0.56101 =NORMSDIST(B19)
28 N1(b1)= 0.68649 =NORMSDIST(B20)
29 N1(b2)= 0.6598 =NORMSDIST(B21)
30 N1(-b1)= 0.31351 =NORMSDIST(-B20)
6
31 N1(-b2)= 0.3402 =NORMSDIST(-B21)
32 ρ= -0.74536 =-SQRT(B10/B9)
33 a = a1;b = -b1
34 Φ(a,-b;-ρ)= 0.20259 =phi(-B20,0,-B37)
35 Φ(-a,b;-ρ)= 0.04084 =phi(-B18,0,-B36)
36 ρab= 0.87002=((B32*B18-(-B20))*IF(B18>=0,1,-1))/SQRT(B
18^2-2*B32*B18*-B20+(-B20)^2)
37 ρba= -0.31979=((B32*-B20-(B18))*IF(-B20>=0,1,-1))/SQRT
(B18^2-2*B32*B18*-B20+(-B20)^2)
38 N2(a,0;ρab)= 0.45916 =bivarncdf(B18,0,B36)
39 N2(b,0;ρba)= 0.11092 =bivarncdf(-B20,0,B37)
40 δ= 0.5 =(1-IF(B18>=0,1,-1)*IF(-B20>=0,1,-1))/4
41 a = a2;b = b2
42 Φ(a,-b;-ρ)= 0.24401 =phi(-B21,0,-B45)
43 Φ(-a,b;-ρ)= 0.02757 =phi(-B19,0,-B44)
44 ρab= 0.94558=((B32*B19-(-B21))*IF(B19>=0,1,-1))/SQRT
(B19^2-2*B32*B19*-B21+(-B21)^2)
45 ρba= -0.48787=((B32*-B21-(B19))*IF(-B21>=0,1,-1))/SQRT
(B19^2-2*B32*B19*-B21+(-B21)^2)
7
46 N2(a,0;ρab)= 0.47243 =bivarncdf(B19,0,B44)
47 N2(b,0;ρba)= 0.09619 =bivarncdf(-B21,0,B45)
48 δ= 0.5 =(1-IF(B19>=0,1,-1)*IF(-B21>=0,1,-1))/4
49
50 N2(a1,-b1;ρ)= 0.07007 =bivarncdf(B18,-B20,B32)
51 N2(a2,-b2;ρ)= 0.06862 =bivarncdf(B19,-B21,B32)
52
53c(value of European call option to buy one share)
2.40123=B5*NORMSDIST(B16)-B6*EXP(-B7*B9)*NO
RMSDIST(B17)
54p(value of European put option to sell one share)
1.44186=-B5*NORMSDIST(-B16)+B6*EXP(-B7*B9)*NO
RMSDIST(-B17)
55c(value of American call option to buy one share)
3.08238
=(B3-B11*EXP(-B7*B10))*(NORMSDIST(B20)+bivarncdf(B18,-B20,-SQRT(B10/B9)))-B6*EXP
(-B7*B9)*(NORMSDIST(B21)*EXP(B7*(B9-B10))+bivarncdf(B19,-B21,-SQRT(B10/B9)))+B11*EX
P(-B7*B10)*NORMSDIST(B21)
8