如果未做特别说明,文中的程序都是 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. Code First 之类继承

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

  2. vargant

    http://blog.csdn.net/openn/article/details/54927375

  3. yum 系列(二) 离线部署

    yum 系列(二) 离线部署 一.下载 rpm 依赖包 (1) yum 下载 rpm 包 准备一台 全新的 CentOS7 mini 虚拟机 ,联网下载所有所需的 rpm 包和其依赖, yum ins ...

  4. python pip 代理设置

    pip install --proxy="user:password@server:port" packagename origin url: http://xiuxixiuxi. ...

  5. CHANGE DETECTION IN ANGULAR 2

    In this article I will talk in depth about the Angular 2 change detection system. HIGH-LEVEL OVERVIE ...

  6. 如何把App放在服务器上供用户下载

    如何把App放在服务器上供用户下载 有时候做了个简单的App想把App给朋友帮忙测试一下,却发现上传到各种平台很麻烦,肿么办?难道一个个拷贝,那也太low啦,不是咱程序员该干的事儿,好的话不多说,开搞 ...

  7. Swift实现UIKit Dynamic动画

    iOS7引入了UIKit Dynamics,可以帮助开发者开发出更接近真实世界的动画效果.之前,用户如果要做出这样的效果,需要话很多的时间在物理计算和Core Animation上.现在,所有的一切都 ...

  8. 服务器如何打开ping命令

    服务器禁止ping后忘记是用什么方法禁止的了.只知道不是使用ip策略现在需要再开启ping...请问该怎么弄? 是不是windows防火墙开启了啊,到控制面板里的windows防火墙中看看,把防火墙关 ...

  9. 23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter

    23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter 2016-07-22 (www.cnblogs.com/icmzn) 模式理解

  10. Android-SQLiteOpenHelper里增删改查

    为什么要写一篇,Android-SQLiteOpenHelper里增删改查,的文章呢: 因为之前的方式是:MySQLiteOpenHelper(只负责 生成打开据库/生成打开表/升级表),在其他端:完 ...