最近在一家券商的场外衍生品部门实习,刚做的一个课题是关于delta动态对冲为香草期权定价,参考了John Hull的《期权、期货及其他衍生产品》,发现里面有关于delta对冲的内容,现在先用python来将书上的案例进行还原。

 

为了对冲卖出的看涨期权带来的风险,需要买入一定的股票进行对冲,买入股票的数量即为该看涨期权的delta值乘上卖出的期权数,在该案例中delta为0.522

下面是两种对冲的情形,分别对应期权到期日能否行权的两种情况。

第一种情况:到期日股价高于执行价,可以行权,此时的期权复制成本为263300美元。

 第二种情况:到期日股价低于执行价,不能行权,此时的期权复制成本为256600美元。

下面是python代码实现

先写一个bsm.py,定义在BSM模型下看涨期权的价值和delta

from math import log, sqrt, exp
from scipy import stats
import numpy as npclass BSMOptionValuation:def __init__(self, S0, K, T, r, sigma,  div=0.0):self.S0 = float(S0)self.K = float(K)self.T = float(T)self.r = float(r)self.sigma = float(sigma)self.div_yield = float(div)self.d1 = ((log(self.S0 / self.K) + (self.r - self.div + 0.5 * self.sigma ** 2) * self.T) / (self.sigma * sqrt(self.T)))self.d2 = self.d1 - self.sigma * sqrt(self.T)def call_value(self):call_value = (self.S0 * exp(-self.div * self.T) * stats.norm.cdf(self.d1, 0.0, 1.0) - self.K * exp(-self.r * self.T) * stats.norm.cdf(self.d2, 0.0, 1.0))return call_valuedef delta(self):delta_call = exp(- self.div * self.T) * stats.norm.cdf(self.d1, 0.0, 1.0)delta_put = -exp(- self.div * self.T) * stats.norm.cdf(-self.d1, 0.0, 1.0)return delta_call, delta_put

然后进行案例复现

这里我用的是第一种股票走势进行模拟,大家可以测试用第二种来模拟,结果和书上的一样

from math import log, sqrt, exp
import numpy as np
import scipy.stats as si
from scipy.stats import norm
from bsm import *
import pandas as pdif __name__=='__main__':#期权的关键参数N = 100000                          # 期权份数S1 = [49,48.12,47.37,50.25,51.75,53.12,53,51.87,51.38,53,49.88,48.5,49.88,50.37,52.13,51.88,52.87,54.87,54.62,55.87,57.25]        # 股票价格第一种走势S2 = [49,49.75,52,50,48.38,48.25,48.75,49.63,48.25,48.25,51.12,51.5,49.88,49.88,48.75,47.5,48,46.25,48.13,46.63,48.12]           # 股票价格第二张走势K = 50                              # 行权价r = 0.05                            # 无风险利率sigma = 0.2                         # 波动率T = 0.3846                          # 期限simulation = 20                     # 路径步数dt =T / simulation                  # 单位步数# 初始结构设定expire_time = np.append((np.ones((simulation , 1)) * dt).cumsum()[::-1],0)         # 到期期限的时间序列cash = np.zeros(simulation + 1)                                                    # 现金账户div = np.zeros(simulation)                                                         # 利息账户delta = np.zeros(simulation)                                                       # delta#开始对冲for step in range(simulation+1):# 期初开仓if step == 0:delta[step] = BSMOptionValuation(S1[step], K, expire_time[step], r, sigma).delta()[0]           # 计算对冲路径上deltacash[step] = delta[step] * N * S1[0]                                                            # 期初现金账户div[step] = cash[step] * r * dt                                                                # 期初利息账户# 中途对冲if step in range(1,simulation):delta[step] = BSMOptionValuation(S1[step], K, expire_time[step], r, sigma).delta()[0]cash[step] = cash[step-1] + div[step-1] + (delta[step] - delta[step - 1]) * S1[step] * N       # 每日结算损益div[step] = cash[step] * r * dt# 期末结算if step == simulation:if S1[step] > K:cash[step] = cash[step-1] + div[step-1] - N * Kelif S1[step] <=K :cash[step] = cash[step-1] + div[step-1] - delta[step - 1] * S2[step] * Nprint(cash[-1])            # 返回期权复制成本
C:\ProgramData\Anaconda3\envs\untitled\python.exe C:/Users/Administrator/PycharmProjects/pythonProject/deltahedge_clone.py
263061.29677824676

结果非常接近书上的263300美元,误差在于书上的计算都只保留了小数点后一位,我这里没有这样操作,另一种股票走势的结果如下,和书上的256600美元非常接近:

C:\ProgramData\Anaconda3\envs\untitled\python.exe C:/Users/Administrator/PycharmProjects/pythonProject/deltahedge_clone.py
256520.06138881645

