期权定价模型系列【1】—BSM通用式模型

news2024/11/15 2:39:19

这是期权定价模型专栏的第一篇文章,此专栏旨在分享一些期权定价模型,将会从最基础的BSM模型开始写起,逐步扩散到蒙特卡洛模拟、二叉树等数值法模型,以及跳跃扩散模型、随机波动率模型,神经网络模型等等。


如果你觉得有帮助,不妨点赞收藏支持一下哦。

1.前言



1973年BSM模型首次发表后便很快被应用到了金融市场中。交易商用BSM模型对期权进行定价,并进一步推动了期权在不同市场上的应用。自BSM模型开始,市场首次找到了理论上可靠的期权定价模型,这大大推动了整个期权市场的发展,反过来也促进了标的资产市场的定价和流动性。
在某种意义上,BSM模型确实是个奇迹:它使得你可以用一种非常理性的方法来给证券定价,在此之前,根本没有一个合理的或者站得住脚的定价理论。一个完全理想化的世界中(假设回报服从正态分布,股票价格服从几何布朗运动规律,具有充沛的流动性,可以进行持续套期保值,并且没有交易成本),BSM模型提供了一种动态复制期权的方法。这是一个在想象世界中工程学方法所创造的杰作,只是这个世界并不存在,因为市场并不总是服从所有的假设条件。这确实是个奇迹,但是它也只是一个模型,并不是实际情况。


当然,BSM模型所要求的假设条件非常严苛:假设标的资产的回报服从正态分布、价格服从几何布朗运动、市场始终可以提供充沛的流动性、可以进行无成本的连续对冲交易等。在真实的市场中,这些假设条件有一些可以近似满足,还有一些就相距甚远。比如,交易成本和连续对冲,可以通过调整假设条件来实现。还有一些,比如股票价格变动的模式,就很难服从几何布朗运动的假设。在现实中,股票价格经常会出现跳跃,整体分布呈现肥尾,甚至波动率也会出现完全无法预计的变动,这些条件就很难通过调整假设条件来解决。

2.静态复制


首先,通过期权定义可以很容易得到一个普通欧式看涨期权与看跌期权在到期日的合约价值为:

 那么,假设投资者买入一个欧式看涨期权,同时卖出一个行权价相同的欧式看跌期权,那么无论到期日股票的最终价格是多少,投资者能获得收益都是确定的:(ST-K)。

更进一步,假设股票在未来没有分红。在到期日之前的某个时间t,如果投资者按照当前价格St买入一份标的股票,同时卖出Ke-r(T-t)份无风险债券,那么在T时刻,这个组合的价值就是(ST-K)。根据一价定律可知,一个是买入欧式看涨期权,同时卖出行权价相等的欧式看跌期权,一个是买入股票,同时卖出无风险债券,这两者当前的价格应该是相等的,即为:

通过对上式两边进行移项,要复制一个看涨期权只需要一个行权价和到期日都相同的看跌期权、标的股票以及无风险债券。要复制一个看跌期权,只需要一个行权价格和到期日都相同的看涨期权、标的股票以及无风险债券

3.模型推导


运用复制的方法进行估值是整个布莱克-斯科尔斯-默顿(BSM)期权定价模型的理论基础。在推导BSM模型的时候,需要进行一系列的理论假设:标的股票价格的变化是连续的,波动率为常数并且没有价格跳跃(单因子布朗运动);交易员可以通过大额多头或空头头寸进行持续对冲;没有买卖差价;没有交易成本;可以自主决定头寸调整。

假设在t时刻,某股票的价格为S,其波动率为常数σS,预期回报为μS。同时,还存在一只无风险债券,其价格为B,收益率假设为常数r。股票和债券的随机价格服从:

其中,dZ服从标准维纳过程。以该股票为标的资产的看涨期权在t时刻的价格C,是一个跟股票价格和时间相关的变量。根据伊藤引理,C的价格等于:

 

其中有:

 

