第1节 欧式期权价格
第1节 欧式期权价格
- 1.1 简介
- 1.2 Python 代码实现计算
- 1.3 细节说明
- 1.3.1 参数说明
- 1.3.2 价格和价值
- 1.3.3 正态分布累计概率函数N(x)N(x)N(x)
- 1.3.4 欧式期权的看跌-看涨平价关系
- 1.3.5 计算中使用无风险利率rrr而不是资产预期收益率μ\muμ
1.1 简介
考虑期权对应的资产价格为S(t)S(t)S(t), 记为SSS,它的变化过程为几何布朗运动,
dSS=μdt+σdz.\frac{dS}{S} = \mu dt + \sigma dz \;\;.SdS=μdt+σdz.
这里假设漂移率μ\muμ和波动率σ\sigmaσ都为常数,dzdzdz为维纳过程(布朗运动)随机项。
如果我们在时刻 t=0t=0t=0 观察,此时资产价格为S0S_0S0。对于执行日期为TTT,执行价格为KKK的欧式看涨或看跌期权,我们知道根据Black-Scholes-Merton 欧式期权定价公式,它们的价格可以表示为
- 看涨期权
c=S0N(d1)−Ke−rTN(d2),c = S_0N(d_1)-Ke^{-rT}N(d_2)\;\;,c=S0N(d1)−Ke−rTN(d2), - 看跌期权
p=Ke−rTN(−d2)−S0N(−d1).p = Ke^{-rT}N(-d_2)-S_0N(-d_1)\;\;.p=Ke−rTN(−d2)−S0N(−d1).
这里的rrr为无风险利率,也假设为常数。N()N()N()函数为标准正态分布累计概率函数,可以用scipy.stats.norm.cdf()
计算。
d1d_1d1和d2d_2d2为:
d1=lnS0K+(r+12σ2)TσT,d2=d1−σT=lnS0K+(r−12σ2)TσT.d_1 = \frac{\ln{\frac{S_0}{K}}+(r+\frac{1}{2}\sigma^2)T}{\sigma \sqrt{T}}, \quad d_2 = d_1-\sigma\sqrt{T} = \frac{\ln{\frac{S_0}{K}}+(r-\frac{1}{2}\sigma^2)T}{\sigma \sqrt{T}}\;\;. d1=σTlnKS0+(r+21σ2)T,d2=d1−σT=σTlnKS0+(r−21σ2)T.
这里只需要用到 math
和scipy.stats.norm
两个模块,Python下自带的运算符一般比调取外面包里运算符的计算效率要高,所以这里会尽量使用Python自带的运算符。
这里实现起来比较简单,就是把价格表达式写出Python函数就可以了。
1.2 Python 代码实现计算
import math
from scipy.stats import norm# 常数使用"math"模块下的就好
E = math.e
PI = math.pi# 作为例子用的一组数值
r, sigma, S_0, K, T = 0.05, 0.20, 90., 100., 3.
# 欧式期权价格函数
def european_option(r, sigma, S_0, K, T):""" r: 无风险利率; sigma:资产波动率; S_0:资产初始(当前)价格;K: 期权执行价格; T:期权执行时间"""d_1 = (math.log(S_0/K)+(r+0.5*sigma*sigma)*T)/sigma/T**0.5d_2 = d_1 - sigma*T**0.5call_price = S_0*norm.cdf(d_1) - K*E**(-r*T)*norm.cdf(d_2)put_price = K*E**(-r*T)*norm.cdf(-d_2) - S_0*norm.cdf(-d_1)return (call_price, put_price)
然后我们可以检验结果是不是满足看跌-看涨平价关系式:
c+Ke−rT=p+S0c+Ke^{-rT} = p+S_0 c+Ke−rT=p+S0
假设,r=0.05,σ=0.20,S0=90,K=100,T=3r = 0.05, \; \sigma = 0.20, \; S_0 = 90, \; K = 100, \; T = 3r=0.05,σ=0.20,S0=90,K=100,T=3,使用上面的函数我们可以计算得:
call_price, put_price = european_option(r, sigma, S_0, K, T)
print("欧式看涨期权价格为:{0:.5}, 欧式看跌期权价格为:{1:.5} 。".format(call_price, put_price))
print("\n看跌-看涨平价关系式为:\n")
print(" {0:.5} + {1:.5} = {2:.5} + {3:.5}\n".format(call_price, K*E**(-r*T), put_price, S_0))
print(" {0:.5} = {1:.5}\n".format(call_price+K*E**(-r*T), put_price+S_0))
输出为:
欧式看涨期权价格为:14.17, 欧式看跌期权价格为:10.24 。
看跌-看涨平价关系式为:
14.17 + 86.071 = 10.24 + 90.0
100.24 = 100.24
1.3 细节说明
1.3.1 变量和参数说明
在欧式期权的Black-Scholes-Merton定价公式中,假设r,σr, \; \sigmar,σ在考虑时间范围内不变,S0S_0S0是当前的资产价格,KKK和TTT是期权中约定的执行价格和执行时间。具体而言,
- K,S0K,\;S_0K,S0:都默认是在同种货币下的价格。
- TTT: 时间的单位是年。这里定价公式里的TTT可以直接用总月数除十二粗略地计算。而实际上无风险投资等利率的收益是按实际天数除以一整年的有效天数计,但是股票等交易品的价格变化只在交易日发生(约252天)。可能相对合理且简单的计算方式是计算期权到期时价格期望(期权对应资产价格按调整后的无风险利率在交易日变化),再用无风险利率考虑天数调整后进行贴现。但这里的简单模型中不考虑这些细节。
- rrr:市场中的无风险利率,指进行无风险投资时资产价值增长率。实际上并不存在绝对无风险的投资,但类似买国债或在信誉好的银行存入定期存款可以近似看作无风险投资。
- σ\sigmaσ:资产价格增长率波动率,定义应该是σ2=Var[S(t+Δt)−S(t)S(t)]\sigma^2=Var[\frac{S(t+\Delta t)-S(t)}{S(t)}]σ2=Var[S(t)S(t+Δt)−S(t)] 。
1.3.2 价格和价值
感觉这两个词很容易被混用或混淆,所以简单在这里描述一下它们的特点:
- 价格(price):一般是指市场上我们考虑的商品的标价或买卖成交价。
- 价值(value):我们考虑的商品的“合理”价格,不一定严格等于市场上该商品的价格。”合理“这里指我们可以通过可靠的定价方式(比如无无风险套利),通过观察市场上除该商品考虑时刻价格之外的变量,估计出该商品在该时刻应有的价格。
虽然很多时候混着用也没什么问题,但它们应该是不同的。
1.3.3 正态分布累计概率函数
上面期权价格表达式中的N(x)N(x)N(x)函数为正态分布累计概率函数,为对标准正态分布(均值为0,标准差为1)概率密度从−∞-\infty−∞到xxx的积分,即
N(x)=∫−∞x12πe−s22ds.N(x) = \int_{-\infty}^x \frac{1}{\sqrt{2\pi}}e^{-\frac{s^2}{2}}ds\;\;.N(x)=∫−∞x2π1e−2s2ds.
一般具体数值都是查表或直接做数值积分,这里我们直接用scipy
模块里的stats.norm
类,它包含了正态分布相关的一些函数。其中norm.cdf()
即为累计概率函数。
下面左图为正态分布概率函数,右图为累计概率密度函数。
1.3.4 欧式期权的看跌-看涨平价关系
对于同期限和同执行价格的欧式看涨与看跌期权,有很方便使用的等式:
c+Ke−rT=p+S0.c+Ke^{-rT} = p+S_0\;\; .c+Ke−rT=p+S0.
我们可以通过考虑两组“等价”(同盈亏)的投资组合简单说明。考虑分别持有投资组合A和组合B的情况,其中
- 组合A:
一份欧式看涨期权,面值为KKK执行期为TTT的无风险零息债券(面值为KKK的零息债券当前价格为Ke−rTKe^{-rT}Ke−rT)。
当前总价值为 c+Ke−rTc+Ke^{-rT}c+Ke−rT。 - 组合B:
一份欧式看跌期权,一份期权对应资产(比如股票)。
当前总价值为 p+S0p+S_0p+S0。
在将来期权执行期限TTT时刻,
- 如果资产价格ST≥KS_T \geq KST≥K。则看涨期权价值为 ST−KS_T-KST−K,看跌期权价值为0。
- 组合A的价值为 ST−K+K=STS_T-K+K = S_TST−K+K=ST。
- 组合B的价值为 0+ST=ST0+S_T = S_T0+ST=ST。
- 如果资产价格ST<KS_T < KST<K。则看涨期权价值为0,看跌期权价值为 K−STK-S_TK−ST。
- 组合A的价值为 0+K=K0+K = K0+K=K。
- 组合B的价值为 K−ST+ST=KK-S_T+S_T = KK−ST+ST=K。
所以无论在未来欧式期权执行期限时资产的价格STS_TST是大于或者小于执行价格KKK,组合A和组合B的即期价值都是相等的。在这种情况下,如果两个组合在初始时刻价格不相同,则存在无风险套利机会(买入较便宜的组合,卖出较贵的组合)。所以当前组合A和组合B的价格必须相等,即
c+Ke−rT=p+S0.c+Ke^{-rT} = p+S_0\;\; .c+Ke−rT=p+S0.
1.3.5 计算中使用无风险利率rrr而不是资产预期收益率μ\muμ
我们已知(假设)资产价格的变化过程为一几何布朗运动,漂移率(预期收益率)为μ\muμ。但Black-Scholes-Merton 欧式期权定价公式里却没有μ\muμ,而是多了参数无风险利率rrr。直接原因是期权价格公式是由Black-Scholes-Merton 偏微分方程(PDE)推导出来的,该PDE具体为:
∂f∂t+rS∂f∂S+1σ∂2f∂S2=rf.\frac{\partial f}{\partial t}+rS\frac{\partial f}{\partial S}+\frac{1}\sigma\frac{\partial^2f}{{\partial S}^2} = rf\;\;.∂t∂f+rS∂S∂f+σ1∂S2∂2f=rf.
加上期权价格的边界条件,可以得到开头用到的欧式期权价格的解析解。解此PDE一般用变量替换加类比热传导方程的解,或者风险中性定价。
这里我们不推导该PDE,但是把得到它所需要的假设列一下:
- 欧式期权的价格只取决于对应资产的即期价格$ S(t) 和时刻和时刻和时刻 t $;
- 可进行Delta对冲消除不确定性:我们可以构造由期权和对应资产组成的投资组合,在任意时刻,足够小的时间段内,通过调整组合中不同资产的比例,使得投资组合的价值变化的过程在该很短的时间段内是确定的(比如描述过程的微分关系中没有布朗运动项);
- 无无风险套利空间:无风险(没有不确定性)的资产组合在很短时间内的收益必须等同于短时间内无风险投资(比如买国债)的收益(价值增长率为rrr)。
参考资料:
- 《期权、期货及其他衍生产品》,John C. Hull 著,王勇、索吾林译 。
第1节 欧式期权价格相关推荐
- 第2节 二叉树计算欧式和美式期权价格
第2节 二叉树计算欧式和美式期权价格 2.1 简介 2.2 二叉树计算期权价格算法 2.3 计算过程 Python 代码实现 2.4 相关说明 2.4.1 计算例子 2.4.2 树形定价收敛情况 1. ...
- matlab 期权图,如何使用matlab计算期权价格
参考论文 期权定价理论是现代金融学中最为重要的理论之一,也是衍生金融工具定价中最复杂的.本文给出了欧式期权定价过程的一个简单推导,并利用Matlab对定价公式给出了数值算例及比较静态分析,以使读者能更 ...
- 代入消元法 matlab,求助 如何用matlab计算期权价格
期权定价理论是现代金融学中最为重要的理论之一,也是衍生金融工具定价中最复杂的.本文给出了欧式期权定价过程的一个简单推导,并利用Matlab对定价公式给出了数值算例及比较静态分析,以使读者能更直观地理解 ...
- matlab用arch模型算隐含波动率,期权定价中的隐含波动率是用来衡量【基于MATLAB的欧式期权定价与隐含波动率应用】...
[摘 要]期权价格依赖于标的产品的价格.执行价格.无风险利率.从目前到期权到期的时间.基础资产的波动率等变量.欧式期权定价和银行波动率的应用是金融工程领域研究的重要内容.本文利用MATLAB工具箱实现 ...
- 蒙特卡洛期权价格模拟(包括最小二乘美式期权模拟)
1. 蒙特卡洛期权定价理论概述 (1)风险定价原理 (2)标的资产价格路径模拟 (3)期权到期回报贴现 (4)模拟运算次数与精度 (5)方差减少技术--对偶变量 (6)评价 2. 代码实现蒙特卡洛模拟 ...
- python解zuobiaoxi方程_欧式期权定价的python实现
0. pre 在<给你的二叉树期权定价>中就挖了坑要写期权定价的代码,这会有时间来填坑啦. 本文将会用python实现欧式期权定价.具体的定价算法分别是基于BS公式的.蒙特卡洛的以及二叉树 ...
- python金融工程的工具包_金融工程及其Python应用
目 录 第1章 金融工程导论 1 1.1 金融工程的概念 2 1.2 国外现代主流金融理论发展历程 2 1.3 国内金融的发展 3 1.4 现代主流金融理论简介 4 1.4.1 投资组合理论 4 1. ...
- 凤凰式期权matlab代码,美式期权二叉树定价及MATLAB程序.doc
美式期权二叉树定价及MATLAB程序 金融随机分析课程 美式期权的二叉树定价 1.对于连续随机游走: 可以用离散格随机游走模型来表示,即标的资产的价格只在离散时间点,2,3,-,N取值,表示很小但非无 ...
- 矩阵分析 第三章 内积空间 正规矩阵 Hermite矩阵
第一节 欧式空间和酉空间 欧式空间:在实数域的线性空间的基础上,有了内积的定义(两个空间元素相乘等于一个实数) 酉空间: 在复数域的线性空间基础上,有了内积的定义(两个空间元素相乘等于一个复数) 注意 ...
最新文章
- 免费学习编程的10个好工具
- 人民日报:中国 31 个省市区最好的大学
- 你真的了解你的手机?—麦克风降噪
- 信息系统项目管理师:第4章:项目整体管理与变更管理(1)
- PHP面向对象设计模式
- java类什么时候卸载_java – Android:什么时候类被系统卸载?
- 时光老人的飞鸽传书下载
- centos php mcrypt_面试经常问你什么是PHP垃圾回收机制?
- 力扣第202题. 快乐数(JavaScript)
- 为什么说没有物联网,就没有 AI ?
- [转载] java调用c++的dll及java.lang.UnsatisfiedLinkError解决方法
- 汉印科技大会:凝聚匠心 成就卓越民族打印机品牌
- 去水印小程序源码_图片去水印|去水印喵小程序
- win 通过 Distro 安装 linux 子系统
- angularjs2学习教程
- 河海大学计算机考研方向,2020河海大学计算机学硕838经验贴
- 第十二周《支持SQl Server内部,第二版》CHAR1数据页面和数据行 作者Dmitri Korotkevitch
- ajax调用ashx页面内的方法
- UG/NX二次开发 选择坐标系控件 UF_UI_specify_csys
- 东软慧聚助力汽车“芯”节能减排
热门文章
- 英语议论文论据03--------社会和国家
- cad标注文字避让lisp_[LISP]求助-如何特殊显示修改过的标注文字
- vue-cli+elementUI:个人信息提交表格显示Demo(附代码)
- 中文论文查重标准是什么?
- ICMP 使用wireshark抓包
- camcard for BB
- 请把ios文件解压出来是什么意思_ios信息列表美化,iphone必用技巧
- ftp上下载解析Excel
- 关于波斯历(奇怪的历法)
- 学习大数据的第11天——Java面向对象知识(重写、关键字final、abstract以及多态)