You are on page 1of 18

Homework5

101071010

TriEurPut.m

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);

CompTriEurPut.m

S0 = 50; X = 50; r = 0.04879; sigma = 0.2;


T = 7/12; N=70; lamda=1.41421;
[BlsC,BlsP] = blsprice(S0,X,r,T,sigma);
LatticeP1 = zeros(1,N);
LatticeP2 = zeros(1,N);
for i=(1:N)
[LatticeP1(i),tree1] = LatticeEurPut(S0,X,r,T,sigma,i);
[LatticeP2(i),tree2] = TriEurPut(S0,X,r,T,sigma,i,lamda);
end
plot(1:N, ones(1,N)*BlsP,1:N, LatticeP1,1:N, LatticeP2);
legend('Blsprice','LatticeEurPut', 'TriEurPut');

TriEurPut
3.2
Blsprice
LatticeEurPut
TriEurPut

2.8

2.6

2.4

2.2

1.8

10

20

30

40

50

60

70

TriAmPut.m

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) = max(X-S0*d^(i+1)*u^(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);

CompTriAmPut.m

S0 = 50; X = 50; r = 0.04879; sigma = 0.2;


T = 7/12; N=70; lamda=1.41421;
[BlsC,BlsP] = blsprice(S0,X,r,T,sigma);
LatticeP1 = zeros(1,N);
LatticeP2 = zeros(1,N);
for i=(1:N)
[LatticeP1(i),tree1] = LatticeAmPut(S0,X,r,T,sigma,i);
[LatticeP2(i),tree2] = TriAmPut(S0,X,r,T,sigma,i,lamda);
end
plot(1:N, ones(1,N)*BlsP,1:N, LatticeP1,1:N, LatticeP2);
legend('Blsprice','LatticeAmPut', 'TriAmPut');

TriAmPut
3.2
Blsprice
LatticeAmPut
TriAmPut

2.8

2.6

2.4

2.2

1.8

10

20

30

40

50

60

70

BlsCallMC.m

function [Price,CI] =BlsCallMC(S0,X,r,T,sigma,NRepl)


nuT = (r - 0.5*sigma^2)*T;
siT = sigma * sqrt(T);

DiscPayoff = exp(-r*T) * max( 0 ,


S0*exp(nuT+siT*randn(NRepl,1)) - X);
[Price, Sd, CI] = normfit(DiscPayoff);

BlsCallMC1.m

function Price= BlsCallMC1(S0,X,r,T,sigma,NRepl)


nuT = (r - 0.5*sigma^2)*T;
siT = sigma * sqrt(T);
ST=mean(S0*exp(nuT+siT*randn(NRepl,1)));
Price = exp(-r*T) * max( 0 , ST - X);
STST
0MAXST-XST
BLSPRICE

CompBlsCallMC.m

S0=50;
X=52;
r=0.1;
T=5/12;
sigma=0.4;
NRepl1=1000;
NRepl2=50000;
BlsC=blsprice(S0,X,r,T,sigma);
randn('seed',0);
[MC1000, CI1000] = BlsCallMC(S0,X,r,T,sigma,NRepl1);
randn('seed',0);
[MC50000, CI50000] = BlsCallMC(S0,X,r,T,sigma,NRepl2);

BlsC
MC1000
CI1000
MC50000
CI50000

CompBlsCallMC1.m

S0=50;
X=52;
r=0.1;
T=5/12;
sigma=0.4;
NRepl=50000;
BlsC=blsprice(S0,X,r,T,sigma);
randn('seed',0);
P1= BlsCallMC(S0,X,r,T,sigma,NRepl);
randn('seed',0);
P2= BlsCallMC1(S0,X,r,T,sigma,NRepl);

BlsC
P1
P2

P1=e^(-rT)*E{max{ST-X,0}}
P2=e^(-rT)*max{E[ST]-X,0}

P1blscallprice

BlsCallMC vs BlsCallMC1

S0=50; X=52; r=0.1; T=5/12; sigma=0.4;


N=500;
[BlsC,BlsP] = blsprice(S0,X,r,T,sigma);
LatticeP1 = zeros(1,N);
LatticeP2 = zeros(1,N);
for i=(1:N)
LatticeP1(i)= BlsCallMC(S0,X,r,T,sigma,i);
LatticeP2(i)= BlsCallMC1(S0,X,r,T,sigma,i);
end
plot(1:N, ones(1,N)*BlsC,1:N, LatticeP1,1:N, LatticeP2);
legend('Blsprice','BlsCallMC','BlsCallMC1');

20
Blsprice
BlsCallMC
BlsCallMC1

18
16
14
12
10
8
6
4
2
0

50

100

150

200

250

300

350

400

450

500

BlsPutMC.m

function [Price,CI] = BlsPutMC(S0,X,r,T,sigma,NRepl)


nuT = (r - 0.5*sigma^2)*T;
siT = sigma * sqrt(T);

DiscPayoff = exp(-r*T) * max( 0 , X-S0*exp(nuT+siT*randn(NRepl,1)) );


[Price, Sd, CI] = normfit(DiscPayoff);

CompBlsPutMC.m

S0=50;
X=52;
r=0.1;
T=5/12;
sigma=0.4;
NRepl1=1000;
NRepl2=200000;
[BlsC,BlsP]=blsprice(S0,X,r,T,sigma);
randn('seed',0);
[MC1000, CI1000] = BlsPutMC(S0,X,r,T,sigma,NRepl1);
randn('seed',0);
[MC200000, CI200000] = BlsPutMC(S0,X,r,T,sigma,NRepl2);

BlsP
MC1000
CI1000
MC200000
CI200000

You might also like