将S和C的头寸结合在一起,构建一个持续的无风险组合,消除该风险变量。令π=αS+C,其中α表示在t时刻对冲期权风险所需的股票数量。那么就有:

 

要使这个组合保持瞬时无风险,随机变量dZ的协方差就必须要等于0。也就是:

 

其中:

 

由于这个组合在t时刻也是无风险的,根据一价定律,在t时刻其收益率也应该是无风险利率r,所以就有:

 

 

在对冲组合中,这相当于:

进行移项调整后有:

 

 

看涨期权和标的股票的瞬时夏普比率相等。如果不存在无风险套利的机会,那么对股票和期权来说,每单位波动率对应的超额回报是相等的。这也是布莱克和斯科尔斯最开始在推导BSM等式时提出的观点。继续进行计算,替换μC和σC有:

可得BSM模型的偏微分方程式:

 

 4.BSM模型


BSM模型是由Black和Scholes推导出来的可以被用于到期前不分红的欧式股票期权的估值模型,假定c和p分为代表欧式看涨与欧式看跌期权的价格,则期权的定价公式为: 

 

参数释义如下:

 

 

5.股指期权定价模型


 Merton将BS模型扩展到允许支付连续股息的情景,这一模型可以用于支付已知连续股息率q的股票或者股指的欧式看涨、欧式看跌期权的定价问题。

6.期货期权定价模型


 Black在1976年给出了用于为标的资产为远期或者期货合约定价的欧式看涨、欧式看跌期权定价模型,假设标的资产价格为F。

7.权利金计息的期货期权定价模型


 Asay修改了权利金计息的Black76期货期权定价模型:

 

8.外汇期权定价模型


Garman和Kohlhagen修改了BS模型,使之可以用于欧式外汇期权的定价:

9.广义的BSM期权定价模型


 如果引入一个持有成本率b,则BSM模型能够被一般化,这个模型可以用于定价标的为无股息股票、连续支付股息的股票、期货、外汇的欧式期权:

b=r时为1973年提出的无股息欧式期权定价模型;

b=r-q时为merton在1973年提出的连续股利欧式期权定价模型;

b=0时为black在1976年提出的期货期权定价模型;

b=0且r=0时为Asay在1982年提出的权利金计息下的期货期权定价模型;

b=r-rf时为外汇期权定价模型。

10.代码部分


import numpy as np
from scipy.stats import norm

class BSM_Model:

    def __init__(self,S,K,T,sigma,r,b,opt):
        self.S=S
        self.K=K
        self.T=T
        self.sigma=sigma
        self.r=r
        self.b=b
        self.opt=opt

    def d1(self):
        return (np.log(self.S/self.K)+(self.b+self.sigma**2/2)*self.T)/(self.sigma*np.sqrt(self.T))
    def d2(self):
        return self.d1()-self.sigma*np.sqrt(self.T)

    def option_value(self):
        if self.opt=='call':
            value=self.S*np.exp((self.b-self.r)*self.T)*norm.cdf(self.d1())-self.K*np.exp(-self.r*self.T)*norm.cdf(self.d2())
        else:
            value = -self.S * np.exp((self.b - self.r) * self.T) * norm.cdf(-self.d1()) + self.K * np.exp(
                -self.r * self.T) * norm.cdf(-self.d2())
        return value

 例1:

结果为:欧式看涨期权价格为2.1333684449162007

if __name__=='__main__':
    #b=r时为1973年提出的无股息欧式期权定价模型
    # eg:
    S=60
    K=65
    T=0.25
    r=0.08
    sigma=0.3
    b=r
    opt='call'
    call=BSM_Model(S,K,T,sigma,r,b,opt).option_value()
    print('欧式看涨期权价格为%s'%(call))

例2:

 结果为:欧式看跌期权价格为2.4647876467558305

