主要内容

用平行计算提高蒙特卡罗模拟性能

此示例显示如何使用并行计算工具箱™提高蒙特卡罗模拟的性能。

考虑一个要包含替代资产价格动态的几何布朗运动(GBM)过程。具体而言,假设您想要包括时变的短速率和波动率。模拟的过程写为

D. S. T. = R. T. S. T. D. T. + V. T. S. T. S. T. D. W. T.

对于股票价格英石),回报率r(t),波动性v(t,s(t))和布朗运动w(t)。在此示例中,返回率是时间的确定性函数,并且波动性是时间和当前股价的函数。返回和波动率都在离散网格上定义,使得通过线性插值获得中间值。例如,这种模拟可用于支持薄交易选项的定价。金宝app

包括一个无风险的短速率的时间序列,假设您可以作为时间的函数导出以下确定性的短速率过程。

时代= [0 0.25 0.5 1 2 3 4 5 6 7 8 9 10];% 多年速率= [0.1 0.2 0.3 0.4 0.5 0.8 1.25 1.75 2.0 2.2 2.25 2.50 2.75] / 100;

假设您可以推导出以下的挥发性表面,其列对应于简单的相对款项,或现货价格与罢工价格的比率,并且其行对应于成熟时间或更新时间。

表面= [28.1 25.3 20.6 16.3 11.2 6.2 4.9 4.9 4.9 4.9 4.9 4.9 4.9 4.9 4.9 4.9 4.9 4.9 15.4 12.6 9.6 6.7 5.2 5.2 5.2 5.2 5.2 21.7 13.7 11.5 9.4 7.3 13.7 11.5 5.4 7.3 5.7 5.4 5.4 5.4 19.8 16.4 12.9 11.1 9.3 7.6 6.2 5.6 5.6 5.65.6 18.6 15.6 12.5 10.8 9.3 7.6 5.6 5.9 5.9 5.9 5.9 5.9 5.9 5.9 5.9 5.9 5.9 5.9 5.9 13.8 11.7 10.9 9.1 8.5 7.9 7.3 7.3 7.3 17.1 13.7 12.0 11.2 10.6 10.0 9.5 9.1 8.8 8.6 8.9 11.5 13.9 12.5 11.9 11.4 10.9 10.5 10.2 9.6 9.4 9.01019.914.9 13.7 13.2 12.8 12.4 12.0 11.7 11.4 11.2 11.0 10.8 19.2 19.6 14.2 13.9 13.4 13.0 13.2 12.5 12.1 11.9 11.8 11.4] / 100;Tenor = [0 0.25 0.50 0.75 1 2 3 5 7 10];% 多年Moneyness = [0.25 0.5 0.75 0.8 0.9 1 1.10 1.25 1.50 2 3 5];

设置仿真参数。以下假设潜在资产的价格最初等于罢工价格,并且潜在资产的价格每月模拟10年或120个月。作为一个简单的例证,模拟了100个样品路径。

价格= 100;罢工= 100;dt = 1/12;nperiods = 120;ntrials = 100;

为了重现性,将随机数发生器设置为默认值,并绘制驱动模拟的高斯随机变体。不需要产生随机变体来产生并行计算的性能提高,而是允许产生的模拟路径匹配传统(即,不行化)模拟的路径。此外,生成独立的高斯随机变体作为输入也保证所有模拟路径都是独立的。

RNG.默认z = randn(nperiods,1,ntrials);

使用返回和波动函数和GBM模型使用GBM.。请注意,返回率是时间的确定性函数,因此接受模拟时间作为其唯一输入参数。相比之下,波动率必须占钱,并且是时间和股票价格的函数。此外,由于挥发性表面被定义为成熟时间而不是模拟时间的函数,因此波动率函数从价格进程的最后一次(10年)中减去电流模拟时间。这确保了随着仿真时间接近其终端值,挥发性表面的成熟时间接近零。虽然如果需要,可以使用更加精细的返回和挥发性函数,但以下假设简单的线性插值。

mu = @(t)interp1(次,速率,t);Sigma = @(t,s)Interp2(钞票,表面,s /罢工,男高音(端)-t);mdl = gbm(mu,sigma,'startstate',价格);

模拟底层几何布朗运动的路径而不行化。

tstart = tic;路径= SimBysolution(MDL,nperiods,'ntrial',ntrials,'deltatime',dt,'z',z);time1 = toc(tstart);

使用a并行模拟路径议案(并行计算工具箱)环形。对于获取许可以访问“并行计算”工具箱的用户,以下代码段使用默认本地配置文件自动创建并行池。如果需要,首先调用此行为可以更改parpool.(并行计算工具箱)功能。如果尚未创建并行池,则以下仿真可能比上一个未被并行化的模拟慢。在这种情况下,重新运行以下模拟以评估并行化的真正益处。

tstart = tic;parpaths =零(nperiods + 1,1,ntrial);议案i = 1:ntrials parpath(:,:,i)= simbysolution(mdl,nperiods,'deltatime',dt,'z',z(:,:,i));结尾time2 = toc(tstart);

如果检查没有并行化的没有并行化的任何给定路径,则会看到它们是相同的。此外,尽管相对性能变化,但是通过并行化获得的结果通常会产生显着的改进。为了评估性能改进,请在几秒钟内检查每个方法的运行时间加速通过并行模拟路径。

时间1常规模拟的%经过时间,在几秒钟内时间2%并行模拟时间经过时间,以秒为单位speedup = time1 / time2%加速因子
Time1 = 6.1329 Time2 = 2.5918 Speedup = 2.3663

也可以看看

||||||||||||||||||||

相关例子

更多关于