引言

之前我讲到,在实务中,一直用脚本式的“草稿”,会越来越困难。

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,从零开始,裸写一套期权定价程序相关推荐

  1. python爱心代码_母亲节快到了,用Python给老妈写个祝福小程序吧~

    导 语 看到好多人留言问我咋好久没更新文章了,于是看了下上篇文章的发布日期,好吧确实挺久的,是该上线更一波文章了.想到母亲节快到了,不如就用Python给老妈写个祝福小程序吧~让我们愉快地开始吧~ 相 ...

  2. 基于Python实现图片格式转换的小程序

    基于Python实现图片格式转换的小程序 特点: 批量处理图片 转换常见的4种图片格式 运行窗口 运行窗口-1 选择图片(可批量选择)-2 假设选中4张JEPG格式的图片 格式选择窗口-3 假设选择目 ...

  3. python在哪里写代码比较适合-程序员面试被要求手写代码,你与顶级程序员的差别在哪?...

    原标题:程序员面试被要求手写代码,你与顶级程序员的差别在哪? 前言: Python现在非常火,语法简单而且功能强大,很多同学都想学Python! 所以小的给各位看官们准备了收藏已久的视频教程分享给大家 ...

  4. 基于python的手写数字识别knn_KNN分类算法实现手写数字识别

    需求: 利用一个手写数字"先验数据"集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ♦数据维度比较大,样本数比较多. ♦ 数据集包括数字0-9的手写体. ...

  5. 基于python的手写数字识别实验报告_联机手写数字识别实验报告

    1 联机手写数字识别设计 一.设计论述 模式识别是六十年代初迅速发展起来的一门学科. 由于它研究的是如何用机 器来实现人 ( 及某些动物 ) 对事物的学习. 识别和判断能力, 因而受到了很多科技 领域 ...

  6. 基于Python Django框架后端的微信小程序开发

    刚做完一个股票信息服务类的微信小程序(小程序名字"博股论基",大家有兴趣可以搜一下),也有一些心得,在这里记录一下开发过程,算是个开发笔记,同时也希望能给需要的同学一些帮助. -- ...

  7. python开源ip代理池_[技术]基于python实现的短效代理ip池程序

    我们在写爬虫程序的时候,或者是抓取数据的时候,遇到一些发爬不是很厉害的网站,一般都是通过代理ip来实现绕过对方的反爬措施. 一般好的代理都是需要付费的,免费的代理速度慢,而且难找.市面上也有很多对应的 ...

  8. 2020软件测试自学全套教程-基于python自动化软件测试-2020新版软件测试中级程序员学习路线

    不知不觉间,在软件测试行业野蛮的折腾了七年之久.七年之痒也即将过去,但我还是热爱着软件测试这一份工作,一路坚持,走到现在.经历过各种难题,有过迷茫,有过焦虑失眠.也踩过无数的坑,深知行业的不易.自从9 ...

  9. 2022软件测试自学全套教程-基于python自动化软件测试-2022新版软件测试中级程序员学习路线

    不知不觉间,在软件测试行业野蛮的折腾了七年之久.七年之痒也即将过去,但我还是热爱着软件测试这一份工作,一路坚持,走到现在.经历过各种难题,有过迷茫,有过焦虑失眠.也踩过无数的坑,深知行业的不易.自从9 ...

最新文章

  1. HttpSessionActivationListener接口 学习笔记
  2. 开源数据库该怎么玩?
  3. java ExecutorService
  4. dyld: Library not loaded: @rpath/XCTest.framework/XCTest
  5. 基于 Swoole 的 swoolefy 4.2.0 正式发布
  6. oracle中sp,sp是什么?
  7. oracle锁表语句执行提示无法终止当前对话_Oracle 强制中止正在执行的SQL语句
  8. Google CVPR 2019最新成果!用神经架构搜索实现更好的目标检测
  9. android.opengl.GLSurfaceView概述
  10. 机器学习做自动聊天机器人_聊天机器人业务领袖指南
  11. CMake 安装与卸载
  12. NRF24L01+在K60单片机中的具体实现
  13. 51单片机学习:串口通信实验
  14. 计算机无法删除u盘里东西,u盘里东西删不掉,详细教您u盘文件删不了怎么办
  15. P2440 木材加工
  16. ASPCMS插件,批量ASPCMS采集发布插件
  17. 自己的第一份保险(均来自太平):“福禄康瑞2018重疾险” + “医无忧” + “爱无忧”(状态:已退,20190530)...
  18. oracle 抽样_oracle优化手段--统计信息导出和抽样提取数据
  19. 对比Eureka和Nacos 的区别 Zuul和Spring Gateway的区别
  20. ldap + sentry架构的相关结论的验证

热门文章

  1. MATLAB软件基础学习篇——003
  2. 怎样给pdf添加水印,给pdf添加水印的两个方法
  3. 电力电子转战数字IC——路科MCDF全览(持续更新)
  4. 物联网概念火热,靠技术如何落地?
  5. 7-2 然后是几点 (15 分)
  6. 清华镜像源安装Pytorch
  7. 35岁程序员失业了,找不到合适工作?看完让人心疼……
  8. python科学计算试题_中国大学Python科学计算单元测试答案
  9. 什么是孤独?。。。一款只有6个用户的APP
  10. 你所不了解的DevOps