后面我了解到,业界往往会用cash delta而非delta来进行动态对冲,同时股票路径可以用蒙特卡洛来进行模拟,下一篇我将展示如何用python来实现基于蒙特卡洛模拟的cash delta动态对冲。

delta动态对冲的python代码实现(1)相关推荐

  1. python 动态编译代码_使用PyQt(Python+Qt)+动态编译36行代码实现的计算器

    PyQt是基于跨平台的图形界面C++开发工具Qt加Python包装的一个GPL软件(GPL是GNU General Public License的缩写,是GNU通用公共授权非正式的中文翻译),Qt基于 ...

  2. 刷爆全网的动态条形图,原来 5 行 Python 代码就能实现!

    作者 | 小F 来源 | 法纳斯特(ID:walker398) 头图 |  CSDN 下载自视觉中国 说起动态图表,最火的莫过于动态条形图了. 在B站上搜索「数据可视化」这个关键词,可以看到很多与动态 ...

  3. python定义变量并赋值_Python动态声明变量赋值代码实例

    这篇文章主要介绍了Python动态声明变量赋值代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通过exec().globals()和loca ...

  4. 一行Python代码制作动态二维码

    目录 1.普通二维码 2.艺术二维码 3.动态二维码 在GitHub上发现了一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码.艺术二维码(黑白/彩色)和动态GIF二维码. ...

  5. 教你用1行Python代码制作动态二维码

    在GitHub上发现了一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码.艺术二维码(黑白/彩色)和动态GIF二维码. GitHub网站参见:https://github.c ...

  6. 5行Python代码实现刷爆全网的动态条形图!

    作者 | 小F 来源 | 法纳斯特(ID:walker398) 头图 |  CSDN 下载自视觉中国 说起动态图表,最火的莫过于动态条形图了. 在B站上搜索「数据可视化」这个关键词,可以看到很多与动态 ...

  7. python自制简易二维码代码_用python把自己的二维码制作成动态码,一行代码即可搞定!敲简单!...

    分享一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码.艺术二维码(黑白/彩色)和动态GIF二维码. 用法比较简单,直接通过pip安装即可. pip3 install myq ...

  8. UN Comtrade(联合国商品贸易统计数据库)数据爬取Python代码——使用动态IP

    目录 Virtual Private Network 代理服务器 测试代理IP是否生效 上一篇博文UN Comtrade(联合国商品贸易统计数据库)数据爬取Python代码讲了如何使用Python爬取 ...

  9. 刷爆全网的动态条形图,原来5行Python代码就能实现!

    击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 千载琵琶作胡语,分明怨恨曲中论. 说 ...

最新文章

  1. 扒中台的“祖坟”!对不起,Supercell的“中台”,你学不会
  2. 互联网项目开始时需要去谈的产品需求分析:
  3. scrapy爬虫代理——利用crawlera神器,无需再寻找代理IP
  4. leetcode 367. Valid Perfect Square
  5. c语言switch编写计算器,超级新手,用switch写了个计算器程序,求指导
  6. 解决:Truncated incorrect DOUBLE value: xxxX-1‘
  7. LeetCode 549. 二叉树中最长的连续序列(树上DP)
  8. Confluence 6 为站点启用匿名用户访问
  9. tar 打包压缩与解压缩
  10. 推荐几款不错的Chrome 插件
  11. Fujitsu DPK8310Tax 打印机驱动
  12. 链表:头插法与尾插法(简易图解和代码)
  13. Burp Suite暴力破解网站密码
  14. 如何用excel筛选相似内容_excel怎么筛选出相同内容
  15. 流氓软件和骚扰电话是时候该清理下了
  16. ffmpeg批量m4a转mp3
  17. 计算机怎么学要记笔记,留法十全大补汤 | 学姐告诉你在法国上课如何记笔记,复习,考试!...
  18. 计算机维修高级工考试员题库,职业技能鉴定国家题库统一试卷高级计算机维修工知识试题...
  19. 镁客网每周硬科技领域投融资汇总(3.24-3.30),FF喜提新救主...
  20. 金山云郝明非:一年上线整套流媒体处理服务

热门文章

  1. 在图片上显示左右箭头的翻页代码
  2. 一、2013_B C/C++
  3. Java人机猜拳思路及实现
  4. postcss-plugin-px2rem 移动端适配原理
  5. win10麦克风无法使用,视频连线时对方听不到我的声音——解决办法
  6. python对acf、pacf复现
  7. MySQL表如何导入图片_excel怎么把图片导入表格
  8. ClownFish是什么?
  9. mysql 存储过程 数字相加_mysql 存储过程 数字相加
  10. (附源码)计算机毕业设计ssm宠物用品购物网站