QuantLib 金融计算——随机过程之一般 Black Scholes 过程
如果未做特别说明,文中的程序都是 Python3 代码。
QuantLib 金融计算——随机过程之一般 Black Scholes 过程
载入模块
import QuantLib as ql
import pandas as pd
import numpy as np
import seaborn as sn
print(ql.__version__)
1.12
一般 Black Scholes 过程
quantlib-python 中 Black Scholes 框架下常见的几种随机过程均派生自基类 GeneralizedBlackScholesProcess,而 GeneralizedBlackScholesProcess 模拟下列 SDE 描述的一维随机过程:
\]
等式使用风险中性漂移而不是一般漂移 \(\mu\)。风险中性利率由股息率 \(q(t)\) 调整,并且相应的扩散项是 \(\sigma\)。
作为基类,GeneralizedBlackScholesProcess 的构造函数为
GeneralizedBlackScholesProcess(x0,
dividendTS,
riskFreeTS,
blackVolTS)
其中:
x0:QuoteHandle对象,表示 SDE 的起始值;dividendTS:YieldTermStructureHandle对象,表示股息率的期限结构riskFreeTS:YieldTermStructureHandle对象,表示无风险利率的期限结构blackVolTS:BlackVolTermStructureHandle对象,表示波动率的期限结构
GeneralizedBlackScholesProcess 提供了相应的检查器,返回构造函数接受的关键参数:
stateVariable;dividendYield;riskFreeRate;blackVolatility
从 StochasticProcess1D 继承来的离散化函数 evolve,描述 SDE 从 \(t\) 到 \(t + \Delta t\) 的变化。
QuantLib 提供了一些具体的派生类,这些类代表众所周知的具体过程,如
BlackScholesProcess:没有股息率的一般 BS 过程;BlackScholesMertonProcess:一般 BS 过程;BlackProcess:一般 Black 过程;GarmanKohlagenProcess:包含外汇利率的一般 BS 过程
这些派生类在构造和调用方式上大同小异,在下面的例子中,我们将建立一个具有平坦无风险利率、股息率和波动率期限结构的 Black-Scholes-Merton 过程,并画出模拟结果。
def testingStochasticProcesses1():
refDate = ql.Date(27, ql.January, 2019)
riskFreeRate = 0.0321
dividendRate = 0.0128
spot = 52.0
vol = 0.2144
cal = ql.China()
dc = ql.ActualActual()
rdHandle = ql.YieldTermStructureHandle(
ql.FlatForward(refDate, riskFreeRate, dc))
rqHandle = ql.YieldTermStructureHandle(
ql.FlatForward(refDate, dividendRate, dc))
spotQuote = ql.SimpleQuote(spot)
spotHandle = ql.QuoteHandle(
ql.SimpleQuote(spot))
volHandle = ql.BlackVolTermStructureHandle(
ql.BlackConstantVol(refDate, cal, vol, dc))
bsmProcess = ql.BlackScholesMertonProcess(
spotHandle, rqHandle, rdHandle, volHandle)
seed = 1234
unifMt = ql.MersenneTwisterUniformRng(seed)
bmGauss = ql.BoxMullerMersenneTwisterGaussianRng(unifMt)
dt = 0.004
numVals = 250
bsm = pd.DataFrame()
for i in range(10):
bsmt = pd.DataFrame(
dict(
t=np.linspace(0, dt * numVals, numVals + 1),
path=np.nan,
n='p' + str(i)))
bsmt.loc[0, 'path'] = spotQuote.value()
x = spotQuote.value()
for j in range(1, numVals + 1):
dw = bmGauss.next().value()
x = bsmProcess.evolve(bsmt.loc[j, 't'], x, dt, dw)
bsmt.loc[j, 'path'] = x
bsm = pd.concat([bsm, bsmt])
sn.lineplot(
x='t', y='path',
data=bsm,
hue='n', legend=None)
testingStochasticProcesses1()