if __name__=='__main__':
    #b=r-q时为merton在1973年提出的连续股利欧式期权定价模型
    S=100
    K=95
    T=0.5
    r=0.1
    q=0.05
    sigma=0.2
    b=r-q
    opt='put'
    put=BSM_Model(S,K,T,sigma,r,b,opt).option_value()
    print('欧式看跌期权价格为%s'%(put))

例3:

结果为:看跌期货期权价格为1.7010507252362679

if __name__=='__main__':

    #b=0时为black在1976年提出的期货期权定价模型
    F = 19
    K = 19
    T = 0.75
    r = 0.1
    sigma = 0.28
    b = 0
    opt = 'put'
    put = BSM_Model(F, K, T, sigma, r, b, opt).option_value()
    print('看跌期货期权价格为%s' % (put))

 例4:

结果为:看跌期货期权价格为65.61854211535751

if __name__=='__main__':

   
    #b=0且r=0时为Asay在1982年提出的权利金计息下的期货期权定价模型
    F = 4200
    K = 3800
    T = 0.75
    r =0
    sigma = 0.15
    b = 0
    opt = 'put'
    put = BSM_Model(F, K, T, sigma, r, b, opt).option_value()
    print('看跌期货期权价格为%s' % (put))

 例5:

结果为:看涨外汇权价格为0.02909925314943973

if __name__=='__main__':
    #b=r-rf时为外汇期权定价模型
    S = 1.56
    K = 1.6
    T = 0.5
    r = 0.06
    rf=0.08
    sigma = 0.12
    b = r-rf
    opt = 'call'
    call = BSM_Model(S, K, T, sigma, r, b, opt).option_value()
    print('看涨外汇权价格为%s' % (call))

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/854946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[OnWork.Tools]系列 05-系统工具

简介 系统工具主要是将Window常用工具的快捷启动的集合 双击快速启动 计算器,记事本,截图,画图工具 控制面板,服务管理,关闭显示器,关机 启动文件夹,我的电脑,管理工具 右键菜单 添加快捷方式到桌面

外卖点餐小程序开源源码——支持扫码点餐

一套支持店内扫码点餐、外卖点餐配送于一体的餐饮系统,支持商家创建优惠券,支持商家自定义打印机功能,支持商家财务管理,支持商户菜品管理,支持菜品自定义分类,支持商家招募骑手入驻功能。系统基于thinkphp…

类与对象【下】

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析2 目录 👉🏻初始化列表初始化列表注意点 👉&#x1f…

LinearAlgebraMIT_7_Ax=0

上节课讲了向量子空间中的列空间和零空间,这节课来讲零空间的(Special solutions)特解,也就是Ax0的特解。在求解特解的核心便是使用消元法求得(row echelon form)阶梯矩阵或者(reduced row echelon form/RREF)最简矩阵。 我们接下来举一个例子&#xff…

Android使用kotlin+协程+room数据库的简单应用

前言:一般主线程(UI线程)中是不能执行创建数据这些操作的,因为等待时间长。所以协程就是为了解决这个问题出现。 第一步:在模块级的build.gradle中引入 id com.android.application// roomid kotlin-androidid kotlin…

亚马逊第三方卖家服务收入已达自营81%

据MarketplacePulse最新报道,亚马逊在第三方卖家服务上的收入,已经达到相当于其自营业务81%的规模。 佣金、物流费用以及广告构成了亚马逊整个第三方卖家服务。亚马逊最新发布的第二季度财报显示,亚马逊在包括销售佣金、物流费用的第三方卖…

2023河南萌新联赛第(五)场:郑州轻工业大学 --Kruskal

