一、Heston期权定价模型理论

1973年BS期权定价模型的诞生标志着期权定价进入精确的数量化测度阶段。但是BS模型假设标的资产波动率为常数,这与现实市场观测到的“波动率微笑”曲线严重不符。
heston假设标的资产的价格服从如下过程,其中波动率为时变函数[1]:

并且求出了欧式看涨期权定价公式[2]:


本文使用python实现了上述定价公式。该公式需要输入一共九个参数,其中[v0,kappa,theta,sigma,rho]需要提前自行设置并填入。另外四个 [K,t,s0,r]:[执行价格,剩余时间,标的资产价格,无风险利率] 则是期权价格数据,BS模型定价同样需要这几个参数。

二、Heston期权定价的python代码

本文所使用的代码目录如下图所示。这些文件各自发挥各自作用,共同组成整个项目。下面将逐个说明各个文件的作用。可以到百度云地址下载项目压缩包,解压便可以查看如下文件。百度云盘地址:链接:链接:https://pan.baidu.com/s/1UOeiyB29W_8rjUE5F0pHvQ
提取码:fnhl

1. Heston看涨期权价格计算.py

该文件主要用于计算Heston看涨期权价格。该模型一共需要输入九个参数,其中 执行价格K、剩余到期时间(年)t、标的资产价格s0、无风险收益率r 是可以从市场上获得的原始样本数据;而另外五个参数 v0、kappa、theta、sigma、rho是无法从市场上获得的,因此需要自行提前指定。本文已经提前指定默认值。如文件末尾所示,该文件的用法如下:

if __name__=='__main__':#尝试计算一只欧式看涨期权的heston价格,其中执行价格为2.15,剩余到期时间为0.05924年,标的资产价格为2.143896,无风险收益率为3.043%HC=HestonCall(K =2.15, t = 0.05924, s0 = 2.143896, r = 0.03043)HC.Call_Value()#发现计算出来的价格为0.02445730985668737

2. 模拟退火算法.py

这是一个一般性的模拟退火算法类,可以用于求解函数最值问题。如文件末尾所示,具体用法如下:

if __name__=='__main__':# 用模拟退货算法求解下面函数最小值def func_target(list_x):x1 = list_x[0]x2 = list_x[1]return 3 * (x1 - 5) ** 2 + 6 * (x2 - 6) ** 2 - 7ng=NG(func=func_target,x0=[8,9])ng.run()x,f=ng.get_history_best_xy()#查看历史最优解ng.plot_best()#绘制最优解变化过程

3. 用于求解Heston模型参数的模拟退火算法.py

这是一个辅助性函数文件,相当于在上面两个文件之间搭建了一个桥梁。

4. 用于控制随机数取值范围.py

这是一个辅助性文件。由于模拟退火算法在运行过程中,可能会产生及其不合理的随机数。因此用这个文件,将产生的随机数限制在指定范围内变化,从而防止过于极端的数字破坏算法运行。
如文件末尾所示,具体用法如下:

    x=0.3;a=0;b=4sum_False=0x_all=[]for i in range(1000):x=random_range(x,a,b)x_all.append(x)print(x)if x>b or x<a:sum_False+=1

5. 求解Heston最优参数估计值.py

这是汇总文件,相当于将其他各个功能的文件汇集于一处,利用算法计算最优参数。

三、具体使用方法和训练过程

使用者仅需要打开 main.py 文件,通过修改date_start_train和date_end_train来选择指定时间范围内的样本数据(注意时间范围不要超过样本数据范围),然后运行整个文件即可。如文件末尾所示,具体用法如下:

if __name__=='__main__':data = pd.read_csv('上证50ETF期权数据.csv')  # 读取原始数据date_start_train = 20200912#选择数据的开始日期date_end_train = 20201212#选择数据的结束日期option = data[(data['交易日期'] >= date_start_train) & (data['交易日期'] <= date_start_train)]#选择指定时间范围内的数据option = option[option['看涨看跌类型'] == 'C']#选择看涨期权数据option = option[['执行价格', '剩余到期时间(年)', '上证50ETF价格', '无风险收益率(shibor)', '期权收盘价']]#选择需要使用的数据option.columns = ['K', 't', 's0', 'r', 'c']#将列标题名称修改为可以使用的格式model = SV_SA(data=option)#建立类model.sa()#开始训练数据model.ng.get_history_best_xy()#查看训练的最优参数

如果函数正常运行,则表示模型开始训练起来。如下图所示:

选择的时间范围越长,数据越多,训练所需要用的时间就越长,需要耐心等待。图中第一行的第18轮表示已经训练了18次。
第四行的0.26065704495339076表示,经过这么多轮训练,误差均值最小曾经是这个数。后面的 [0.03428510285418432, 1.8175642423909502, 0.05918991416183704, 0.08993856753384533, -0.4315029814189466] 则表示,当前所产生的最优解应该是这个数,即heston模型的后面五个参数所估计出来的最优值。
理论上来讲,随着时间的推移,比如训练各一天一夜,第四行的训练误差会变得越来越小,越小越好。但如果模型训练不停止,也可以选择第四行后面的五个当前最优解作为目标值。

