如果未做特别说明,文中的程序都是 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 描述的一维随机过程:

\[d \ln S_t = \left( r ( t ) - q ( t ) - \frac { \sigma \left( t , S_t \right)^2 } 2 \right) d t + \sigma d W_t
\]

等式使用风险中性漂移而不是一般漂移 \(\mu\)。风险中性利率由股息率 \(q(t)\) 调整,并且相应的扩散项是 \(\sigma\)。

作为基类,GeneralizedBlackScholesProcess 的构造函数为

GeneralizedBlackScholesProcess(x0,
dividendTS,
riskFreeTS,
blackVolTS)

其中:

  • x0QuoteHandle 对象,表示 SDE 的起始值;
  • dividendTSYieldTermStructureHandle 对象,表示股息率的期限结构
  • riskFreeTSYieldTermStructureHandle 对象,表示无风险利率的期限结构
  • blackVolTSBlackVolTermStructureHandle 对象,表示波动率的期限结构

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 过程的更多相关文章

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

    目录 QuantLib 金融计算--随机过程之 Heston 过程 Heston 过程 参考文献 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--随机过程之 H ...

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

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

  3. QuantLib 金融计算

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

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

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

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

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

  6. QuantLib 金融计算——基本组件之 Currency 类

    目录 QuantLib 金融计算--基本组件之 Currency 类 概述 构造函数 成员函数 如果未做特别说明,文中的程序都是 python3 代码. QuantLib 金融计算--基本组件之 Cu ...

  7. QuantLib 金融计算——修复 BatesProcess 中的两个 Bug

    QuantLib 金融计算--修复 BatesProcess 中的两个 Bug 我发现了 BatesProcess 中的两个 Bug: 基类 HestonProcess::factors 的返回值取决 ...

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

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

  9. QuantLib 金融计算——基本组件之 Date 类

    目录 QuantLib 金融计算--基本组件之 Date 类 Date 对象的构造 一些常用的成员函数 一些常用的静态函数 为估值计算配置日期 如果未做特别说明,文中的程序都是 Python3 代码. ...

随机推荐

  1. java 实现模拟浏览器 访问网站

    一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等.所访问的这些页面 有的仅仅是一些普通的页面,有的需要用户登录后方可使用,或者需 ...

  2. Laravel 文件上传失败的问题 error 7

    一个站点上传文件失败 error为7  UPLOAD_ERR_CANT_WRITE 临时文件上传不上  $_FILE打出来 Array(    [file] => Array        (  ...

  3. [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 ...

  4. [SoapUI]怎样配置SoapUI运行的不同环境,并在Jenkins上面通过命令调用不用的环境

    配置SoapUI运行的不同环境 Groovy 脚本来控制environment 在Jenkins上面通过命令调用不用的环境 http://www.soapui.org/Test-Automation/ ...

  5. Android UI 之 ListView

    一.在代码中创建(不适用XML布局文件) 1.创建一个项目:ListViewLearn 2.修改MainActivity,继承于ListActivity 3.创建一个String数组,用来保存List ...

  6. 20169205 2016-2017-2 实验二nmap的使用与分析

    20169205 2016-2017-2 实验二Nmap的使用与分析 实验所用知识总结 Nmap扫描基础 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以 ...

  7. 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 ...

  8. Spring+shiro配置JSP权限标签+角色标签+缓存

    Spring+shiro,让shiro管理所有权限,特别是实现jsp页面中的权限点标签,每次打开页面需要读取数据库看权限,这样的方式对数据库压力太大,使用缓存就能极大减少数据库访问量. 下面记录下sh ...

  9. [label][Chrome-Extension] How to start Chrome Extension's development

    Firstly , you should read these two pages.  https://developer.chrome.com/extensions/overview https:/ ...

  10. MYC编译器源码分析之程序入口

    前文.NET框架源码解读之MYC编译器讲了MyC编译器的架构,整个编译器是用C#语言写的,上图列出了MyC编译器编译一个C源文件的过程,编译主路径如下: 首先是入口Main函数用来解析命令行参数,读取 ...