(对于给定的代码)我需要调整边界条件以对屏障期权定价。障碍期权就像欧洲期权一样,除了一旦股票价格越过障碍,期权价格就变为零。我们在这里谈论的是 Up and Out ,也就是 knock-out 选项。
该期权的收益与欧洲收益相同,该收益存储在 Vold 向量中。伪代码是:
if S >= B
Vold = 0;
else
Vold = max(S-K,0);
end
K为行使价。下面给出了必须调整的代码。当我运行original code时,Vold和Vnew在 for k = 1:m 运行后存储所有值。调整必须以以下方式进行:一旦股票价格越过障碍,Vold和Vnew将不存储任何值或将零存储为值。我们使用内插法来找到Call barrier选项的确切值。
call_fdm = interp1(S,Vold,S0);
代码类似于热方程(这是相同的修改版本)。我确切知道必须在哪里进行更改。
for k=1:M
% Boundary condition for European call option
boundary = [l(1)*0;zeros(N-3,1);u(N-1)*(Smax*exp(-q*(k-1)*dtau) -
K*exp(-r*(k-1)*dtau))];
% Explicit iteration scheme
for j=1:N-1
if(j==1)
Vnew(j) = d(j)*Vold(j) + u(j)*Vold(j+1);
elseif(j<N-1)
Vnew(j) = l(j)*Vold(j-1) + d(j)*Vold(j) + u(j)*Vold(j+1);
else
Vnew(j) = l(j)*Vold(j-1) + d(j)*Vold(j);
end
end
% Update the vectors from time k to time k+1
Vold = Vnew + boundary;
end
在绘制时,输出必须是敲除障碍选项的输出。