主要内容

利用并行计算提高蒙特卡罗仿真性能

这个例子展示了如何使用并行计算工具箱™提高蒙特卡罗模拟的性能。

考虑一个几何布朗运动(GBM)过程,在这个过程中,您想要合并替代资产价格动态。具体来说,假设你想要包含一个时变的短期利率和一个波动面。要模拟的过程被写成

d 年代 t r t 年代 t d t + V t 年代 t 年代 t d W t

股票价格S (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 22.7 19.8 15.4 12.6 9.6 6.7 5.2 5.2 5.2 5.2 5.2 5.2 21.7 17.6 13.7 11.5 9.4 7.3 5.7 5.4 5.4 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.6 5.6 5.6 18.6 15.6 12.5 10.8 9.3 7.8 6.6 5.9 5.9 5.9 5.9 5.9 17.4 13.8 11.7 10.8 9.9 9.1 8.5 7.9 7.4 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.4 8.0 17.5 13.9 12.5 11.9 11.4 10.9 10.5 10.2 9.9 9.6 9.4 9.0 18.3 14.9 13.7 13.2 12.8 12.4 12.0 11.7 11.4 11.2 11.0 10.8 19.219.6 14.2 13.9 13.4 13.0 13.2 12.5 12.1 11.9 11.8 11.4]/100;男高音= [0 0.25 0.50 0.75 1 2 3 5 7 10];年百分比货币性= [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模型使用“绿带运动”.请注意,回报率是时间的确定函数,因此接受模拟时间作为其唯一的输入参数。相比之下,波动率必须考虑到货币性,并且是时间和股票价格的函数。此外,由于波动率面被定义为到期日时间而不是模拟时间的函数,因此波动率函数将当前模拟时间减去上次模拟价格过程的时间(10年)。这确保了当模拟时间接近其终端值时,波动率曲面的到期时间接近于零。虽然如果需要,可以使用更复杂的回报和波动函数,但以下假设是简单的线性插值。

Mu = @(t) interp1(次数,速率,t);sigma = @(t,S) interp2(货币性,次次,表面,S/走向,次次(结束)-t);MDL = gbm(,sigma,“StartState”、价格);

在没有并行化的情况下,模拟底层几何布朗运动路径。

tStart = tic;路径= simBySolution(mdl,NPeriods,“NTrials”NTrials,“DeltaTime”, dt,“Z”, Z);time1 = toc(tStart);

并行地模拟路径parfor(并行计算工具箱)循环。对于授权访问并行计算工具箱的用户,下面的代码段使用默认的本地配置文件自动创建并行池。方法可以更改此行为parpool(并行计算工具箱)函数。如果还没有创建并行池,那么下面的模拟在没有并行化的情况下可能会比前面的模拟慢。在这种情况下,重新运行下面的模拟,以评估并行化的真正好处。

tStart = tic;parPaths = 0 (NPeriods+1,1,NTrials);parfori = 1:NTrials parPaths(:,:,i) = simBySolution(mdl,NPeriods,“DeltaTime”, dt,“Z”Z (:,:, i));结束time2 = toc(tStart);

如果检查没有并行化的任意给定路径与对应的并行化路径,就会发现它们是相同的。此外,尽管相对性能有所不同,但通过并行化获得的结果通常会带来显著的改进。要评估性能改进,请以秒为单位检查每种方法的运行时加速通过并行模拟路径得到。

time1常规模拟运行时间的%,以秒为单位time2%并行模拟运行时间,以秒为单位加速= time1/time2%加速系数
Time1 = 6.1329 time2 = 2.5918 speedup = 2.3663

另请参阅

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

相关的例子

更多关于