HW 11

You might also like

You are on page 1of 19

HW1

SIGN
function [ payoff, lattice ] = SIGN_bit( S0, K, r, T, sigma, N )

deltaT = T/N;
u = exp( sigma * sqrt(deltaT) );
d = 1/u;
p = ( exp( r * deltaT ) - d ) / ( u - d );

for i = 0 : N

P = S0 * u^(N-i) * d^(i);

S(i+1) = 10;

if P > K

S(i+1) = 10 * (1+(P-K)/K);

end
end

for i = N : -1 : 1

for j = 0 : i-1

S(j+1) = max(10, exp(-r*deltaT) * ( S(j+1)*p + S(j+2)*(1-p) ) );

end

lattice(1:i,i) = S(1:i);
end

payoff = S(1);

end

CompSIGN

%demo for SIGN


S = 400;
K = 336.69;
r = 0.1;
sigma = 0.2;
T = 1;
N = 5000;
for i = 1:200
bit(i) = SIGN_bit(i+300,K,r,sigma,T,N);
end
plot(301:500,bit)
for i = 1:200
bit(i) = SIGN_bit(S,i+300,r,sigma,T,N);
end
plot(301:500,bit)

CompSIGN

HW2

EuPutExpl1.m

function [price,matval,vetS,vetT] = EuCallExpl1(S0,X,r,T,sigma,Smax,dS,dt)


% set up grid and adjust increments if necessary
M = round(Smax/dS);
dS = Smax/M;
N = round(T/dt);
dt = T/N;
matval = zeros(M+1,N+1);
vetS = linspace(0,Smax,M+1)';
vetj = 0:N;
veti = 0:M;
vetT= linspace(0,T,N+1)';
% set up boundary conditions
matval(:,N+1) = max(vetS-X,0);
matval(1,:) = 0;
matval(M+1,:) = (Smax-X)*exp(-r*dt*(N-vetj));
% set up coefficients
a = 0.5*dt*(sigma^2*veti - r).*veti;
b = 1- dt*(sigma^2*veti.^2 + r);
c = 0.5*dt*(sigma^2*veti + r).*veti;
% solve backward in time
for j=N:-1:1
for i=2:M
matval(i,j) = a(i)*matval(i-1,j+1) + b(i)*matval(i,j+1)+ ...
c(i)*matval(i+1,j+1);
end
end

EuPutExpl1.m

% find closest point to S0 on the grid and return price


% possibly with a linear interpolation
idown = floor(S0/dS);
iup = ceil(S0/dS);
if idown == iup
price = matval(idown+1,1);
else
price = matval(idown+1,1) + ...
(S0 -(idown+1)*dS)*(matval(iup+1,1) - matval(iup,1))/dS;
end

CompBlsExpl.m Compare blsprice and BlsE


xpl

S0=50;X=50;r=0.1;T=5/12;
sigma1=0.4;sigma2=0.3;
Smax=100;
dS1=2;
dS2=1.5;
dS3=1;
dT=5/1200;
c1=blsprice(S0,X,r,T,sigma1);
Exps04=EuCallExpl1(S0,X,r,T,sigma1,Smax,dS1,dT);
c2=blsprice(S0,X,r,T,sigma2);
Exps03dS2=EuCallExpl1(S0,X,r,T,sigma2,Smax,dS1,dT);
ExpdS15=EuCallExpl1(S0,X,r,T,sigma2,Smax,dS2,dT);
ExpdS1=EuCallExpl1(S0,X,r,T,sigma2,Smax,dS3,dT);
c1
Exps04
c2
Exps03dS2
ExpdS15
ExpdS1

CompBlsExpl.m Compare blsprice and BlsE


xpl
c1 =

6.1165

Exps04 =

-3.4383e+08

c2 =

4.8851

Exps03dS2 =

4.8695

ExpdS15 =

2.3832e+06

ExpdS1 =

3.4095e+42

CompExpl3D.m Compare blsprice and BlsH


alton
c1 =

6.1165

Exps04 =

-3.4383e+08

c2 =

4.8851

Exps03dS2 =

4.8695

ExpdS15 =

2.3832e+06

ExpdS1 =

3.4095e+42

CompExpl3D.m Compare blsprice and BlsH


alton

S0=50;
X=50;
r=0.1;
T=5/12;
sigma=0.3;
Smax=100;
dS=2;
dt=5/1200;
[ExpdS1,matval,vetS,vetT]=EuCallExpl1(S0,X,r,T,sigma,Smax,dS,dt);
matval
ExpdS1
mesh(vetT,vetS,matval);
ylabel('Stock price'); xlabel('Time'); title('European Call Option, Explicit Method');

CompExpl3D.m Compare blsprice and BlsH


alton

HW3

EuPutImplall.m

% EuPutImpl.m
function [price,matval,vetS,vetT] = EuCallImpl(S0,X,r,T,sigma,Smax,dS,dt)
% set up grid and adjust increments if necessary
M = round(Smax/dS);
dS = Smax/M;
N = round(T/dt);
dt = T/N;
matval = zeros(M+1,N+1);
vetS = linspace(0,Smax,M+1)';
vetj = 0:N;
veti = 0:M;
vetT= linspace(0,T,N+1)';
% set up boundary conditions
matval(:,N+1) = max(vetS-X,0);
matval(1,:) = (Smax-X)*exp(-r*dt*(N-vetj));
matval(M+1,:) = 0;

EuPutImplall.m

% set up the tridiagonal coefficients matrix


a = 0.5*(r*dt*veti-sigma^2*dt*(veti.^2));
b = 1+sigma^2*dt*(veti.^2)+r*dt;
c = -0.5*(r*dt*veti+sigma^2*dt*(veti.^2));
coeff = diag(a(3:M),-1) + diag(b(2:M)) + diag(c(2:M-1),1);
[L,U] = lu(coeff);
% solve the sequence of linear systems
aux = zeros(M-1,1);
for j=N:-1:1
aux(1) = - a(2) * matval(1,j);
%matval(2:M,j) = U \ (L \ (matval(2:M,j+1) + aux));
matval(2:M,j) = coeff \ (matval(2:M,j+1) + aux);
end
% find closest point to S0 on the grid and return price
% possibly with a linear interpolation
idown = floor(S0/dS);
iup = ceil(S0/dS);
if idown == iup
price = matval(idown+1,1);
else
price = matval(idown+1,1) + ...
(S0 - idown*dS)*(matval(idown+2,1) - matval(idown+1,1))/dS;
end

CompBlsImplall.m

% CompBlsExpl.m Compare blsprice and BlsHalton


S0=50;
X=50;
r=0.1;
T=5/12;
sigma=0.4;
Smax=100;
dS1=0.5;
dS2=2;
dT=5/2400;
c=blsprice(S0,X,r,T,sigma);
Implds1=EuCallImpl(S0,X,r,T,sigma,Smax,dS1,dT);
Implds2=EuCallImpl(S0,X,r,T,sigma,Smax,dS2,dT);
c
Implds1
Implds2

CompBlsImplall.m

>> CompBlsImpl

c=

6.1165

Implds1 =
5.7185

Implds2 =
5.6977

CompImpl3D.m

% CompImpl3D.m Compare blsprice and BlsHalton


S0=50;
X=50;
r=0.1;
T=5/12;
sigma=0.3
Smax=100;
dS=1.5;
dT=5/1200;
[price,matval,vetS,vetT]=EuCallImpl(S0,X,r,T,sigma,Smax,dS,dT);
matval
price
mesh(vetT,vetS,matval);
ylabel('Stock price'); xlabel('Time'); title('European Call Option, Implicit Method');

CompImpl3D.m

You might also like