如果未做特别说明,文中的程序都是 Python3 代码。

QuantLib 金融计算——随机过程之 Heston 过程

载入模块

  1. import QuantLib as ql
  2. import pandas as pd
  3. import numpy as np
  4. import seaborn as sn
  5. print(ql.__version__)
  1. 1.12

Heston 过程

著名的 Heston 模型描述了下列 SDE:

\[\begin{aligned}
d S_t & = \mu S_t d t + \sqrt { V_t } S_t d W_t^S \\
d V_t & = \kappa \left( \theta - V_t \right) d t + \sigma \sqrt { V_t } d W_t^V \\
d W_t^S d W_t^V & = \rho d t
\end{aligned}
\]

quantlib-python 中 Heston 过程的构造函数如下:

  1. HestonProcess(riskFreeRate,
  2. dividendYield,
  3. s0,
  4. v0,
  5. kappa,
  6. theta,
  7. sigma,
  8. rho)

其中,

  • riskFreeRateYieldTermStructureHandle 对象,描述无风险利率的期限结构;
  • dividendYieldYieldTermStructureHandle 对象,描述股息率的期限结构;
  • s0QuoteHandle 对象,资产价格的起始值;
  • v0:浮点数,波动率的起始值;
  • kappathetasigma:浮点数,描述波动率的 SDE 的参数;
  • rho:浮点数,模型中两个布朗运动之间的相关性

除了一些检查器之外,HestonProcess 没有提过其他特别的成员函数。

由于方程没有显式解,因此必须在 evolve 函数中使用算法进行离散化。quantlib-python 默认的离散化方法是 Quadratic Exponential Martingale 方法(或称 Quadratic Exponential 方法),具体的算法细节请查看参考文献(Andersen 和 Leif,2008)

由于 evolve 函数将离散化计算中对布朗运动的离散化以参数形式暴露了出来,使得用户可以容易地显现出随机波动率对资产价格序列的影响。下面的例子比较了一般 Black Scholes 过程和 Heston 过程,所模拟的资产价格除了波动率结构以外,都完全一致。

  1. def testingStochasticProcesses2(seed):
  2. refDate = ql.Date(27, ql.January, 2019)
  3. riskFreeRate = 0.0321
  4. dividendRate = 0.0128
  5. spot = 52.0
  6. cal = ql.China()
  7. dc = ql.ActualActual()
  8. rdHandle = ql.YieldTermStructureHandle(
  9. ql.FlatForward(refDate, riskFreeRate, dc))
  10. rqHandle = ql.YieldTermStructureHandle(
  11. ql.FlatForward(refDate, dividendRate, dc))
  12. spotHandle = ql.QuoteHandle(
  13. ql.SimpleQuote(spot))
  14. kappa = 1.2
  15. theta = 0.08
  16. sigma = 0.05
  17. rho = -0.6
  18. v0 = theta
  19. hestonProcess = ql.HestonProcess(
  20. rdHandle, rqHandle, spotHandle, v0,
  21. kappa, theta, sigma, rho)
  22. volHandle = ql.BlackVolTermStructureHandle(
  23. ql.BlackConstantVol(refDate, cal, np.sqrt(v0), dc))
  24. bsmProcess = ql.BlackScholesMertonProcess(
  25. spotHandle, rqHandle, rdHandle, volHandle)
  26. unifMt = ql.MersenneTwisterUniformRng(seed)
  27. bmGauss = ql.BoxMullerMersenneTwisterGaussianRng(unifMt)
  28. dt = 0.004
  29. numVals = 250
  30. dw = ql.Array(2)
  31. x = ql.Array(2)
  32. x[0] = spotHandle.value()
  33. x[1] = v0
  34. y = x[0]
  35. htn = pd.DataFrame(
  36. dict(
  37. t=np.linspace(0, dt * numVals, numVals + 1),
  38. price=np.nan,
  39. vol=np.nan))
  40. bsm = pd.DataFrame(
  41. dict(
  42. t=np.linspace(0, dt * numVals, numVals + 1),
  43. price=np.nan,
  44. vol=v0))
  45. htn.loc[0, 'price'] = x[0]
  46. htn.loc[0, 'vol'] = x[1]
  47. bsm.loc[0, 'price'] = y
  48. for j in range(1, numVals + 1):
  49. dw[0] = bmGauss.next().value()
  50. dw[1] = bmGauss.next().value()
  51. x = hestonProcess.evolve(htn.loc[j, 't'], x, dt, dw)
  52. y = bsmProcess.evolve(bsm.loc[j, 't'], y, dt, dw[0])
  53. htn.loc[j, 'price'] = x[0]
  54. htn.loc[j, 'vol'] = x[1]
  55. bsm.loc[j, 'price'] = y
  56. htn = htn.melt(
  57. id_vars='t',
  58. var_name='component',
  59. value_name='path')
  60. htn['type'] = 'stochastic vol'
  61. bsm = bsm.melt(
  62. id_vars='t',
  63. var_name='component',
  64. value_name='path')
  65. bsm['type'] = 'constant vol'
  66. htn_bsm = pd.concat([htn, bsm])
  67. sn.relplot(
  68. x='t',
  69. y='path',
  70. data=htn_bsm,
  71. col='component',
  72. hue='type',
  73. kind="line",
  74. height=8,
  75. facet_kws=dict(sharey=False))
  76. testingStochasticProcesses2(100)

