Monte Carlo 在 Matlab 中模拟近似 delta

Monte Carlo simulation for approximating delta in Matlab

我需要编写 Monte Carlo 算法来逼近 Matlab 的增量并计算置信区间:

但出于某种原因,我的代码不起作用,有什么想法吗?

randn('state', 100)

%Problem and method parameters
S=10; E=9; sigma=0.1; r=0.06; T=1;
Dt=1e-3; N=T/Dt; M=2^17;h=10^(-4);

 delta = zeros(M,1);
  for i = 1:M
  Sfinal = S*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*randn(M,1));
  S_h = (S+h)*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*randn(M,1));
  delta(i) = exp(-r*T).*(max(Sfinal-E,0)-max(S_h-E,0))/h;
end
aM=mean(delta); 
bM=std(delta);
conf=[aM-1.96*bM/sqrt(M),aM+1.96*bM/sqrt(M)]

错误信息是

"Unable to perform assignment because the left and right sides have a different number of elements."

感谢任何帮助!

您不需要显式编写 for 循环,因为您已经对其进行了向量化。换句话说,SfinalS_h 是长度为 M 的向量,它们的第 i 个条目对应于 S_iS^h_i图片。由于 delta 表达式右侧的计算结果为长度为 M 的向量,其中包含 delta 的所有值,因此您应该将该向量直接分配给 delta,而不是 [=21] =].

还有一件事:图像中的伪代码似乎暗示应该使用相同的随机数来计算 S_iS^h_i。在您的代码中情况并非如此,因为您分别调用 randn 来计算 SfinalS_h。我认为您应该生成一次随机样本,保存它们,然后将其用于两次计算。

代码如下:

randn('state', 100)

%Problem and method parameters
S=10; E=9; sigma=0.1; r=0.06; T=1;
Dt=1e-3; N=T/Dt; M=2^17;h=10^(-4);

xi = randn(M,1);
Sfinal = S*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*xi);
S_h = (S+h)*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*xi);
delta = exp(-r*T).*(max(Sfinal-E,0)-max(S_h-E,0))/h;

aM=mean(delta); 
bM=std(delta);
conf=[aM-1.96*bM/sqrt(M),aM+1.96*bM/sqrt(M)]