Model Solutions to Homework Set 5
Math 456
Topics in Financial Mathematics
Prof. Wickerhauser
Read Chapters 9 and 10 of the textbook, "Binomial Models In Finance" by
John van der Hoek and Robert J. Elliott
NOTE: When asked to produce a spreadsheet, you may instead implement
the model in Octave or another system. For full credit you must
translate the algorithm into a computer program and produce output
from several examples. Include your code so that the grader can see
and reproduce your work.
Do the following exercises from the textbook Chapter 9.6, p.126:
Exercise 9.3. Derive Eq.9.1 from the Black-Scholes formula. You may
use the Call-Put Parity formula to derive Eq.9.2. Likewise,
derive Eq.9.8, Eq.9.9, Eq.9.13, Eq.9.14, Eq.9.18, and Eq.9.19.
NOTE: the definitions of d1 and d2 are on p.248 of the
textbook, along with the Black-Scholes formula for
European-style Call options, Eq.A.17. Additional references
on Black-Scholes formulas are linked from the class website.
First review the Black-Scholes European Call option pricing formula
found on p.248 of the textbook:
C(0) = S*Norm(d1) - K*exp(-r*T)*Norm(d2),
where
S = spot price
K = strike price
T = time in years
r = risk free interest per annum
R = risk free return per annum = exp(r*T)
sigma = volatility
d1 = [log(S/K)+(r+sigma^2/2)*T]/(sigma*sqrt(T))
d2 = [log(S/K)+(r-sigma^2/2)*T]/(sigma*sqrt(T))
Notice that d1-d2 = sigma*sqrt(T)) and
d1+d2 = 2*(log(S/K)+r*T)/(sigma*sqrt(T))
and thus
d1^2-d2^2 = (d1-d2)*(d1+d2) = 2*(log(S/K)+r*T)
which will be useful below.
To price European Put options, use the Call-Put parity formula
C(0)-P(0) = S-K/R = S-K*exp(-r*T)
==> P(0) = C(0)-S+K*exp(-r*T)
= S*(Norm(d1)-1) - K*exp(-r*T)*(Norm(d2)-1)
Now
Norm(x) = integral( exp(-t^2/2), -infinity0 as x--> -infinity
and Norm(x)-->1 as x--> +infinity.
The latter limit fact plus the substitution t <- -t in the integral
reveals that
Norm(x)-1 = -Norm(-x),
giving the simpler Put formula:
P(0) = -S*Norm(-d1) + K*exp(-r*T)*Norm(-d2)
FOR DELTAS, just differentiate the C(0) and P(0) formulas above with
respect to S:
Delta_C = partial C(0)/partial S
= Norm(d1)
+ S*Norm'(d1)*partial d1/partial S
- K*exp(-r*t)*Norm'(d2)*partial d2/partial S,
by the product rule and the chain rule. Also, from the formulas,
partial d1/partial S = 1/(S*sigma*sqrt(T))
partial d2/partial S = 1/(S*sigma*sqrt(T))
and by the Fundamental Theorem of Calculus,
Norm'(d1) = exp(-d1^2/2)/sqrt(2*pi) = norm(d1)
Norm'(d2) = exp(-d2^2/2)/sqrt(2*pi) = norm(d2)
(where norm(x)=exp(-x^2/2)/sqrt(2*pi) is the normal density.)
These may be combined to give
Delta_C = Norm(d1) +
+ [S*norm(d1)-K*exp(-r*T)*norm(d2)]/(S*sigma*sqrt(T))
= Norm(d1) +
+ [S*exp(-d1^2/2)-K*exp(-r*T)*exp(-d2^2/2)]/(S*sigma*sqrt(T*2*pi))
Thus, to show the claimed result Delta_C = Norm(d1), it suffices to
prove that
[S*norm(d1)-K*exp(-r*T)*norm(d2)] = 0
or equivalently that
[S*exp(-d1^2/2)-K*exp(-r*T)*exp(-d2^2/2)] = 0.
Factoring out the nonzero exp(-d1^2/2), we see that it suffices to prove
[S*exp((d2^2-d1^2)/2)-K*exp(-r*T)] = 0.
Now d2^2-d1^2 = -(d1-d2)*(d1+d2) = -2*(log(S/K)+r*T) from above, so it
suffices to prove that
0 = [S*exp( -log(S/K)-r*T )-K*exp(-r*T)]
= S*(K/S)*exp(-r*T)-K*exp(-r*T)
which is evidently true. Conclude that Equation 9.1 holds:
(Eq.9.1) Delta_C = Norm(d1)
Following the hint, use the Call-Put Parity Formula for European-style
options:
C(0)-P(0) = S-K*exp(-r*T) ==> P(0) = C(0)-S+K*exp(-r*T)
Differentiating both sides with respect to S yields
Delta_P = Delta_C - 1 - partial(K*exp(-r*T))/partial S
= Delta_C - 1 % since K,r, and T do not depend on S
= Norm(d1)-1 % from Equation 9.1
= -Norm(-d1) % by an identity above.
This proves
(Eq.9.2) Delta_P = Norm(d1)-1 = -Norm(-d1),
FOR GAMMAS, let
norm(x) = Norm'(x)=exp(-x^2/2)/sqrt(2*pi)
and compute Gammas by differentiating the Deltas.
Using Eq.9.1 for Delta_C,
(Eq.9.8) Gamma_C = partial Delta_C/ partial S
= partial Norm(d1)/partial S % from Eq.9.1
= Norm'(d1)*partial d1/partial S % chain rule
= norm(d1)/(S*sigma*sqrt(T)), % from above
Likewise, using Eq.9.2 for Delta P,
(Eq.9.9) Gamma_P = partial Delta_P/ partial S
= partial [Norm(d1)-1]/partial S % from Eq.9.2
= Norm'(d1)*partial d1/partial S % chain rule
= norm(d1)/(S*sigma*sqrt(T)), % from above
FOR THETAS, differentiate with respect to T. First note that from the
formulas,
partial d1/partial T = (r+sigma^2/2-log(S/K)/T)/(2*sigma*sqrt(T))
partial d2/partial T = (r-sigma^2/2-log(S/K)/T)/(2*sigma*sqrt(T))
Apply this to compute the Thetas:
Theta_C = - partial C/partial T
= -S*Norm'(d1)*partial d1/partial T
+K*(-r)*exp(-r*T)*Norm(d2)
+K*exp(-r*T)*Norm'(d2)*partial d2/partial T
= -S*norm(d1)*(r+sigma^2/2-log(S/K)/T)/(2*sigma*sqrt(T))
-K*r*exp(-r*T)*Norm(d2)
+K*exp(-r*T)*norm(d2)*(r-sigma^2/2-log(S/K)/T)/(2*sigma*sqrt(T))
which may be rearranged to give
= -S*norm(d1)*sigma^2/(2*sigma*sqrt(T))
-[S*norm(d1)-K*exp(-r*T)*norm(d2)](r-sigma^2/2-log(S/K)/T)/(2*sigma*sqrt(T))
-K*r*exp(-r*T)*Norm(d2)
But while computing Deltas we found that [S*norm(d1)-K*exp(-r*T)*norm(d2)]=0,
so the middle term vanishes, leaving
(Eq.9.13) Theta_C = -S*norm(d1)*sigma^2/(2*sigma*sqrt(T))-K*r*exp(-r*T)*Norm(d2)
= -S*norm(d1)*sigma/(2*sqrt(T))-K*r*exp(-r*T)*Norm(d2),
as claimed.
Following the hint, use the Call-Put Parity Formula for European-style
options:
C(0)-P(0) = S-K*exp(-r*T) ==> P(0) = C(0)-S+K*exp(-r*T)
Differentiating both sides with respect to T (which means applying
-partial/partial T in this case) yields
Theta_P = Theta_C - 0 -partial(K*exp(-r*T))/partial T
= Theta_C + K*r*exp(-r*T)
= -S*norm(d1)*sigma/(2*sqrt(T))-K*r*exp(-r*T)*[Norm(d2)-1]
= -S*norm(d1)*sigma/(2*sqrt(T))+K*r*exp(-r*T)*Norm(-d2)
since Norm(x)-1=-Norm(-x) for any x as shown above. This proves
(Eq.9.14) Theta_P = -S*norm(d1)*sigma/(2*sqrt(T))+K*r*exp(-r*T)*Norm(-d2)
as claimed.
FOR VEGAS, differentiate the formulas with respect to sigma:
Kappa_C = partial C/partial sigma
= S*Norm'(d1)*partial d1/partial sigma
- K*exp(-r*T)*Norm'(d2)*partial d2/partial sigma
But (using Macsyma) we can compute
partial d1/partial sigma = -d1/sigma + sqrt(T)
partial d2/partial sigma = -d2/sigma - sqrt(T)
so we get
Kappa_C = S*norm(d1)*[-d1/sigma + sqrt(T)]
- K*exp(-r*T)*norm'(d2)*[-d2/sigma - sqrt(T)]
and after rearrangement
= -[S*norm(d1)-K*exp(-r*T)*norm(d2)]*[-d2/sigma - sqrt(T)]
+ S*norm(d1)*[(d2-d1)/sigma + 2*sqrt(T)]
The first term vanishes since [S*norm(d1)-K*exp(-r*T)*norm(d2)]=0,
while the second term simplifies using -d1+d2=-sigma*sqrt(T), leaving
(Eq.9.17) Kappa_C = S*norm(d1)*sqrt(T)
Differentiating the Call-Put Parity formula C-P=S-K*exp(-r*T) and
observing that the difference does not depend on sigma, we get
(Eq.9.17) Kappa_P = Kappa_C = S*norm(d1)*sqrt(T).
FOR RHOS, differentiate with respect to interest rate r to get
rho_C = partial C/partial r
= S*Norm'(d1)*partial d1/partial r
-K*(-T)*exp(-r*T)*Norm(d2)
- K*exp(-r*T)*Norm'(d2)*partial d2/partial r.
But (using Macsyma) we can compute
partial d1/partial r = partial d2/partial r = sqrt(T)/sigma
so we get
rho_C = S*norm(d1)*sqrt(T)/sigma
-K*(-T)*exp(-r*T)*Norm(d2)
- K*exp(-r*T)*norm(d2)*sqrt(T)/sigma
which after simplification and rearrangement gives
= [S*norm(d1)-K*exp(-r*T)*norm(d2)]*sqrt(T)/sigma
+K*T*exp(-r*T)*Norm(d2)
The first term vanishes because [S*norm(d1)-K*exp(-r*T)*norm(d2)]=0 as
before, so we are left with
(Eq.9.18) rho_C = K*T*exp(-r*T)*Norm(d2)
Using the Call-Put Parity Formula C-P=S-K*exp(-r*T) to get
P=C-S+K*exp(-r*T) and differentiating both sides with respect to r
gives
(Eq.9.19) rho_P = rho_C -0 + K*(-T)*exp(-r*T)
= K*T*exp(-r*T)*[Norm(d2)-1]
= -K*T*exp(-r*T)*Norm(-d2)
as claimed. At the last step we use Norm(x)-1=-Norm(-x) for every x.
Exercise 9.4. Either create a spreadsheet or use Octave programs.
First set the parameters as given, and assume K=90:
S=90;r=0.08; T=1; sigma=0.22; N=10; dt=T/N=0.1; K=90;
Modify the spreadsheet "binomialprice.ods" at the following link on
the class website:
https://www.math.wustl.edu/~victor/classes/ma456/binomialprice.ods
It computes European-style Call and Put prices by the CRR method. Use
centered difference approximations to the derivative to compute the
Greeks. Use h=0.1 in the formulas so that the error O(h^2) is
approximately one penny.
In computing the Black-Scholes Greeks, use the parameters in Octave to
compute
d1 = (log(S/K)+(r+sigma^2/2)*T)/(sigma*sqrt(T)) % d1 = 0.47364
d2 = (log(S/K)+(r-sigma^2/2)*T)/(sigma*sqrt(T)) % d2 = 0.25364
Note that in Octave, using the "statistics" package,
Norm(X) is computed by normcdf(X)
norm(X)=Norm'(X) is computed by normpdf(X).
FOR DELTA:
Delta_C = (Call(S=90+h)-Call(S=90-h))/(2*h) =
= (Call(S=90.1)-Call(S=89.9))/(0.2) =
= (11.4143109964-11.2786593348)/(0.2) = 0.67826
(B-S value by Eq.9.1 is normcdf(d1) = 0.68212 )
Delta_P = (Put(S=90+h)-Put(S=90-h))/(2*h) =
= (Put(S=90.1)-Put(S=89.9))/(0.2) =
= (4.3947821712-4.4591305096)/(0.2) = -0.32174
(B-S value by Eq.9.2 is -normcdf(-d1) = -0.31788 )
FOR GAMMA:
Gamma_C = (Call(S=90+h)-2*Call(S=90)+Call(S=90-h))/(h^2)
= (Call(S=90.1)-2*Call(S=90)+Call(S=89.9))/(0.01)
= (11.4143109964-2*11.3354905964+11.2786593348)/(0.01) = 2.1989
(B-S value by Eq.9.8 is normpdf(d1)/(S*sigma*sqrt(T)) = 0.018011 )
Gamma_P = (Put(S=90+h)-2*Put(S=90)+Put(S=90-h))/(h^2)
= (Put(S=90.1)-2*Put(S=90)+Put(S=89.9))/(0.01)
= (4.3947821712-2*4.4159617712+4.4591305096)/(0.01) = 2.1989
(B-S value by Eq.9.9 is normcdf(d1)/(S*sigma*sqrt(T)) = 0.018011 )
NOTE: Using h=1 in the CRR centered difference method gives 0.21989
which is unexpectedly closer to the B-S value. Likewise, using
h=0.01 gives a CRR approximation of 21.989 which is unexpectedly
farther from the B-S value. This shows the inaccuracy of the
10-step CRR approximation to the continuous B-S model, amplified by
taking two derivatives.
FOR THETA:
Theta_C = -(Call(T=1+h)-Call(T=1-h))/(2*h) =
= -(Call(T=1.1)-Call(T=0.9))/(0.2) =
= -(12.0672770467-10.5826050146)/(0.2) = -7.4234
(B-S value by Eq.9.13 is
-S*normpdf(d1)*sigma/(2*sqrt(T))-K*r*exp(-r*T)*normcdf(d2)
= -7.5191 )
Theta_P = -(Put(T=1+h)-Put(T=1-h))/(2*h) =
= -(Put(T=1.1)-Put(T=0.9))/(0.2) =
= -(4.4857559518-4.3303856377)/(0.2) = -0.77685
(B-S value by Eq.9.14 is
-S*normpdf(d1)*sigma/(2*sqrt(T))+K*r*exp(-r*T)*normcdf(-d2)
= -0.87264 )
FOR VEGA: use h=0.01 to have h<= [pi(n,j)*V(n+1,j+1)+(1-pi(n,j))*V(n+1,j)]/R(n,j) % >= binomial value
>= [pi(n,j)*plus(St(n+1,j+1)-K)+(1-pi(n,j))*plus(St(n+1,j)-K)]/R(n,j) % >= exercise values
>= plus[pi(n,j)*(St(n+1,j+1)-K)+(1-pi(n,j))*(St(n+1,j)-K)]/R(n,j % plus(X)+plus(Y)>=plus(X+Y)
>= plus[pi(n,j)*St(n+1,j+1)+(1-pi(n,j))*St(n+1,j)-K]/R(n,j % pi*K+(1-pi)*K = K
= plus[f(n,j)-K]/R(n,j) % Equation 10.1 with risk-neutral probability pi(n,j)
= plus[(1-delta(n+1))*St(n,j)*R(n,j) - K]/R(n,j) % Equation 10.5
= plus[(1-delta(n+1))*St(n,j) - K/R(n,j)] % plus(X)/R = plus(X/R), if R>0
= plus[St(n,j)-delta(n+1)*St(n,j) - K/R(n,j)] % distributive law
= plus[St(n,j)- K/R(n,j)] % since delta(n+1)=0
>= plus[St(n,j)-K] % since R(n,j)>1.
This means that, if delta(n+1)=0 and R(n,j)>1, the exercise value at (n,j) is not greater than the
binomial value, so early exercise is not optimal.
NOTE: there is no strict equality at the last step in general, despite the textbook's claim, since
for some (n,j) it is possible that plus[St(n,j)-K/R(n,j)]=0=plus[St(n,j)-K]. Nevertheless, we may
conclude that early exercise is not optimal except possibly just before a positive dividend.
Exercise 10.12
Verify the results of Example 10.7.
NOTE: There is a typo in the example. To get the claimed results, the (unstated) strike price
should be K=$80 as in Example 10.8, and the risk-free return should be R=exp(0.10) rather than
exp(0.01) as stated in the textbook. Thanks to Mr Eric Tang for solving this puzzle.
See the spreadsheet at "ch10ex1012.ods" for the calculations showing that European and American
style Call options have the same price estimate, $45.67, under these conditions.
Exercise 10.13
Verify the results of Example 10.8.
NOTE: There is a typo in this example as well. To get the claimed results, the risk-free return
should be R=exp(0.10) rather than exp(0.01) as stated in the textbook. Thanks to Mr Eric Tang for
solving this puzzle as well as for Example 10.7.
See the spreadsheet at "ch10ex1013.ods" for the calculations showing that European and American
style Call options have different price estimates, $31.76 and $32.72, respectively, under these
conditions. Early exercise is optimal at (n,j) = (1,0), (1,1), (2,1), (2,2), (3,2), and (3,3).
This spreadsheet is modified from that of Exercise 10.12 by adjusting the formulas in the pvDiv
column:
pvDiv0 = D2/R^2 + D4/R^4
pvDiv1 = D2/R + D4/R^3
pvDiv2 = D4/R^2
pvDiv3 = D4/R
pvDiv4 = 0
This uses the fact that D2=D4=10 while D1=D3=0.
Exercise 10.14
Establish the results in Remark 10.9.
Justify the inequalities for an American-style option on a dividend-paying stock at each stage as
follows:
If D(n+1)=0 (namely, n is not just before a dividend) and R(n,j)>1 (namely, risk free interest rates
are positive), then
V(n,j) >= plus[ St(n,j) - (D(n+1)+K)/R(n,j) ] % at least the binomial value from Eq.10.11
= plus[ St(n,j) - K/R(n,j) ] % since D(n+1)=0
>= plus[ St(n,j) - K ] % since R(n,j)>1 and K>0
Hence the exercise price is not strictly greater than the binomial price, so early exercise is not
optimal.
NOTE: there is no strict equality here in general, despite the textbook's claim, since for some
(n,j) it is possible for plus[St(n,j)-K/R(n,j)]=0=plus[ St(n,j)-K]