题目描述 给定一张nnn个点的无向完全图,其中两点之间的路径边权为两点编号的按位与(编号为 (1,2,...,n)(1,2,...,n)(1,2,...,n)),即w(u,v)u&v(1≤u,v≤n)w\left(u, v \right )u\&v \left( 1 \le u, v \le n \right)w(u,v…

使用Flask框架mock server实战(三)

1、demo1:登录接口 1.1 Flask代码 from flask import request, Flask, jsonify# 创建1个实例 app Flask(__name__)# 解决接收中文报文乱码问题 app.config[JSON_AS_ASCII] False# 登录接口 # 指定路由和请求方法。strict_slashesFalse 对URL最后的/符合是否严格…

natapp内网穿透使用教程

官网 https://natapp.cn/1.首先在本站注册账号 2.登录后,点击左边 购买隧道,免费就行 3.我的隧道 进行一些配置 5.根据您的本机下载对应的客户端,比如我的本机是win10,64位,则下载Windows 64位的客户端 6.下载之后,解压至任意目录,得到natapp.exe (linux下无需解压,直接 wg…

logback日志框架学习(1)介绍logback

首先说下对日志框架的感受,很多人slf4j-api slf4j-simple logback-core logbak-classic log4j logj42很多的日志框架,控制台各种输出的时候日志框架warn error,有时候还不能输出日志。究其原因,大家都觉得日志框架不太重要&#x…

硬件系统工程师宝典(36)-----盘点常用的总线和常见的逻辑电平

各位同学大家好,欢迎继续做客电子工程学习圈,今天我们继续来讲这本书,硬件系统工程师宝典。 上篇我们了解了SDRAM的存储技术以及SDRAM的发展历程,技术的进步推动着产品的升级,也加速了整个电子行业的发展。今天我们来…

[信号与系统系列] 正弦振幅调制之差拍信号

当将具有不同频率的两个正弦曲线相乘时,可以创建一个有趣的音频效果,称为差拍音符。这种现象听起来像颤音,最好通过选择一个频率非常小的信号与和另一个频率大约1KHz的信号,把二者混合从而听到。一些乐器能够自然产生差拍音符。使…

SAP MIGO 移动原因维护

在OMJJ中维护 在OMJJ中,选择你要维护的移动类型,在“对话结构”中选择“移动原因”,可以修改和添加了。

【JUC】复习指南

JUC复习指南: JUC有哪些知识点? 什么是Juc Lock接口 线程间通信 集合的线程安全问题 多线程锁 Callable接口 JUC三大辅助类 CountDownLatch CyclicBarrier Semaphore 读写锁 ReetrantReadWriteLOck 阻塞队列 ThreadPool线程池 Fork/join Com…

【Docker】Docker容器化技术基础(一篇可以让你学到docker使用的文章)

Docker容器化技术 Docker(软件跨环境迁移)Docker概念:安装Dockerdocker架构配置Docker镜像加速器 一、Docker命令服务daemon相关的命令镜像相关命令Docker容器相关命令 二、Docker容器的数据卷数据卷概念配置数据卷配置数据卷容器 三、Docker…

关于简单C++函数在内存中的存储问题

举例 int main(){... }int data(){... }int add(){... } 在分段式存储管理时,根据人们的需求,人为分段存储 如图:

MySql用户管理、权限管理

用户管理 1. 查看系统用户(查询mysql系统数据库中的user表) select * from mysql.user; 2. 创建用户 CREATE USER 用户名主机名 identified by 密码 -- 创建用户zhonghua,只能在当前主句localhost访问,密码为123456 create user zhonghualocalhost i…

代码反向生成时序图类图-Visual_Paradigm实践

目录 前言 一、Visual_Paradigm介绍 1、主界面介绍 2、功能简介 二、基于代码的序列图生成 1、新建VP项目工程 2、序列图反向生成 三、VP类图生成 1、生成主入口 四、数据ER模型生成 1、SQL脚本 2、ER反向生成 总结 前言 不知道作为研发的小伙伴们,在平时的…

Endnote插入生成参考文献的四种方式

Endnote插入生成参考文献的四种方式 为了熟练Endnote进行在word中插入参考文献,本文介绍四种插入生成参考文献的四种方式。 一、采用Endnote插入按钮方式生成 word选中插入参考文献位置—转入endnote—选中要插入的文献—点击Endnote插入按钮,过程如图…