3

我正在尝试对价差期权进行 MCS,其中价差期权的一条腿取决于四个底层证券。所以我在goddard http://www.goddardconsulting.ca/matlab-monte-carlo-assetpaths-corr.html上找到了代码, 并对其进行了修改以处理两个以上的资产,因为它不能处理两个以上的资产。我的代码如下所示:

% do a Cholesky factorization on the correlation matrix
R = chol(corr); 
% pre-allocate the output
S = nan(steps+1,nsims,nAssets);  
% generate uncorrelated random sequence
x = randn(steps,size(corr,2));
% correlate the sequences
ep = x*R;

% generate correlated random sequences and paths
for idx = 1:nsims

    A = repmat( drift*dt,steps,1 );
    B = ep*diag(sig)*sqrt(dt);
    [s1 s2] = size (B);
    A = reshape(A, s1,s2);  % A and B have to be reshaped to fit
    % Generate potential paths
    S(:,idx,:) = [ones(1,nAssets); cumprod(exp(A + B)) ]*diag(S0);
end

% If only one simulation then remove the unitary dimension
if nsims==1
    S = squeeze(S);
end   

并将其全部绘制出来,我得到了一个视觉上有用的结果。也就是说,我可以使用生成的路径作为选项计算所需的“腿”的输入。我非常荒谬的问题是:我实际上不明白什么

S(:,idx,:) = [ones(1,nAssets); cumprod(exp(A + B)) ]*diag(S0);

是在做。有人可以解释一下吗?我已经迭代了它,但它并没有变得更清晰。SO 是我用作模拟起始值的四个底层证券的四个最终值。

我实际上更愿意做的,因为它与非相关路径很好地配合,我理解 matlab 代码,是简单地在 matlab 中创建一个带有 HWV 的模型,计算漂移和长期平均值以及其他需要的因素,并在以某种方式将cholesky应用于维纳过程,然后生成相关路径,而不是像以前那样不相关路径。我需要将随机数乘以 cholesky 以使它们相关,然后将它们传递给 matlab 函数“模拟”,但我不知道该怎么做。

%%% 编辑 9 月 26 日 %%%

好的,我终于设法为我的 4 个资产创建了一个 HWV 对象,传递了各种合适大小的向量、数组和矩阵......这是我传递的相关矩阵:

(订购 NATGAS GASOIL FUELOIL EURUSD)

    1.0000    0.8819    0.8118   -0.5096
    0.8819    1.0000    0.9744   -0.3065
    0.8118    0.9744    1.0000   -0.2832
   -0.5096   -0.3065   -0.2832    1.0000

如您所见,显然欧元兑美元汇率与碳氢化合物呈负相关。

那么为什么模拟资产路径实际上是相同的呢? 在此处输入图像描述

EURUSD 应该完全不同,就像我使用上面的代码执行相关 GBM 时一样。

4

0 回答 0