python障碍式期权定价公式


Posted in Python onJuly 19, 2019

早期写的python障碍式期权的定价脚本,供大家参考,具体内容如下

#coding:utf-8
'''
障碍期权
q=x/s
H = h/x H 障碍价格
[1] Down-and-in call cdi
[2] Up-and-in call cui
[3] Down-and-in put pdi
[4] Up-and-in put pui
[5] Down-and-out call cdo
[6] Up-and-out call cuo
[7] Down-and-out put pdo
[8] Up-and-out put puo

'''
from math import log,sqrt,exp,ceil
from scipy import stats
import datetime
import tushare as ts
import pandas as pd
import numpy as np
import random
import time as timess
import os

def get_codes(path='D:\\code\\20180313.xlsx'):     #从代码表格从获取代码
 codes = pd.read_excel(path)
 codes = codes.iloc[:,1]    
 return codes

def get_datas(code,N=1,path='D:\\data\\'):        #获取数据N=1当天数据
 datas = pd.read_csv(path+eval(code)+'.csv',encoding='gbk',skiprows=2,header=None,skipfooter=N,engine='python').dropna() #读取CSV文件 名称为股票代码 解gbk skiprows跳过前两行文字 第一行不做为表头
 date_c = datas.iloc[:,[0,4,5]]     #只用第0 列代码数据和第4列收盘价数据
 date_c.index = datas[0]
 return date_c

def get_sigma(close,std_th):
 x_i = np.log(close/close.shift(1)).dropna()
 sigma = x_i.rolling(window=std_th).std().dropna()*sqrt(244)
 return sigma

def get_mu(sigma,r):
 mu = (r-pow(sigma,2)/2)/pow(sigma,2)
 return mu

def get_lambda(mu,r,sigma):
 lam = sqrt(mu*mu+2*r/pow(sigma,2))
 return lam

def x_y(sigma,T,mu,H,lam,q=1):
 x1 = log(1/q)/(sigma*sqrt(T))+(1+mu)*sigma*sqrt(T)
 x2 = log(1/(q*H))/(sigma*sqrt(T))+(1+mu)*sigma*sqrt(T)
 y1 = log(H*H/q)/(sigma*sqrt(T))+(1+mu)*sigma*sqrt(T)
 y2 = log(q*H)/(sigma*sqrt(T))+(1+mu)*sigma*sqrt(T)
 z = log(q*H)/(sigma*sqrt(T))+lam*sigma*sqrt(T)
 return x1,x2,y1,y2,z

def get_standardBarrier(eta,phi,mu,sigma,r,T,H,lam,x1,x2,y1,y2,z,q=1):
 f1 = phi*1*stats.norm.cdf(phi*x1,0.0,1.0)-phi*q*exp(-r*T)*stats.norm.cdf(phi*x1-phi*sigma*sqrt(T),0.0,1.0)
 f2 = phi*1*stats.norm.cdf(phi*x2,0.0,1.0)-phi*q*exp(-r*T)*stats.norm.cdf(phi*x2-phi*sigma*sqrt(T),0.0,1.0)
 f3 = phi*1*pow(H*q,2*(mu+1))*stats.norm.cdf(eta*y1,0.0,1.0)-phi*q*exp(-r*T)*pow(H*q,2*mu)*stats.norm.cdf(eta*y1-eta*sigma*sqrt(T),0.0,1.0)
 f4 = phi*1*pow(H*q,2*(mu+1))*stats.norm.cdf(eta*y2,0.0,1.0)-phi*q*exp(-r*T)*pow(H*q,2*mu)*stats.norm.cdf(eta*y2-eta*sigma*sqrt(T),0.0,1.0)
 f5 = (H-1)*exp(-r*T)*(stats.norm.cdf(eta*x2-eta*sigma*sqrt(T),0.0,1.0)-pow(H*q,2*mu)*stats.norm.cdf(eta*y2-eta*sigma*sqrt(T),0.0,1.0))
 f6 = (H-1)*(pow(H*q,(mu+lam))*stats.norm.cdf(eta*z,0.0,1.0)+pow(H*q,(mu-lam))*stats.norm.cdf(eta*z-2*eta*lam*sigma*sqrt(T),0.0,1.0))
 return f1,f2,f3,f4,f5,f6

