zoukankan      html  css  js  c++  java
  • QuantLib 金融计算——原理之蒙特卡洛(Monte Carlo)

    QuantLib 金融计算——原理之蒙特卡洛(Monte Carlo)

    概述

    在金融工程计算中,蒙特卡洛最常见的应用场景是为衍生品定价,特别是路径依赖的奇异期权。

    作为金融工程计算的三大方法论之一,相较于树方法,蒙特卡洛对变量动态结构的要求更为宽松;相较于有限差分方法,蒙特卡洛无须在边界条件和网格上做精心的设计。

    这套方法论一直体现出一种大道至简、无招胜有招的特点,非常适合这个算力爆发的时代。

    蒙特卡洛与设计模式

    衍生品定价中,实施蒙特卡洛通常分为下列几个步骤:

    1. 为底层变量(资产价格或者利率等)生成一条路径;
      • 若要使用对偶变量缩减方差,还需生成一条对偶路径;
    2. 计算出衍生品合约在这条路径上的实现价格;
      • 若要使用控制变量缩减方差,还需计算控制变量对应的合约(该合约要有解析解)在这条路经上的实现价格,用来修正第 2 步的实现价格;
    3. 反复执行第 1 和 2 步,汇总若干实现价格的样本;
    4. 计算样本的均值作为最终定价的结果。

    由此可见,蒙特卡洛非常贴近“模板方法模式”的使用场景,将生成路径、计算实现价格、使用对偶变量和使用控制变量分别抽象出来,由基类负责这些方法的协同,而方法的具体实现就交给派生类了。

    事实上,QuantLib 中若干用于期权定价的蒙特卡洛引擎就是按照模板方法模式设计的,其中最核心的两个类分别是 McSimulationMonteCarloModel

    McSimulation 为其所有派生类定义抽象接口,即:

    • pathPricer
    • pathGenerator
    • controlPathPricer
    • controlPathGenerator
    • controlPricingEngine

    不过,实际的计算任务被委派给了 MonteCarloModel

    随机路径的模拟

    很自然地,模拟随机路径的任务落在了 StochasticProcess 及其派生类上,其中最核心的方法是 evolve,它接受当前的状态、时间间隔和一个(组)随机数,进而推算出下一时刻的状态,递归地调用就实现了路径的模拟。

    效率的瓶颈与变通的办法

    蒙特卡洛可以大力出奇迹,但是大力通常意味着多花时间。

    事实上,为了达到普适性,StochasticProcessevolve 方法牺牲了太多的效率。以最常用的 GeneralizedBlackScholesProcess 为例,

    • 一方面,evolve 方法直接和间接调用的成员方法几乎都是虚方法;
    • 另一方面,这些虚方法内部的实现通常并不简单,依然是若干复杂虚方法的调用。第二方面是制约计算效率的主要瓶颈。

    对于最简单的常系数 GBM,并不推荐直接用 GeneralizedBlackScholesProcess 模拟随机路径,一个变通的办法是为常系数 GBM 写一个专门的派生类(基类是 GeneralizedBlackScholesProcess),根据 GBM 的转移密度公式覆盖掉 GeneralizedBlackScholesProcess 的接口,抄近路,直接忽略掉 GeneralizedBlackScholesProcess 低效率的默认实现。

    对于复杂一些的局部波动率 GBM,也许也可以用这个办法。(Analytical approximation of the transition density in a local volatility model

    扩展阅读

    ★ 持续学习 ★ 坚持创作 ★
  • 相关阅读:
    【Linux】没有网的情况下如何安装GCC
    【PL/SQL】PLSQL Developer注册码
    【JS】字符串操作
    【java】svn显示×
    线段树
    病毒感染者
    并查集
    最小的N个和(堆)
    priority_queue的用法
    打印杨辉三角
  • 原文地址:https://www.cnblogs.com/xuruilong100/p/14696290.html
Copyright © 2011-2022 走看看