QuantLib 金融计算——随机过程之一般 Black Scholes 过程的更多相关文章
- QuantLib 金融计算——随机过程之 Heston 过程
目录 QuantLib 金融计算--随机过程之 Heston 过程 Heston 过程 参考文献 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--随机过程之 H ...
- QuantLib 金融计算——随机过程之概述
目录 QuantLib 金融计算--随机过程之概述 框架 用法与接口 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--随机过程之概述 载入模块 import Q ...
- QuantLib 金融计算
我的微信:xuruilong100 <Implementing QuantLib>译后记 QuantLib 金融计算 QuantLib 入门 基本组件之 Date 类 基本组件之 Cale ...
- QuantLib 金融计算——高级话题之模拟跳扩散过程
目录 QuantLib 金融计算--高级话题之模拟跳扩散过程 跳扩散过程 模拟算法 面临的问题 "脏"的方法 "干净"的方法 实现 示例 参考文献 如果未做特别 ...
- QuantLib 金融计算——数学工具之求解器
目录 QuantLib 金融计算--数学工具之求解器 概述 调用方式 非 Newton 算法(不需要导数) Newton 算法(需要导数) 如果未做特别说明,文中的程序都是 Python3 代码. Q ...
- QuantLib 金融计算——基本组件之 Currency 类
目录 QuantLib 金融计算--基本组件之 Currency 类 概述 构造函数 成员函数 如果未做特别说明,文中的程序都是 python3 代码. QuantLib 金融计算--基本组件之 Cu ...
- QuantLib 金融计算——修复 BatesProcess 中的两个 Bug
QuantLib 金融计算--修复 BatesProcess 中的两个 Bug 我发现了 BatesProcess 中的两个 Bug: 基类 HestonProcess::factors 的返回值取决 ...
- QuantLib 金融计算——QuantLib 入门
目录 QuantLib 金融计算--QuantLib 入门 简介 主要功能 安装与使用 学习指南 The HARD Way The EASY Way QuantLib 金融计算--QuantLib 入 ...
- QuantLib 金融计算——基本组件之 Date 类
目录 QuantLib 金融计算--基本组件之 Date 类 Date 对象的构造 一些常用的成员函数 一些常用的静态函数 为估值计算配置日期 如果未做特别说明,文中的程序都是 Python3 代码. ...
随机推荐
- java 实现模拟浏览器 访问网站
一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等.所访问的这些页面 有的仅仅是一些普通的页面,有的需要用户登录后方可使用,或者需 ...
- Laravel 文件上传失败的问题 error 7
一个站点上传文件失败 error为7 UPLOAD_ERR_CANT_WRITE 临时文件上传不上 $_FILE打出来 Array( [file] => Array ( ...
- [Training Video - 5] [Groovy Script Test Step - Collections, Exceptions] Exception Handling in groovy
def x = new String[3] x[0] = "A" x[1] = "B" x[2] = "C" log.info"X ...
- [SoapUI]怎样配置SoapUI运行的不同环境,并在Jenkins上面通过命令调用不用的环境
配置SoapUI运行的不同环境 Groovy 脚本来控制environment 在Jenkins上面通过命令调用不用的环境 http://www.soapui.org/Test-Automation/ ...
- Android UI 之 ListView
一.在代码中创建(不适用XML布局文件) 1.创建一个项目:ListViewLearn 2.修改MainActivity,继承于ListActivity 3.创建一个String数组,用来保存List ...
- 20169205 2016-2017-2 实验二nmap的使用与分析
20169205 2016-2017-2 实验二Nmap的使用与分析 实验所用知识总结 Nmap扫描基础 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以 ...
- Hdu1547 Bubble Shooter 2017-01-20 18:38 44人阅读 评论(0) 收藏
Bubble Shooter Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tota ...
- Spring+shiro配置JSP权限标签+角色标签+缓存
Spring+shiro,让shiro管理所有权限,特别是实现jsp页面中的权限点标签,每次打开页面需要读取数据库看权限,这样的方式对数据库压力太大,使用缓存就能极大减少数据库访问量. 下面记录下sh ...
- [label][Chrome-Extension] How to start Chrome Extension's development
Firstly , you should read these two pages. https://developer.chrome.com/extensions/overview https:/ ...
- MYC编译器源码分析之程序入口
前文.NET框架源码解读之MYC编译器讲了MyC编译器的架构,整个编译器是用C#语言写的,上图列出了MyC编译器编译一个C源文件的过程,编译主路径如下: 首先是入口Main函数用来解析命令行参数,读取 ...