HW 5
HW 5
101071041
TriEurPut
function [price, lattice] = TriEurPut(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*sigma);
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);
COMPARE
S0 = 50;
X = 50;
r = 0.04879;
sigma = 0.2;
T = 7/12;
N=70;
lamda=1.41421;
[BlsC,p] = blsprice(S0,X,r,T,sigma);
LatticeC1 = zeros(1,N);
LatticeC2 = zeros(1,N);
for i=(1:N)
[LatticeC1(i),tree1] = LatticeEurPut(S0,X,r,T,sigma,i);
[LatticeC2(i),tree2] = TriEurPut(S0,X,r,T,sigma,i,lamda);
end
plot(1:N, ones(1,N)*p);
hold on;
plot(1:N, LatticeC1);
plot(1:N, LatticeC2);
Q:lamd ?
TriAmPut
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*sigma);
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) = max(X-S0*u^j*d^(i-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);
compare
S0 = 50;
X = 50;
r = 0.04879;
sigma = 0.2;
T = 7/12;
N=70;
lamda=1.41421;
[BlsC,p] = blsprice(S0,X,r,T,sigma);
LatticeC1 = zeros(1,N);
LatticeC2 = zeros(1,N);
for i=(1:N)
[LatticeC1(i),tree1] = TriAmPut(S0,X,r,T,sigma,i,lamda);
[LatticeC2(i),tree2] = LatticeAmPut(S0,X,r,T,sigma,i);
end
plot(1:N, ones(1,N)*p,'b');
hold on;
plot(1:N, LatticeC1,'c');
plot(1:N, LatticeC2,'m');
legend('blsput','triamput','latticeamput');
Q: ????!
compare
S0=50;
X=52;
r=0.1;
T=5/12;
sigma=0.4;
NRepl1=1000;
NRepl2=200000;
Bls=blsprice(S0,X,r,T,sigma)
randn('seed',0);
[MC1000, CI1000] = BlsMC(S0,X,r,T,sigma,NRepl1)
randn('seed',0);
[MC200000, CI200000] =
MC1000 =
5.3861
Bls =
5.1911
CI1000 =
4.9789
5.7933
MC200000 =
5.0722
CI200000 =
5.0439
5.1004