基于Python,从零开始,裸写一套期权定价程序
引言
之前我讲到,在实务中,一直用脚本式的“草稿”,会越来越困难。
Review:《对期权价格计算的实现方式的思考》
经反复验证,采用面向对象、策略模式来开发,是不错的选择。
这样,可以通过设置不同的实现类,用不同的定价算法实现期权价格计算。
开始裸写吧!我说的裸写,是指不借助任何第三方包,纯粹自己写。
(有点夸张,毕竟正态分布的累计概率函数,还是需要调包的…)
主要思想
1. 应该有一个期权基类。其中,成员变量有到期时间等公共属性,成员函数有计算价格、计算greeks等函数。
2. 针对不同类型的期权,应该有特有的参数,如欧式期权有行权价,欧式价差期权应该有高、低行权价,障碍期权应该有行权价、障碍价等。
3. 针对市场环境(定价参数,如标的波动率v、无风险利率r、分红率d),可以用一个对象来封装数据,但我为了简单,把v、r、d写到期权基类里了。
4. 为了实现针对不同类别的期权价格计算用不同的算法,可以让期权拥有一个成员变量,叫定价引擎。这个类实现真正的计算功能,而期权的计算价格函数,则是调用其定价引擎的计算价格实现函数。
设计节选
最基本的两个对象
更像是架构师声明的接口。
基础期权类:basic_option.py
基础定价引擎类:basic_price_engine.py
具体的定价引擎类
考虑到需要用不同的算法(如解析解、有限差分、蒙特卡洛)实现期权定价,我针对三种类别算法,分别定义了各自的基本定价引擎类。
解析法定价引擎,anlytic_price_engnine.py
有限差分法定价引擎,fde_price_engine.py
蒙特卡洛法定价引擎,mc_price_engine.py
内容实在有点多,有限差分法和蒙特卡洛算法实现的定价引擎代码,这次就不放上来了。
具体的期权对象
欧式看涨期权,vanilla_call_option.py
欧式看跌期权:vanilla_put_option.py
具体的定价引擎类
欧式看涨期权解析定价引擎,vanilla_call_analytic_price_engine.py
欧式看跌期权解析定价引擎,vanilla_call_analytic_price_engine.py
终于,可以调用了
# 自己引入需要的类if __name__ == '__main__':s = 4940.37k = 4940.37t = 0.30v = 0.15r = 0.05d = 0.0option = VanillaPutOption()option.s = soption.k = koption.t = toption.v = voption.r = roption.d = dprint(option.to_info_string())price_engine = VanillaPutAnalyticPriceEngine()option.price_engine = price_engineprint(option.to_greeks_string())
总结
一个好的架构师,是可以把任务分出去的。
各种类型的期权,基于以上的结构,是可以持续开发的。
想要解析解,就写解析引擎,把公式打上去。
想要有限差分,就写有限差分引擎,把数值算法敲上去。
想要蒙特卡罗,就把生成随机过程的代码搞上去。
一个项目、部门、企业,乃至国家,想要做大做强,都需要良好的架构。
奉劝眼高手低的人,永远不要低估困难,也永远不要高估自己的水平。
接手草稿,变废为宝。一个人做,非常艰难,但理解深刻。
后记
后来,我发现,开源项目quantlib的做法,大概也是这样。
所以,一条忠告,没事多学习,少瞎几把扯淡。
基于Python,从零开始,裸写一套期权定价程序相关推荐
- python爱心代码_母亲节快到了,用Python给老妈写个祝福小程序吧~
导 语 看到好多人留言问我咋好久没更新文章了,于是看了下上篇文章的发布日期,好吧确实挺久的,是该上线更一波文章了.想到母亲节快到了,不如就用Python给老妈写个祝福小程序吧~让我们愉快地开始吧~ 相 ...
- 基于Python实现图片格式转换的小程序
基于Python实现图片格式转换的小程序 特点: 批量处理图片 转换常见的4种图片格式 运行窗口 运行窗口-1 选择图片(可批量选择)-2 假设选中4张JEPG格式的图片 格式选择窗口-3 假设选择目 ...
- python在哪里写代码比较适合-程序员面试被要求手写代码,你与顶级程序员的差别在哪?...
原标题:程序员面试被要求手写代码,你与顶级程序员的差别在哪? 前言: Python现在非常火,语法简单而且功能强大,很多同学都想学Python! 所以小的给各位看官们准备了收藏已久的视频教程分享给大家 ...
- 基于python的手写数字识别knn_KNN分类算法实现手写数字识别
需求: 利用一个手写数字"先验数据"集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ♦数据维度比较大,样本数比较多. ♦ 数据集包括数字0-9的手写体. ...
- 基于python的手写数字识别实验报告_联机手写数字识别实验报告
1 联机手写数字识别设计 一.设计论述 模式识别是六十年代初迅速发展起来的一门学科. 由于它研究的是如何用机 器来实现人 ( 及某些动物 ) 对事物的学习. 识别和判断能力, 因而受到了很多科技 领域 ...
- 基于Python Django框架后端的微信小程序开发
刚做完一个股票信息服务类的微信小程序(小程序名字"博股论基",大家有兴趣可以搜一下),也有一些心得,在这里记录一下开发过程,算是个开发笔记,同时也希望能给需要的同学一些帮助. -- ...
- python开源ip代理池_[技术]基于python实现的短效代理ip池程序
我们在写爬虫程序的时候,或者是抓取数据的时候,遇到一些发爬不是很厉害的网站,一般都是通过代理ip来实现绕过对方的反爬措施. 一般好的代理都是需要付费的,免费的代理速度慢,而且难找.市面上也有很多对应的 ...
- 2020软件测试自学全套教程-基于python自动化软件测试-2020新版软件测试中级程序员学习路线
不知不觉间,在软件测试行业野蛮的折腾了七年之久.七年之痒也即将过去,但我还是热爱着软件测试这一份工作,一路坚持,走到现在.经历过各种难题,有过迷茫,有过焦虑失眠.也踩过无数的坑,深知行业的不易.自从9 ...
- 2022软件测试自学全套教程-基于python自动化软件测试-2022新版软件测试中级程序员学习路线
不知不觉间,在软件测试行业野蛮的折腾了七年之久.七年之痒也即将过去,但我还是热爱着软件测试这一份工作,一路坚持,走到现在.经历过各种难题,有过迷茫,有过焦虑失眠.也踩过无数的坑,深知行业的不易.自从9 ...
最新文章
- HttpSessionActivationListener接口 学习笔记
- 开源数据库该怎么玩?
- java ExecutorService
- dyld: Library not loaded: @rpath/XCTest.framework/XCTest
- 基于 Swoole 的 swoolefy 4.2.0 正式发布
- oracle中sp,sp是什么?
- oracle锁表语句执行提示无法终止当前对话_Oracle 强制中止正在执行的SQL语句
- Google CVPR 2019最新成果!用神经架构搜索实现更好的目标检测
- android.opengl.GLSurfaceView概述
- 机器学习做自动聊天机器人_聊天机器人业务领袖指南
- CMake 安装与卸载
- NRF24L01+在K60单片机中的具体实现
- 51单片机学习:串口通信实验
- 计算机无法删除u盘里东西,u盘里东西删不掉,详细教您u盘文件删不了怎么办
- P2440 木材加工
- ASPCMS插件,批量ASPCMS采集发布插件
- 自己的第一份保险(均来自太平):“福禄康瑞2018重疾险” + “医无忧” + “爱无忧”(状态:已退,20190530)...
- oracle 抽样_oracle优化手段--统计信息导出和抽样提取数据
- 对比Eureka和Nacos 的区别 Zuul和Spring Gateway的区别
- ldap + sentry架构的相关结论的验证