布莱克—斯科尔斯—默顿(BSM)模型
BSM模型是最常用的期权定价模型之一,虽然其假设不合符市场事实,但是该模型的提出奠定了现代金融衍生品法则的基石。该模型在学界的发展:早期的期权定价大多采用Black-Scholes(B-S)期权定价模型,B-S模型假定标的资产收益率服从正态分布且波动率是常数,但是这一假定无法解释“波动率微笑”和“杠杆效应”。在随后的研究中,不断有学者对B-S模型进行改进,例如修正常数波动率、重新刻画资产波动率分布等。随机波动率模型对B-S模型做出了优化,较为著名的模型有Heston、3/2、4/2模型。除了假设波动率是标的资产和时间的随机过程的随机波动率模型以外,还有一种模型是假设波动率是标的资产和时间的确定性函数的局部波动率。大量研究表明,随机波动性和价格跳跃是资产价格运动的内在特征。当市场上发生突发情况时,随机波动率模型中需要引入跳过程来描述这种突发情况。此外,尽管仿射型Heston随机波动模型在期权解析定价上带来极大便利,但是其无法较好地描述金融时间序列的非线性特征。通过在Heston模型方差过程的扩散项中引入非仿射参数建立非仿射随机波动率模型,可以刻画更丰富的资产价格行为。B-S模型认为期权的标的资产价格服从扩散模型,学者们不断对扩散模型进行改进并得到相应的期权定价模型,如跳扩散期权价格模型、随机波动率模型、非仿射随机波动率期权定价模型等,这些模型统称为基于参数扩散过程的期权定价模型。后有学者把扩散方程设定为非参数形式,建立了基于非参数扩散过程的期权定价模型。近年来学者们在期权定价模型上取得了长足进步,但是这些改进模型仍然忽略了一些重要的影响股价走势的因素,如大盘指数与个股走势存在着长期的均衡关系。国外学者建立了股灾期间的期权定价模型。以上的介绍来自于笔者阅读十余篇相关文献整理的资料的一部分。接下来介绍两中BSM模型1.不带股利的BSM模型2.带股利的BSM模型以不带股利的BSM模型为例,其表达式为:
带股利的模型则是将股利D贴现后,用股票在t时刻的价值减去股利现值。
接下来介绍两种模型的求解方法,使用python求解,代码为:
不带股利的BSM模型
# Black-Scholes-Merton (1973) European Call & Put Valuationfrom pylab import plt
plt.style.use('seaborn')
%matplotlib inline
import math
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from scipy.integrate import quad
mpl.rcParams['font.family'] = 'serif'#
# Helper Functions
#def dN(x):''' Probability density function of standard normal random variable x. ''' #标准正态随机变量 x 的概率密度函数return math.exp(-0.5 * x ** 2) / math.sqrt(2 * math.pi)def N(d):''' Cumulative density function of standard normal random variable x. '''return quad(lambda x: dN(x), -20, d, limit=50)[0]def d1f(St, K, t, T, r, sigma):#设置函数d1''' Black-Scholes-Merton d1 function.Parameters see e.g. BSM_call_value function. '''d1 = (math.log(St / K) + (r + 0.5 * sigma ** 2)* (T - t)) / (sigma * math.sqrt(T - t))return d1#
# Valuation Functions
##欧式看涨期权函数
def BSM_call_value(St, K, t, T, r, sigma):''' Calculates Black-Scholes-Merton European call option value.Parameters==========St : floatstock/index level at time tK : floatstrike pricet : floatvaluation dateT : floatdate of maturity/time-to-maturity if t = 0; T > tr : floatconstant, risk-less short ratesigma : floatvolatilityReturns=======call_value : floatEuropean call present value at t'''d1 = d1f(St, K, t, T, r, sigma)d2 = d1 - sigma * math.sqrt(T - t)call_value = St * N(d1) - math.exp(-r * (T - t)) * K * N(d2)return call_value#欧式看跌期权函数
def BSM_put_value(St, K, t, T, r, sigma):''' Calculates Black-Scholes-Merton European put option value.Parameters==========St : floatstock/index level at time tK : floatstrike pricet : floatvaluation dateT : floatdate of maturity/time-to-maturity if t = 0; T > tr : floatconstant, risk-less short ratesigma : floatvolatilityReturns=======put_value : floatEuropean put present value at t'''put_value = BSM_call_value(St, K, t, T, r, sigma) \- St + math.exp(-r * (T - t)) * Kreturn put_value
# 赋值
St = 100.00 # initial index level
K = 100.00 # strike level
T = 1. # call option maturity
r = 0.05 # constant short rate
sigma = 0.2 # constant volatility of diffusion
t=0
print('BSM模型求解的看涨期权价格为:',BSM_call_value(St, K, t, T, r, sigma))
print('BSM模型求解的看跌期权价格为:',BSM_put_value(St, K, t, T, r, sigma))
求解后的结果如下:
BSM模型求解的看涨期权价格为: 10.45058357218553
BSM模型求解的看跌期权价格为: 5.573526022256942
带股利的BSM模型
以上程序可以再次运行,修改参数即可
首先求出股票价格减去股利现值后的股票价格
Su=St-D*np.exp(-((t)*r))
Su
然后设置参数
# 赋值
St = 100.00 # initial index level
K = 100.00 # strike level
T = 1. # call option maturity
r = 0.05 # constant short rate
sigma=0.2 # constant volatility of diffusion
t=20/360
D=2
print('BSM模型求解的看涨期权价格为:',BSM_call_value(St, K, t, T, r, sigma))
print('BSM模型求解的看跌期权价格为:',BSM_put_value(St, K, t, T, r, sigma))
结果如下:
BSM模型求解的看涨期权价格为: 10.090922223626734
BSM模型求解的看跌期权价格为: 5.478462396092041
最后,可以根据公式画出期权现值与行权价、到期日、短期利率、波动率的关系
以现值和执行价的代码为例
# C(K) plot现值与执行价的关系plt.subplot(221)klist = np.linspace(80, 120, points)vlist = [function(Su, K, t, T, r, sigma) for K in klist]plt.plot(klist, vlist)plt.grid(True)plt.xlabel('strike $K$')plt.ylabel('present value')
结果如下:
不带股利的BSM模型(看涨期权)
带股利的BSM模型(看跌期权)
这期分享就到这里,边学习变分享。
布莱克—斯科尔斯—默顿(BSM)模型相关推荐
- 布莱克斯科尔斯模型(五) 方程求解过程
布莱克斯科尔斯模型(五) 方程求解过程 posted on 2019-02-12 20:05 luoganttcc 阅读(...) 评论(...) 编辑 收藏
- 布莱克斯科尔斯模型(一)
布莱克斯科尔斯模型(一) 这段时间我一直在研究BS模型,在求解BS模型时,不了解数学物理方程,傅里叶分析,复变函数是不可能理解BS方程的. posted on 2019-02-10 18:42 luo ...
- 十二、计算期权定价和布莱克-斯科尔斯公式
期权定价 期权定价(Option Valuation),期权价值的两个基本构成要素是:内含价值和时间价值. 期权定价,内含价值,也称内在价值,是期权持有人因通过行权获得股票而不是直接购买股票而实现的收 ...
- python 隐含波动率_【BSM模型】用实际市场数据计算隐含波动率并验证波动率微笑...
在Black-Scholes期权定价模型中,不能直接观察到的参数只有股票价格的波动率.波动率可以由历史数据进行估计,这是历史波动率.隐含波动率也是交易员非常关心的,隐含波动率是期权的市场价格中所包含的 ...
- C++:实现一些简单的方法来 布莱克-斯科尔斯期权估值理论(附完整源码)
C++:实现一些简单的方法来 布莱克-斯科尔斯期权估值理论 test.hpp test.cpp test.hpp # include <string> using namespace st ...
- python历史波动率_【BSM模型】用实际市场数据计算隐含波动率并验证波动率微笑...
在Black-Scholes期权定价模型中,不能直接观察到的参数只有股票价格的波动率.波动率可以由历史数据进行估计,这是历史波动率.隐含波动率也是交易员非常关心的,隐含波动率是期权的市场价格中所包含的 ...
- BSM模型心得,python实现方案
#BSM模型心得,python实现方案 BSM简介 首先对于BSM模型先简单介绍一下,接触过期权的人应该都不陌生,BSM模型全称Black-Scholes-Merton model,其主要的贡献是提供 ...
- python 布莱克舒尔斯_BSM模型心得,python实现方案
#BSM模型心得,python实现方案 ##BSM简介 首先对于BSM模型先简单介绍一下,接触过期权的人应该都不陌生,BSM模型全称Black-Scholes-Merton model,其主要的贡献是 ...
- 基于PL角度理解BSM模型
大多数统计学家使用连续时间金融模型来捕获不同的统计属性的潜在资产价格 然而,多数从业者并不使用模型来预测资产价格的变动,而是将其作为衍生品投资组合的损益(P&L)的会计工具来进行风险对冲 也就 ...
最新文章
- 支付宝生活号 php,关于PHP框架Laravel怎么配置支付宝生活号应用网关呢?
- mysql所有知识点总结_MySQL知识点总结
- 制作U盘启动时【usb-hdd和usb-zip的区别】
- C++对自定义结构体变量排序
- LeetCode 640. 求解方程(字符串)
- 四、Angular新建组件和使用
- Word转PDF(SaveAsPDFandXPS + jacob)
- Oligo 7 引物设计 安装
- 使用 ReportLab 绘制 PDF
- 3t中文 studio_mongodb,Studio 3T | MongoDB中文社区
- graphpad做折线图_Graphpad作折线图的思想
- 表格内容相同单元格合并
- MS coco数据集下载链接
- QT drawPixmap和drawImage处理图片模糊问题
- 赛门铁克通配符SSL证书,一张通配型证书实现全站加密
- python高级--数据分析(Pandas库)
- 掘金秋招征文大赛评选结果
- 培训!培训!包就业(下)——漂在中关村(6)
- 推荐一个win7镜像(支持uefi,已升级补丁,带驱动)
- C++代码 回文素数