(для данного кода) Мне нужно настроить граничное условие для определения цены Барьерного опциона. Барьерные опционы аналогичны европейским опционам, за исключением того, что когда цена акций пересекает барьер, цена опциона становится равной нулю Мы говорим здесь о Up and Out , a.k.a knock-out вариантах.
Выплата по опциону такая же, как для европейца, и эта выплата сохраняется в векторе Vold . Псевдокод:
if S >= B
Vold = 0;
else
Vold = max(S-K,0);
end
K - цена исполнения. Код, который необходимо настроить, приведен ниже. Когда я запускаю оригинальный код , Vold и Vnew сохраняют все значения после для k = 1: m . Корректировка должна быть выполнена таким образом, чтобы, когда цена акций пересекала барьер, значения Vold и Vnew не сохраняли значения или ноль как значение. Мы используем интерполяцию, чтобы найти точное значение параметра барьера вызова.
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
Выходные данные должны быть такими же, как для параметра «Защитный барьер» при построении графика.
https://imgur.com/a/xOavtbh