def main(param,t,r=0.065):
 typeflag = ['cdi','cdo','cui','cuo','pdi','pdo','pui','puo']
 r = log(1+r)
 T = t/365
 codes = get_codes()
 H = 1.2
 for i in range(len(codes)):
 sdbs = []
 for j in typeflag:
 code = codes.iloc[i]
 datas = get_datas(code)
 close = datas[4]
 sigma = get_sigma(close,40)[-1]
 mu = get_mu(sigma,r)
 lam = get_lambda(mu,r,sigma)
 x1,x2,y1,y2,z = x_y(sigma,T,mu,H,lam)
 eta = param[j]['eta']
 phi = param[j]['phi']
 f1,f2,f3,f4,f5,f6 = get_standardBarrier(eta,phi,mu,sigma,r,T,H,lam,x1,x2,y1,y2,z)
 if j=='cdi':
 sdb = f1-f2+f4+f5
 if j=='cui':
 sdb = f2-f3+f4+f5
 if j=='pdi':
 sdb = f1+f5
 if j=='pui':
 sdb = f3+f5
 if j=='cdo':
 sdb = f2+f6-f4
 if j=='cuo':
 sdb = f1-f2+f3-f4+f6
 if j=='pdo':
 sdb = f6
 if j=='puo':
 sdb = f1-f3+f6
 sdbs.append(sdb)
 print(T,r,sigma,H,sdbs)
if __name__ == '__main__':
 param = {'cdi':{'eta':1,'phi':1},'cdo':{'eta':1,'phi':1},'cui':{'eta':-1,'phi':1},'cuo':{'eta':-1,'phi':1},
 'pdi':{'eta':1,'phi':-1},'pdo':{'eta':1,'phi':-1},'pui':{'eta':-1,'phi':-1},'puo':{'eta':-1,'phi':-1}}
 t = 30
 main(param,t)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python字符串格式化%s%d%f详解
Feb 02 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
Python之时间和日期使用小结
Feb 14 Python
Python可迭代对象操作示例
May 07 Python
Python 占位符的使用方法详解
Jul 10 Python
详解Python 中sys.stdin.readline()的用法
Sep 12 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
Python读取csv文件实例解析
Dec 30 Python
给 TensorFlow 变量进行赋值的方式
Feb 10 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
python+numpy实现的基本矩阵操作示例
Jul 19 #Python
由面试题加深对Django的认识理解
Jul 19 #Python
基于Python函数和变量名解析
Jul 19 #Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 #Python
对Python生成器、装饰器、递归的使用详解
Jul 19 #Python
django中SMTP发送邮件配置详解
Jul 19 #Python
对Python函数设计规范详解
Jul 19 #Python
You might like
那些年一起学习的PHP(三)
2012/03/22 PHP
探讨多键值cookie(php中cookie存取数组)的详解
2013/06/06 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
js中日期的加减法
2015/05/06 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
js微信支付实现代码
2016/12/22 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
ajax jquery实现页面某一个div的刷新效果
2021/03/04 jQuery
Python通过解析网页实现看报程序的方法
2014/08/04 Python
提升Python程序运行效率的6个方法
2015/03/31 Python
详解Python中列表和元祖的使用方法
2015/04/25 Python
python flask框架实现重定向功能示例
2019/07/02 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
2019/08/22 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
Python extract及contains方法代码实例
2020/09/11 Python
html5 input属性使用示例
2013/06/28 HTML / CSS
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
MySQL面试题
2014/01/12 面试题
医院辞职信范文
2014/01/17 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
新任教师自我鉴定
2014/02/24 职场文书