主要内容

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

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

考虑一个几何布朗运动(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)。在这个例子中,回报率是时间的确定性函数,而波动性是时间和当前股价的函数。收益率和波动性都是在离散网格上定义的,中间值通过线性插值得到。例如,这样的模拟可以用来支持少交易期权的定价。万博1manbetx

为了包含一个无风险短期利率的时间序列,假设你得到了以下作为时间函数的确定性短期利率过程。

次数= [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;tenor = [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(times,rates,t);∑= @(t,S) interp2(moneyness,tenor,surface,S/strike,tenor(end)-t);mdl =“绿带运动”(μ、σ“StartState”、价格);

在没有平行化的情况下模拟隐含的几何布朗运动路径。

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

并行模拟路径parfor(并行计算工具箱)循环。对于获准访问并行计算工具箱的用户,以下代码段将使用默认本地配置文件自动创建并行池。如果需要,可以通过首先调用parpool(并行计算工具箱)函数。如果还没有创建并行池,下面的模拟可能会比没有并行化的前一个模拟慢。在这种情况下,重新运行下面的模拟来评估并行化的真正好处。

tStart =抽搐;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

另请参阅

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

相关的例子

更多关于