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

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

载入模块

import QuantLib as ql
import pandas as pd
import numpy as np
import seaborn as sn print(ql.__version__)
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 过程的构造函数如下:

HestonProcess(riskFreeRate,
dividendYield,
s0,
v0,
kappa,
theta,
sigma,
rho)

其中,

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

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

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

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

def testingStochasticProcesses2(seed):
refDate = ql.Date(27, ql.January, 2019)
riskFreeRate = 0.0321
dividendRate = 0.0128
spot = 52.0
cal = ql.China()
dc = ql.ActualActual() rdHandle = ql.YieldTermStructureHandle(
ql.FlatForward(refDate, riskFreeRate, dc))
rqHandle = ql.YieldTermStructureHandle(
ql.FlatForward(refDate, dividendRate, dc))
spotHandle = ql.QuoteHandle(
ql.SimpleQuote(spot)) kappa = 1.2
theta = 0.08
sigma = 0.05
rho = -0.6 v0 = theta hestonProcess = ql.HestonProcess(
rdHandle, rqHandle, spotHandle, v0,
kappa, theta, sigma, rho) volHandle = ql.BlackVolTermStructureHandle(
ql.BlackConstantVol(refDate, cal, np.sqrt(v0), dc)) bsmProcess = ql.BlackScholesMertonProcess(
spotHandle, rqHandle, rdHandle, volHandle) unifMt = ql.MersenneTwisterUniformRng(seed)
bmGauss = ql.BoxMullerMersenneTwisterGaussianRng(unifMt) dt = 0.004
numVals = 250 dw = ql.Array(2)
x = ql.Array(2) x[0] = spotHandle.value()
x[1] = v0
y = x[0] htn = pd.DataFrame(
dict(
t=np.linspace(0, dt * numVals, numVals + 1),
price=np.nan,
vol=np.nan)) bsm = pd.DataFrame(
dict(
t=np.linspace(0, dt * numVals, numVals + 1),
price=np.nan,
vol=v0)) htn.loc[0, 'price'] = x[0]
htn.loc[0, 'vol'] = x[1] bsm.loc[0, 'price'] = y for j in range(1, numVals + 1):
dw[0] = bmGauss.next().value()
dw[1] = bmGauss.next().value() x = hestonProcess.evolve(htn.loc[j, 't'], x, dt, dw)
y = bsmProcess.evolve(bsm.loc[j, 't'], y, dt, dw[0]) htn.loc[j, 'price'] = x[0]
htn.loc[j, 'vol'] = x[1] bsm.loc[j, 'price'] = y htn = htn.melt(
id_vars='t',
var_name='component',
value_name='path') htn['type'] = 'stochastic vol' bsm = bsm.melt(
id_vars='t',
var_name='component',
value_name='path') bsm['type'] = 'constant vol' htn_bsm = pd.concat([htn, bsm]) sn.relplot(
x='t',
y='path',
data=htn_bsm,
col='component',
hue='type',
kind="line",
height=8,
facet_kws=dict(sharey=False)) 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. android studio打包apk

    转载:http://chenfeicqq.iteye.com/blog/1889160 1)Android Studio菜单Build->Generate Signed APK      (2) ...

  2. Python深度学习之安装theano(windows)

    前方预警:windows的坑太多了,抛弃用linux吧 安装theano,提前清空自己的python环境吧,坑太多了,anaconda会自动安装path 一,首先安装python包管理anaconda ...

  3. Ubuntu下U盘只读文件系统,图标上锁,提示无法修改

    资料来源于网络,自己总结 问题 Ubuntu下有时候插入U盘,发现不能修改其中的内容.例如不能新建文件和文件夹,不能向U盘中复制文件等,系统提示:只读文件系统. 原因大概是U盘的文件系统信息出错(保存 ...

  4. 字符编码codecs模块(读写文件)

    python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理.有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的编码, ...

  5. 怎样application不被第三方应用杀掉--Android

    方法: 对于放在/system/app下的应用,需要在其Manifest.xml文件中设置persistent属性,如应用程序'Phone'的AndroidManifest.xml文件: <ap ...

  6. [原创]使用OPENCC库进行简繁转换(C++代码)

    最近公司有一款游戏产品,字库存在问题,希望全自动进行简繁同屏自动转换的行为,减少工作量. 所以自己使用了WINDOWS自带的一些转换函数,但发现大量字出现异常,无法转换(测试iconv也发现无法转换) ...

  7. Android Studio修改默认Activity继承AppCompatActivity

    在Android Studio中新建Activity默认继承AppCompatActivity,感觉这点十分不爽,找了很久,终于发现在android Studio安装目录下有个模板文件,修改其中的参数 ...

  8. swoole集群 nginx配置

    nginx配置文件: upstream cat { server 192.168.149.133:9502 weight=5; server 192.168.149.134:9502 weight=5 ...

  9. http://blog.csdn.net/hongchangfirst/article/details/26004335

    悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传统的 关系型数 ...

  10. Codeforces766A Mahmoud and Longest Uncommon Subsequence 2017-02-21 13:42 46人阅读 评论(0) 收藏

    A. Mahmoud and Longest Uncommon Subsequence time limit per test 2 seconds memory limit per test 256 ...