Monte Carlo方法的编程实现(以欧式期权定价为例)
在第一节中我们知道,期权的价值有两个基本逻辑。
第一,期权的价格,等于到期时期权期望收入按照无风险利率贴现到今天的价值;
第二,期权的价格,等于使用标的资产按照BSM方法完全复制该期权所导致的成本或者说等于完美对冲该期权所引发的成本。
那么当我们使用Monte Carlo方法来对一个欧式看涨期权进行定价的话,我们需要如何操作呢?
第一步,我们需要知道期权到期偿付的计算方法。对于一个欧式看涨期权来说,我们有:

第二步,我们需要刻画期权标的随机过程,在这里,我们假设期权标的的随机过程和我们在第一节第三部分中假设的一致:
![]()
即我们假设标的资产过程的漂移率和波动率均为常数。
第三步,我们把时间T分成N个小时间步长tΔ,即:
T=NΔt
第四步,我们尝试对一条路径进行模拟:
(https://www.daowen.com)
这样我们就可以得到一条路径中标的资产的整个价格路径,并且我们有:
![]()
第五步,我们对这个过程进行M次重复,最终我们就有M条路径,同时,根据定义,我们有:

定义C的样本标准差为sC,根据中心极限定律,Monte Carlo方法的逼近误差为:

这个公式的意思是,Monte Carlo方法的逼近误差会随着模拟次数M的增长,以
的速度下降,即当我们模拟次数增长100倍的时候,我们的逼近误差为原来的10%。
这个方法的代码实现如下(以R语言为例):


运行代码后,得到的结果将会和BSM模型计算出的结果较为接近。在这次运行中,得到了13.853 03,和解析解13.283 31仅有5%不到的误差。按照国内场外期权市场高达30%~50%的平均买卖价差来看,这可以轻易被买卖价差覆盖。如果增加M的数量的话(比方说100万,这将会消耗100倍的系统资源和时间),得到的Monte Carlo模拟解也会更加接近于解析解。
那可能有读者会问,为什么我们要用这么长的一段代码和更长的运算时间来解决一个我们可以用BSM公式直接计算出的问题呢?答案很简单,绝大部分的随机微分方程非常难解,BSM公式是一个特例,不具有普遍性。也就是说,我们绝大部分时候根本解不出BSM这样的解析解。甚至一些更复杂结构的期权,比方说美式或者亚式期权,其最终的偿付是根据整个资产的价格路径而非根据终值来确认的。这使得这些期权的解析解根本不存在。那其定价,就只能通过模拟来完成。
同时Monte Carlo方法的适用性非常广,能够解决绝大部分复杂衍生品的定价。定价的逻辑框架也非常简单直接,无论资产随机过程假设、衍生品结构设计和到期现金流如何复杂,均可以通过更改资产价格路径生成机制或者到期偿付函数进行处理,对于新产品结构的支持相应极快。在云计算技术成熟的今天,可以通过并行计算大幅增加计算速度。因此,对于大部分复杂结构的衍生品,绝大部分金融机构也不会费劲力气去寻找解析解,Monte Carlo是解决一切问题的“万金油”。