参考文献

  • Andersen, Leif. 2008. Simple and efficient simulation of the Heston stochastic volatility model. Journal of Computational Finance 11: 1–42.

QuantLib 金融计算——随机过程之 Heston 过程的更多相关文章

  1. QuantLib 金融计算——随机过程之一般 Black Scholes 过程

    目录 QuantLib 金融计算--随机过程之一般 Black Scholes 过程 一般 Black Scholes 过程 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib ...

  2. QuantLib 金融计算——随机过程之概述

    目录 QuantLib 金融计算--随机过程之概述 框架 用法与接口 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--随机过程之概述 载入模块 import Q ...

  3. QuantLib 金融计算

    我的微信:xuruilong100 <Implementing QuantLib>译后记 QuantLib 金融计算 QuantLib 入门 基本组件之 Date 类 基本组件之 Cale ...

  4. QuantLib 金融计算——高级话题之模拟跳扩散过程

    目录 QuantLib 金融计算--高级话题之模拟跳扩散过程 跳扩散过程 模拟算法 面临的问题 "脏"的方法 "干净"的方法 实现 示例 参考文献 如果未做特别 ...

  5. QuantLib 金融计算——QuantLib 入门

    目录 QuantLib 金融计算--QuantLib 入门 简介 主要功能 安装与使用 学习指南 The HARD Way The EASY Way QuantLib 金融计算--QuantLib 入 ...

  6. QuantLib 金融计算——数学工具之求解器

    目录 QuantLib 金融计算--数学工具之求解器 概述 调用方式 非 Newton 算法(不需要导数) Newton 算法(需要导数) 如果未做特别说明,文中的程序都是 Python3 代码. Q ...

  7. QuantLib 金融计算——数学工具之优化器

    目录 QuantLib 金融计算--数学工具之优化器 概述 Optimizer Constraint OptimizationMethod EndCriteria 示例 Rosenbrock 问题 校 ...

  8. QuantLib 金融计算——案例之普通欧式期权分析

    目录 QuantLib 金融计算--案例之普通欧式期权分析 概述 普通欧式期权公式法定价 1. 配置期权合约条款 2. 构建期权对象 3. 配置定价引擎 4. 计算 题外话:天数计算规则 Quote ...

  9. QuantLib 金融计算——收益率曲线之构建曲线(5)

    目录 QuantLib 金融计算--收益率曲线之构建曲线(5) 概述 Nelson-Siegel 模型家族的成员 Nelson-Siegel 模型 Svensson 模型 修正 Svensson 模型 ...

随机推荐

  1. Code First 之类继承

    关于Entity Framework 的code first 模式,相信大家都不陌生了.本文就来看看实体继承在 codefirst里的用法. 第一步  添加 code first 的环境 这里为了方便 ...

  2. python全栈考试

    1.执行 Python 脚本的两种方式 shell直接调用python脚本 python run.py 调用解释器来调用脚本  2.2.简述位.字节的关系 每8个位bit,组成一个字节byte. 一个 ...

  3. PHP(七)函数

  4. What Are Tango Poses?Tango姿态是什么?

     What Are Tango Poses?什么是Tango姿态? As your device moves through 3D space, it calculates where it is ( ...

  5. Npoi List DataTable导出一个Excel多个sheet 下载

    参考: http://blog.csdn.net/zhouqinghe24/article/details/8649346 参考下载http://www.cnblogs.com/dyllove98/a ...

  6. [label][git-commands] Several Git Commands

    The process of Git commands Operation 1. git commit -m 'fist post' Windows PowerShellCopyright (C) 2 ...

  7. 6.nuget安装C#Driver驱动ZooKeeperNet

    一: C# 的Drivers   1. nuget上下载 zookeeper.Net   IWatcher是什么?: client 连接到 server 后,会在server上面注册一个watcher ...

  8. css transition & animation

    transition 支持:IE10+ img{ transition: 1s 1s height ease; } transition-property: 属性transition-duration ...

  9. 自定义TFS工作项“所有链接”列表中的列

    这个功能只有使用团队资源管理器查看工作项才有

  10. sql--CONVERT、FOR XML PATH解决实际问题

    需求:每个平台分类下的门店,每个门店的名称.图片路径.评分,每个门店下的四个产品的名称.图片路径.评分 思路: 一开始门店动态化好写,用Ajax就行了.但是每个门店下面的产品,每个去请求一次查询有点不 ...