使用python的模拟退火算法估计heston期权定价模型的五个参数(新)相关推荐

  1. 三、python实现模拟退火算法

    文章目录 一.概述 二.算法原理 三.python实现 3.1 构建目标函数 3.2 算法实现 四.Tips 一.概述   模拟退火算法是一种通用的优化算法,理论上算法具有概率的全局优化性能,目前已在 ...

  2. 详解Python使用模拟退火算法求解列表“最大值”

    模拟退火算法可以看作是爬山算法的一种改进,如果前方有更优解就前进,如果没有更优解就以一定概率前进.与简单的爬山算法相比,模拟退火算法有可能跳出局部而得到全局最优解,但也有可能得到更差的解,算法参数的设 ...

  3. Python数模笔记-模拟退火算法(4)旅行商问题

    1.旅行商问题(Travelling salesman problem, TSP) 旅行商问题是经典的组合优化问题,要求找到遍历所有城市且每个城市只访问一次的最短旅行路线,即对给定的正权完全图求其总权 ...

  4. Python数模笔记-模拟退火算法(1)多变量函数优化

    1.模拟退火算法 模拟退火算法借鉴了统计物理学的思想,是一种简单.通用的启发式优化算法,并在理论上具有概率性全局优化性能,因而在科研和工程中得到了广泛的应用. 退火是金属从熔融状态缓慢冷却.最终达到能 ...

  5. 模拟退火算法(Simulated Annealing,SA)的全面讲解及python实现

    https://blog.csdn.net/Trisyp/article/details/104953406 抽象来源:美国物理学家Metropolis等人在1953年发表研究复杂系统,计算其中能量分 ...

  6. Python 模拟退火算法

    模拟退火算法借鉴了统计物理学的思想,是一种简单.通用的启发式优化算法,并在理论上具有概率性全局优化性能,因而在科研和工程中得到了广泛的应用. 退火是金属从熔融状态缓慢冷却.最终达到能量最低的平衡态的过 ...

  7. 模拟退火算法SA求解连续函数极值

    目录 一.模拟退火算法原理 二.模拟退火算法思想 三.模拟退火算法流程 四.关键参数说明 五.例题 一.模拟退火算法原理 模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却.加温时,固 ...

  8. 模拟退火算法解决TSP(python实现 110+行代码)【gif生成】

    简述 代码我是基于我之前写的两篇,一篇是遗传算法TSP的Python实现,一篇是模拟退火算法的解决TSP的C++实现. 模拟退火算法理论+Python解决函数极值+C++实现解决TSP问题 遗传算法解 ...

  9. 模拟退火算法理论+Python解决函数极值+C++实现解决TSP问题

    简述 算法设计课这周的作业: 赶紧写了先,不然搞不完了. 文章目录 简述 算法理论部分 变量简单分析 从状态转移概率到状态概率 推导 理解当温度收敛到接近0的时候,收敛到结果 理论部分的后记 pyth ...

  10. Python数模笔记-模拟退火算法(3)整数规划问题

    1.整数规划问题 整数规划问题在工业.经济.国防.医疗等各行各业应用十分广泛,是指规划中的变量(全部或部分)限制为整数,属于离散优化问题(Discrete Optimization). 线性规划问题的 ...

最新文章

  1. 麦司机博客项目技术选型-Java后端
  2. 多线程大文件断点续传和流媒体的处理方法
  3. rabbitMQ(二):Fanout Exchange
  4. sftp get服务器无文件会抛异常,sftp 异常,有遇到的吗
  5. Python 字符串操作基础
  6. unity3d 预制体
  7. java上帝模块常见的情况_JVM上帝视角看JVM内存模型,分而治之论各模块详情详解...
  8. oracle的游标的属性,Oracle 游标属性
  9. 白话阿里巴巴Java开发手册高级篇
  10. 微信支付二维码生成工具类
  11. 服务器系统2019回滚2016,原版系统一键优化精简方案(Win10/Server2016/Server2019)
  12. 金彩教育:怎么布局人群标签
  13. windows下文件名太长无法删除的问题
  14. 2017-07-07 2,3,5,7倍数
  15. 应用程序清单 Manifest 中各种 UAC 权限级别的含义和效果
  16. ubuntu上打开markdown文件
  17. 在隐身模式下使用 Chrome 扩展程序
  18. Python-Tkinter和PyInstaller简介及定时关机程序的简易实现
  19. 怎样查看计算机主题,快速查看win10电脑中的主题壁纸保存位置的方法
  20. 产品防伪码查询系统_学历学籍查询系统_证书查询系统_录取成绩查询系统_工资查询系统_信息查询系统

热门文章

  1. 在Intellij IDEA中使用Debug
  2. 粒子群课设_粒子群算法(人工智能结课论文)
  3. 四川农大2020计算机专业录取分数线,四川农业大学2020年美术类本科专业录取分数线...
  4. c++的priority_queue各种使用方法
  5. 计算机编程需要学哪些基础知识,学编程需要掌握哪些基础知识
  6. Facebook广告有哪些有效策略呢?
  7. 简易登录以及注册界面制作
  8. 无人驾驶全局路径规划之路径平滑(贝塞尔曲线)
  9. 今日不谈股市, 谈谈财政部副部长廖晓军不降个税问题
  10. 2048游戏(C语言)