QuantLib 金融计算——随机过程之 Heston 过程
如果未做特别说明,文中的程序都是 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:
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)
其中,
riskFreeRate:YieldTermStructureHandle对象,描述无风险利率的期限结构;dividendYield:YieldTermStructureHandle对象,描述股息率的期限结构;s0:QuoteHandle对象,资产价格的起始值;v0:浮点数,波动率的起始值;kappa、theta、sigma:浮点数,描述波动率的 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 过程的更多相关文章
- QuantLib 金融计算——随机过程之一般 Black Scholes 过程
目录 QuantLib 金融计算--随机过程之一般 Black Scholes 过程 一般 Black Scholes 过程 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib ...
- QuantLib 金融计算——随机过程之概述
目录 QuantLib 金融计算--随机过程之概述 框架 用法与接口 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--随机过程之概述 载入模块 import Q ...
- QuantLib 金融计算
我的微信:xuruilong100 <Implementing QuantLib>译后记 QuantLib 金融计算 QuantLib 入门 基本组件之 Date 类 基本组件之 Cale ...
- QuantLib 金融计算——高级话题之模拟跳扩散过程
目录 QuantLib 金融计算--高级话题之模拟跳扩散过程 跳扩散过程 模拟算法 面临的问题 "脏"的方法 "干净"的方法 实现 示例 参考文献 如果未做特别 ...
- QuantLib 金融计算——QuantLib 入门
目录 QuantLib 金融计算--QuantLib 入门 简介 主要功能 安装与使用 学习指南 The HARD Way The EASY Way QuantLib 金融计算--QuantLib 入 ...
- QuantLib 金融计算——数学工具之求解器
目录 QuantLib 金融计算--数学工具之求解器 概述 调用方式 非 Newton 算法(不需要导数) Newton 算法(需要导数) 如果未做特别说明,文中的程序都是 Python3 代码. Q ...
- QuantLib 金融计算——数学工具之优化器
目录 QuantLib 金融计算--数学工具之优化器 概述 Optimizer Constraint OptimizationMethod EndCriteria 示例 Rosenbrock 问题 校 ...
- QuantLib 金融计算——案例之普通欧式期权分析
目录 QuantLib 金融计算--案例之普通欧式期权分析 概述 普通欧式期权公式法定价 1. 配置期权合约条款 2. 构建期权对象 3. 配置定价引擎 4. 计算 题外话:天数计算规则 Quote ...
- QuantLib 金融计算——收益率曲线之构建曲线(5)
目录 QuantLib 金融计算--收益率曲线之构建曲线(5) 概述 Nelson-Siegel 模型家族的成员 Nelson-Siegel 模型 Svensson 模型 修正 Svensson 模型 ...
随机推荐
- maven标签说明
<project xmlns="http://maven.apache.org/POM/4.0.0 " xmlns:xsi="http://www.w3.org/2 ...
- python类和元类
python 类和元类详解 小麦麦子 2016-09-06 11:11:00 今天在网上看到一篇关于python语言中类和元类(metaclass)的一些讲解和简单运用,感觉对pyth ...
- [mongoDB] mongoDb
mongodb memcached redis kv数据库(key/value) mongodb 文档数据库,存储的是文档(Bson->json的二进制化). 特点:内部执行引擎为 ...
- [OS]windows 2012 server-Local users and groups-Backup Operators
怎样找到windows 2012 server上的Backup Operators Press the Windows + R keys to open the Run dialog, type lu ...
- Oracle学习笔记(十二)
十三.存储过程和存储函数1.掌握存储过程(相当于建立一个函数或者方法体,然后通过外部对其调用) 指存储在数据库中供所有程序调用的子程序叫做存储过程或存储函数. 相同点: 完成特定功能的程序 区别: 是 ...
- Linux的进程与服务(一)
启动的配置文件/etc/inittab,修改完配置文件以后 init q立即生效 # Default runlevel. The runlevels used by RHS are: # - halt ...
- 用Swift实现一款天气预报APP(一)
这个系列的目录: 用Swift实现一款天气预报APP(一) 用Swift实现一款天气预报APP(二) 用Swift实现一款天气预报APP(三) Swift作为现在苹果极力推广的语言,发展的非常快.这个 ...
- B-spline Curves 学习之B样条基函数的定义与性质(2)
B-spline Basis Functions 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:http ...
- 洛谷P4312 [COCI 2009] OTOCI / 极地旅行社(link-cut-tree)
题目描述 不久之前,Mirko建立了一个旅行社,名叫“极地之梦”.这家旅行社在北极附近购买了N座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常成群结队的游走在各个冰岛之间.Mi ...
- Android-自定义控件之绘图基础
画圆形,效果图: 布局中去指定自定义View: <view.custom.androidcustomviewbook.a_draw_base.BaseView android:layout_wi ...