我正在尝试对局部波动率模型进行蒙特卡罗模拟,即
dSt = sigma(St,t) * St dWt .
不幸的是,不能应用 Matlab 包类 sde,因为它的功能相当复杂。
出于这个原因,我使用 Euler-Mayurama 方法手动模拟这个 SDE。更具体地说,我使用 Ito 的公式来获取日志过程的 SDEXt=log(St)
dXt = -1/2 sigma^2(exp(Xt),t) dt + sigma(exp(Xt),t) dWt
代码如下:
function [S]=geom_bb(sigma,T,N,m)
% T.. Time horizon, sigma.. standard deviation, N.. timesteps, m.. dimensions
X=zeros(N+1,m);
dt=T/N;
t=(0:N)'*dt;
dW=randn(N,m);
for j=1:N
X(j+1,:)=X(j,:) - 1/2* sigma(exp(X(j,:)),t(j))^2 * sqrt(dt) + sigma(exp(X(j,:)),t(j))*dW(j,:);
end
S=exp(X*sqrt(dt));
end
此代码对小 sigma 工作得相当好,但是对于 10 左右的 sigma,进程 S 总是趋于零。这不应该发生,因为 S 是鞅,因此期望 = 1(至少对于常数 sigma)。然而 X 应该被正确模拟,因为平均值是准确的。
谁能帮我解决这个问题?这仅仅是由于数字舍入错误吗?是否应该首选另一种模拟方法来解决此问题?