Алгоритм случайного блуждания для выбора цен - PullRequest
0 голосов
/ 02 июня 2018

Как реализовать алгоритм случайного блуждания с MATLAB?Я не понимаю этот алгоритм, потому что условие 3 никогда не выполняется.В конце я отправляю свой код.

Выберите временной шаг h>0, чтобы M=9/h было целым числом.
Установите log(L_0) = L_0 = 0.13 и Z(0)=0.
rho_k - это независимые случайные величины, распределенные по закону P(+-1)=0.5

1) log(L_{k+1}) = log(L_k)-0.5*sigma^2*h+sigma*sqrt(h)*rho_{k+1}

2) Z_{k+1} = Z_k - sigma* [(erfc((2*2^(1/2)*(log((25*exp(log L_k))/7) + 9/32))/3)/2 - erfc((2*2^(1/2)*(log(100*exp(log L_k)) + 9/32))/3)/2 + erfc((2*2^(1/2)*(log(7/(25*exp(log L_k))) - 9/32))/3)/56 - erfc((2*2^(1/2)*(log(196/(25*exp(log L_k))) - 9/32))/3)/56 + (exp(log L_k)*((2*2^(1/2)*exp(-(8*(log(7/(25*exp(log L_k))) - 9/32)^2)/9))/(3*exp(log L_k)*pi^(1/2)) - (2*2^(1/2)*exp(-(8*(log(196/(25*exp(log L_k))) - 9/32)^2)/9))/(3*exp(log L_k)*pi^(1/2))))/28 - exp(log L_k)*((2*2^(1/2)*exp(-(8*(log((25*exp(log L_k))/7) + 9/32)^2)/9))/(3*exp(log L_k)*pi^(1/2)) - (2*2^(1/2)*exp(-(8*(log(100*exp(log L_k)) + 9/32)^2)/9))/(3*exp(log L_k)*pi^(1/2))) - (14*2^(1/2)*exp(-(8*(log(7/(25*exp(log L_k))) + 9/32)^2)/9))/(75*exp(log L_k)*pi^(1/2)) + (14*2^(1/2)*exp(-(8*(log(196/(25*exp(log L_k))) + 9/32)^2)/9))/(75*exp(log L_k)*pi^(1/2)) + (2^(1/2)*exp(-(8*(log((25*exp(log L_k))/7) - 9/32)^2)/9))/(150*exp(log L_k)*pi^(1/2)) - (2^(1/2)*exp(-(8*(log(100*exp(log L_k)) - 9/32)^2)/9))/(150*exp(log L_k)*pi^(1/2))))]*sqrt(h)*rho_{k+1};

3) log L_k < log(H)+1/2*sigma^2*h-sigma*sqrt(h)

H=0.28
sigma=0.25
K=0.01

Чтобы реализовать алгоритм, мы следуем случайному блужданию, генерируемому (1), ив каждый раз t_k;мы проверяем, выполняется ли условие 3.Если этого не произойдет, L_k достиг граничной зоны, и мы остановим цепь на log(H).Если это так, мы выполняем (1) - (2), чтобы найти log(L_k+1) и Z_{k+1}.If k+1=M; мы останавливаемся, в противном случае мы продолжаем алгоритм.

Результатом моделирования каждой траектории является точка (t_kappa, log(L_kappa), Z_kappa).

Оцените ожидание E[(exp(log(L_{kappa}))-K)^+ * Chi(kappa=M) + Z_{kappa}]=price с помощью метода Монте-Карло и выполните 10^6 пробеги Монте-Карло.

Вот мой код.Это не работает, потому что я не получаю что-то около 0.0657 (результат).

Y = zeros(1,M+1); %ln L_k = Y(k)
Z = zeros(1,M+1);
sigma = 0.25;
H = 0.28;
K = 0.01;
Y(1) = 0.13; 
Z(1) = 0;
M = 90;
h = 0.1;

for k = 1:M+1
    vec = [-1 1];
    index = random('unid', length(vec),1);
    x(1,k) = vec(index);
end %'Rho' 

for k = 1:M
    if Y(k) < log(H) + 1/2*sigma^2*h - sigma*sqrt(h) %Bedingung
       Y(k+1) = Y(k) - (1/2)*(sigma)^2*h + sigma*sqrt(h)*x(k+1);
       Z(k+1) = Z(k) + (-sigma*(erfc((2*2^(1/2)*(log((25*exp(Y(k)))/7) + 9/32))/3)/2 - erfc((2*2^(1/2)*(log(100*exp(Y(k))) + 9/32))/3)/2 + erfc((2*2^(1/2)*(log(7/(25*exp(Y(k)))) - 9/32))/3)/56 - erfc((2*2^(1/2)*(log(196/(25*exp(Y(k)))) - 9/32))/3)/56 + (exp(Y(k))*((2*2^(1/2)*exp(-(8*(log(7/(25*exp(Y(k)))) - 9/32)^2)/9))/(3*exp(Y(k))*pi^(1/2)) - (2*2^(1/2)*exp(-(8*(log(196/(25*exp(Y(k)))) - 9/32)^2)/9))/(3*exp(Y(k))*pi^(1/2))))/28 - exp(Y(k))*((2*2^(1/2)*exp(-(8*(log((25*exp(Y(k)))/7) + 9/32)^2)/9))/(3*exp(Y(k))*pi^(1/2)) - (2*2^(1/2)*exp(-(8*(log(100*exp(Y(k))) + 9/32)^2)/9))/(3*exp(Y(k))*pi^(1/2))) - (14*2^(1/2)*exp(-(8*(log(7/(25*exp(Y(k)))) + 9/32)^2)/9))/(75*exp(Y(k))*pi^(1/2)) + (14*2^(1/2)*exp(-(8*(log(196/(25*exp(Y(k)))) + 9/32)^2)/9))/(75*exp(Y(k))*pi^(1/2)) + (2^(1/2)*exp(-(8*(log((25*exp(Y(k)))/7) - 9/32)^2)/9))/(150*exp(Y(k))*pi^(1/2)) - (2^(1/2)*exp(-(8*(log(100*exp(Y(k))) - 9/32)^2)/9))/(150*exp(Y(k))*pi^(1/2))))*sqrt(h)*x(k+1);          
    else
        Y(k)=log(H);            
        break
    end       
end

if k == M    
end

if (L(M)-K) > 0
   (L(M)-K);
else
   0;
end

return
exp(Y(M))-K+Z(M)
...