Professional Documents
Culture Documents
HW 14
HW 14
HW 14
第六組
European Call
% EuPutImpl.m
function price = 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;
end
Outcome
Code [c,p]=blsprice(S0,X,r,T,sigma);
Impl=EuCallImpl(S0,X,r,T,sigma,Smax,dS,dT);
c
Impl
end
Outcome
將歐式賣權的價格與標的資產價格和時間的關係,用3D圖呈現。當時間越長時,選擇權價格
會有小幅度的增加。而股價越高時,選擇權的價格則有較明顯的增加。但是當股價很接近上限
Smax=100 時,價格又會遞減至0。
[ExpdS1,matval,vetS,vetT]=EuCallImplall(S0,X,r,T,sigma,Sm
ax,dS,dT);
matval
ExpdS1
mesh(vetT,vetS,matval);
ylabel('Stock price'); xlabel('Time'); title('European
Call Option, Implicit Method');
Code
end
% EuPutImplall.m
function [price,matval,vetS,vetT] =
EuCallImplall(S0,X,r,T,sigma,Smax,dS,dt)
end
Outcome
二、CRANK-NICOLSON METHOD
Down-and-Out Call
% DOPutCK.m
function price = DOCallCK(S0,X,r,T,sigma,Sb,Smax,dS,dt)
% set up grid and adjust increments if necessary
M = round((Smax-Sb)/dS);
dS = (Smax-Sb)/M;
N = round(T/dt);
dt = T/N;
matval = zeros(M+1,N+1);
vetS = linspace(Sb,Smax,M+1)';
Code
vetj = 0:N;
veti = vetS / dS;
end
Outcome
Down-and-In Call
%DownOutPut=DOPut(S0,X,r,T,sigma,Sb);
DownOutCallCK=DOCallCK(S0,X,r,T,sigma,Sb,Smax,dS,dT);
Code [c,p]=blsprice(S0,X,r,T,sigma);
DownInCallCK = c - DownOutCallCK;
%DownOutPut
DownOutCallCK
DownInCallCK
end
Outcome
三、AMERICAN PUT
Explicit Method
% EuPutExpl1.m
function price = AmPutExpl1(S0,X,r,T,sigma,Smax,dS,dt)
% set up grid and adjust increments if necessary
Code 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;
end
end
end
Implicit Method
% EuPutImpl.m
function price = AmPutImpl(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;
end
Outcome
Crank-Nicolson Method
% DOPutCK.m
function price = AmPutCK(S0,X,r,T,sigma,Sb,Smax,dS,dt)
Code
% set up grid and adjust increments if necessary
M = round((Smax-Sb)/dS);
dS = (Smax-Sb)/M;
N = round(T/dt);
dt = T/N;
matval = zeros(M+1,N+1);
vetS = linspace(Sb,Smax,M+1)';
vetj = 0:N;
veti = vetS / dS;
end
Outcome