当前位置: 首页 > news >正文

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

这是期权定价模型专栏的第一篇文章,此专栏旨在分享一些期权定价模型,将会从最基础的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 normclass BSM_Model:def __init__(self,S,K,T,sigma,r,b,opt):self.S=Sself.K=Kself.T=Tself.sigma=sigmaself.r=rself.b=bself.opt=optdef 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=60K=65T=0.25r=0.08sigma=0.3b=ropt='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=100K=95T=0.5r=0.1q=0.05sigma=0.2b=r-qopt='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 = 19K = 19T = 0.75r = 0.1sigma = 0.28b = 0opt = '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 = 4200K = 3800T = 0.75r =0sigma = 0.15b = 0opt = '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.56K = 1.6T = 0.5r = 0.06rf=0.08sigma = 0.12b = r-rfopt = 'call'call = BSM_Model(S, K, T, sigma, r, b, opt).option_value()print('看涨外汇权价格为%s' % (call))

 

相关文章:

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

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

HA3 SQL样本实验:一种混合计算查询的全新样本解决方案

作者:陆唯一(芜霜) HA3(对外开源代号:Havenask )是阿里智能引擎团队自研的大规模分布式检索系统,广泛应用于阿里内部的搜索业务,是十多年来阿里在电商领域积累下来的核心竞争力产品。Ha3 SQL 是在原有Ha3引…...

Linux(Web与html)

域名 DNS与域名: 网络是基于tcp/ip协议进行通信和连接的 tcp/ip协议是五层协议:应用层–传输层—网络层----数据链路层----物理层每一台主机都有一个唯一的地址标识(固定的ip地址,用于区分用户和计算机。 ip地址:由…...

SpringBoot 底层机制分析[上]

文章目录 分析SpringBoot 底层机制【Tomcat 启动分析Spring 容器初始化Tomcat 如何关联Spring 容器】[上]搭建SpringBoot 底层机制开发环境Configuration Bean 会发生什么,并分析机制提出问题:SpringBoot 是怎么启动Tomcat ,并可以支持访问C…...

电源控制--对数与db分贝

在控制理论中,"db"通常表示分贝(decibel)的缩写。分贝是一种用于度量信号强度、增益或衰减的单位。 在控制系统中,分贝常用于描述信号的增益或衰减。通常,增益以正数的分贝值表示,而衰减以负数的…...

LeetCode 1749. 任意子数组和的绝对值的最大值(前缀和)

题目: 链接:LeetCode 1749. 任意子数组和的绝对值的最大值 难度:中等 给你一个整数数组 nums 。一个子数组 [numsl, numsl1, …, numsr-1, numsr] 的 和的绝对值 为 abs(numsl numsl1 … numsr-1 numsr) 。 请你找出 nums 中 和的绝对…...

python爬虫相关

目录 初识爬虫 爬虫分类 网络爬虫原理 爬虫基本工作流程 搜索引擎获取新网站的url robots.txt HTHP协议 Resquests模块 前言: 安装 普通请求 会话请求 response的常用方法 简单案例 aiohttp模块 使用前安装模块 具体案例 数据解析 re解析 bs4…...

PAT(Advanced Level) Practice(with python)——1023 Have Fun with Numbers

Code N int(input()) D_N 2*N # print(Yes)if len(str(D_N))>len(str(N)):print(No) else:for s in str(D_N):if s not in str(N) or str(D_N).count(s)!str(N).count(s):print("No")breakelse:print(Yes) print(D_N)...

springboot vue 初步集成onlyoffice

文章目录 前言一、vue ts1. 安装依赖2. onlyoffice组件实现(待优化)3. 使用组件4. 我的配置文件 二、springboot 回调代码1. 本地存储 三、效果展示踩坑总结问题1问题2 前言 对接onlyoffice,实现文档的预览和在线编辑功能。 一、vue ts …...

Win10语言设置 - 显示语言和应用语言

前言 Win10的语言设置可以设置显示语言和应用语言。其中,显示语言用于显示系统文字;应用语言用于应用程序显示文字。下文介绍如何设置。 显示语言 打开系统设置,选择时间和语言,如下图: 修改Windows显示语言即可更…...

RxJava的前世【RxJava系列之设计模式】

一. 前言 学习RxJava,少不了介绍它的设计模式。但我看大部分文章,都是先将其用法介绍一通,然后再结合其用法,讲解其设计模式。这样当然有很多好处,但我个人觉得,这种介绍方式,对于没有接触过Rx…...

sql 语句 字段字符串操作

substring_index() 函数 字符串截取 表达式:substring_index(column,str,count) 释义:截取字符串column,str出现从前往后数第count次,之前的所有字符 示例语句:SELECT substring_index(‘www.baidu.com’,‘.’,2) 结…...

【网络工程】网络流量分析工具 Wireshark

文章目录 第一章:WireShark介绍第二章:WireShark应用第三章:Wireshark 实战 第一章:WireShark介绍 Wireshark (前身 Ethereal):它是一个强大的网络封包分析软件工具 ! 此工具使用WinPCAP作为接口,直接与网卡…...

数据库总结

第一章绪论 一、数据库系统概述 1. 数据库的4个基本概念 1.数据:数据库中存储的基本对象,描述事物的符号记录。 2.数据库:长期储存在计算机内、有组织的、可共享的大量数据的集合。较小的冗余度、较高的数据独立性、易扩展性 3.数据库管…...

虹科方案 | 成都大运会进行时,保障大型活动无线电安全需要…

成都大运会 7月28日,备受关注的第31届世界大学生夏季运动会在成都正式开幕。据悉,这是全球首个5G加持的智慧大运会,也是众多成熟信息技术的综合“应用场”。使用基于5G三千兆、云网、8K超高清视频等技术,在比赛现场搭建多路8K摄像…...

【C语言】扫雷 小游戏

文章目录 一、游戏规则二、 代码逻辑三、游戏实现1. 游戏菜单设计2.设计雷区并随机布置雷(1) 设置雷区(2) 布置雷 3.排查雷 四、源码 一、游戏规则 1. 在9*9的小格子中,任意选取一个坐标(格子),选择后发现,如果没点中雷…...

Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)

1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,因此这篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙…...

swagger 3.0 学习笔记

引入pom <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>配置 import io.swagger.models.auth.In; import io.swagger.v3.oas.annotati…...

07 |「异步任务」

前言 实践是最好的学习方式&#xff0c;技术也如此。 文章目录 前言一、进程与线程1、进程2、线程 二、实现 一、进程与线程 1、进程 进程(Process)是操作系统分配资源的基本单位,它是一个执行中的程序实例&#xff1b;每个进程都有自己独立的内存空间,不同进程的内存是相互独…...

LoRaWan网关设计之入门指南

快速开始 以下是在目标平台本身上构建和运行 LoRaWan网关 的三步快速入门指南。 第 1 步:克隆 网关源码库 git clone https://github.com/lorabasics/basicstation.git...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...