HW 6
HW 6
第六組
一、Dividend (Proportion)
LatticeEurCallDivP vs LatticeAmCallDivP
% LatticeEurCallDivP vs LatticeAmCallDivP
function Comp_LatticeAmCallDivP_LatticeEurCallDivP()
S0=50; X=50; r=0.02; T=1; sigma=0.2; N=10;
div=0.05:0.05:0.5; tau=1:N-1;
LatticeAmCallDiv_price = zeros(length(tau),length(div));
LatticeEurCallDiv_price = zeros(length(tau),length(div));
[A,B] = meshgrid(div,tau);
figure
Code Diff = LatticeAmCallDiv_price - LatticeEurCallDiv_price;
surf(A,B,Diff);
title("Difference between AmCall and EurCall")
xlabel('dividend');
ylabel('tau');
zlabel('AmCall - EurCall');
colorbar
end
%LatticeAmCallDivP.m
function[price,lattice]=LatticeAmCallDivP(S0,X,r,T,sigma,
N,div,tau)
deltaT=T/N;
u=exp(sigma*sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT)-d)/(u-d);
lattice=zeros(N+1,N+1);
for j=0:N
lattice(N+1,j+1)=max(0,S0*(u^j)*(d^(N-j))*(1-div)-X);
end
for i=N-1:-1:tau
for j=0:i
lattice(i+1,j+1)=max(S0*u^j*d^(i-j)*(1-div)-X,...
exp(-r*deltaT)*(p*lattice(i+2,j+2)+(1-p)*lattice(i+2,j+1)
));
end
end
for i=tau-1:-1:0
for j=0:i
lattice(i+1,j+1)=max(S0*u^j*d^(i-j)-X,...
exp(-r*deltaT)*(p*lattice(i+2,j+2)+(1-p)*lattice(i+2,j+1)
));
end
end
price=lattice(1,1);
end
%LatticeEurCallDivP.m
function[price,lattice]=LatticeEurCallDivP(S0,X,r,T,sigma
,N,div)
deltaT=T/N;
u=exp(sigma*sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT)-d)/(u-d);
lattice=zeros(N+1,N+1);
for j=0:N
lattice(N+1,j+1)=max(0,S0*(u^j)*(d^(N-j))*(1-div)-X);
end
for i=N-1:-1:0
for j=0:i
lattice(i+1,j+1)=exp(-r*deltaT)*(p*lattice(i+2,j+2)+(1-p)
*lattice(i+2,j+1));
end
end
price=lattice(1,1);
end
Outcome
LatticeEurPutDivP
計算歐式賣權在支付股票股利下的價格。
% LatticeEurPutDivP.m
function [price, lattice] =
LatticeEurPutDivP(S0,X,r,T,sigma,N,div)
deltaT = T/N;
u=exp(sigma * sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT) - d)/(u-d);
lattice = zeros(N+1,N+1);
for j=0:N
lattice(N+1,j+1)=max(0 ,
Code
X-S0*(u^j)*(d^(N-j))*(1-div));
end
for i=N-1:-1:0
for j=0:i
lattice(i+1,j+1) = exp(-r*deltaT) *(p *
lattice(i+2,j+2) + (1-p) * lattice(i+2,j+1));
end
end
price = lattice(1,1);
end
% test :
[price,lattice]=LatticeEurPutDivP(50,50,0.02,1,0.2,10,0.0
5)
Outcome
二、Dividend (Dollar)
LatticeEurCallDivD vs LatticeAmCallDivD
% LatticeEurCallDivD.m
function [price, lattice] =
LatticeEurCallDivD(S0,X,r,T,sigma,N,D,tau)
deltaT = T/N;
u=exp(sigma * sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT) - d)/(u-d);
S0a=S0-D*exp(-r*tau*deltaT);
lattice = zeros(N+1,N+1);
for j=0:N
lattice(N+1,j+1)=max(0 , S0a*(u^j)*(d^(N-j))-X);
end
for i=N-1:-1:0
for j=0:i
lattice(i+1,j+1) = exp(-r*deltaT) *(p *
lattice(i+2,j+2) + (1-p) * lattice(i+2,j+1));
end
end
price = lattice(1,1);
end
% LatticeAmCallDivD.m
function [price, lattice] =
LatticeAmCallDivD(S0,X,r,T,sigma,N,D,tau)
deltaT = T/N;
u=exp(sigma * sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT) - d)/(u-d);
S0a=S0-D*exp(-r*tau*deltaT);
lattice = zeros(N+1,N+1);
for j=0:N
lattice(N+1,j+1)=max(0 , S0a*(u^j)*(d^(N-j))-X);
end
for i=N-1:-1:tau
for j=0:i
..
lattice(i+1,j+1) = max( S0a*u^j*d^(i-j)-X , .
exp(-r*deltaT) *(p * lattice(i+2,j+2) + (1-p) *
lattice(i+2,j+1)));
end
end
for i=tau-1:-1:0
for j=0:i
lattice(i+1,j+1) = max(
S0a*u^j*d^(i-j)+D*exp(-r*(tau-i)*deltaT)-X , ...
exp(-r*deltaT) *(p * lattice(i+2,j+2) + (1-p) *
lattice(i+2,j+1)));
end
end
price = lattice(1,1);
end
Outcome
LatticeEurPutDivD
計算歐式賣權在支付現金股利下的價格。
% LatticeEurPutDivD
function [price, lattice] =
LatticeEurPutDivD(S0,X,r,T,sigma,N,D,tau)
deltaT = T/N;
Code
u=exp(sigma * sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT) - d)/(u-d);
S0a=S0-D*exp(-r*tau*deltaT);
lattice = zeros(N+1,N+1);
for j=0:N
lattice(N+1,j+1)=max(0 , X - S0a*(u^j)*(d^(N-j)));
end
for i=N-1:-1:0
for j=0:i
lattice(i+1,j+1) = exp(-r*deltaT) * ...
(p * lattice(i+2,j+2) + (1-p) *
lattice(i+2,j+1));
end
end
price = lattice(1,1);
end
Outcome
三、Trinomial Trees
TriEurPut
用三元樹模型計算歐式賣權的價格。
% TriEurPut.m
function [price, lattice] =
TriEurPut(S0,X,r,T,sigma,N,lamda)
deltaT = T/N;
u=exp(lamda*sigma * sqrt(deltaT));
Code d=1/u;
pu=1/(2*lamda^2)+(r-(sigma^2/2))*sqrt(deltaT)/(2*lamda*si
gma);
pm=1-1/(lamda^2);
pd=1-pu-pm;
lattice = zeros(N+1,2*N+1);
for j=1:N+1
lattice(N+1,j)=max(0 , X-S0*(d^(N-j+1)));
end
for j=N+2:2*N+1
lattice(N+1,j)=max(0 , X-S0*(u^(j-N-1)));
end
for i=N-1:-1:0
for j=1:2*i+1
lattice(i+1,j) = exp(-r*deltaT) * ...
(pd * lattice(i+2,j) + pm * lattice(i+2,j+1)+
...
pu*lattice(i+2,j+2));
end
end
price = lattice(1,1);
end
Outcome
CompBlsBinTri_EurPut
比較歐式賣權用內建Black–Scholes函數、二元樹模型與三元樹模型訂價的價格差異。從結果
可知,用三元樹模型時價格收斂較快。
% CompBlsBinTri_EurPut.m
function CompBlsBinTri_EurPut()
S0=50; X=50; r=0.04879; sigma=0.2; T=7/12; N=70;
lamda=1.41421;
for i=(1:N)
[LatticeC1(i),~] = LatticeEurPut(S0,X,r,T,sigma,i);
[LatticeC2(i),~] = TriEurPut(S0,X,r,T,sigma,i,lamda);
end
plot(1:N, ones(1,N)*BlsP);
hold on;
plot(1:N, LatticeC1);
plot(1:N, LatticeC2);
title('Bls vs. BinTree vs. TriTree');
xlabel('N');
ylabel('Price of European Put');
legend('Bls','LatticeEurPut','TriEurPut')
end
% LatticeEurPut.m
function[price,lattice]=LatticeEurPut(S0,X,r,T,sigma,N)
deltaT=T/N;
u=exp(sigma*sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT)-d)/(u-d);
lattice=zeros(N+1,N+1);
for j=0:N
lattice(N+1,j+1)=max(0,X-S0*(u^j)*(d^(N-j)));
end
for i=N-1:-1:0
for j=0:i
lattice(i+1,j+1)=exp(-r*deltaT)*(p*lattice(i+2,j+2)+(1-p)
*lattice(i+2,j+1));
end
end
price=lattice(1,1);
end
Outcome
TriAmPut
用三元樹模型計算美式賣權的價格。
% TriAmPut.m
function [price, lattice] =
TriAmPut(S0,X,r,T,sigma,N,lamda)
deltaT = T/N;
u=exp(lamda*sigma * sqrt(deltaT));
d=1/u;
pu=1/(2*lamda^2)+(r-(sigma^2/2))*sqrt(deltaT)/(2*lamda*si
gma);
pm=1-1/(lamda^2);
Code pd=1-pu-pm;
lattice = zeros(N+1,2*N+1);
price = lattice(1,1);
end
Outcome
CompBinTri_AmPut
比較美式賣權用二元樹模型與三元樹模型訂價的價格差異。
% CompBlsBinTri.m
function CompBinTri_AmPut()
S0=50; X=50; r=0.04879; sigma=0.2; T=7/12; N=70;
lamda=1.41421;
Code
LatticeC1 = zeros(1,N);
LatticeC2 = zeros(1,N);
plot(1:N, LatticeC1);
hold on
plot(1:N, LatticeC2);
title('BinTree vs. TriTree');
xlabel('N');
ylabel('Price of American Put');
legend('LatticeAmPut','TriAmPut')
end
% LatticeAmPut.m
function [price, lattice] =
LatticeAmPut(S0,X,r,T,sigma,N)
deltaT = T/N;
u=exp(sigma * sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT) - d)/(u-d);
lattice = zeros(N+1,N+1);
for j=0:N
lattice(N+1,j+1)=max(0, X-S0*(u^j)*(d^(N-j)));
end
for i=N-1:-1:0
for j=0:i
..
lattice(i+1,j+1) = max( X-S0*u^j*d^(i-j) , .
exp(-r*deltaT) *(p * lattice(i+2,j+2) + (1-p) *
lattice(i+2,j+1)));
end
end
price = lattice(1,1);
end
Outcome