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 相关文章推荐
Django中使用locals()函数的技巧
Jul 16 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
python学习基础之循环import及import过程
Apr 22 Python
python批量获取html内body内容的实例
Jan 02 Python
浅谈python编译pyc工程--导包问题解决
Mar 20 Python
给大家整理了19个pythonic的编程习惯(小结)
Sep 25 Python
python常用运维脚本实例小结
Feb 14 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
Apr 20 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
scrapy redis配置文件setting参数详解
Nov 18 Python
Python Parser的用法
May 12 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中的正规表达式(二)
2006/10/09 PHP
php+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
PHP学习之整理字符串
2011/04/17 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
延时加载JavaScript代码提高速度
2015/12/27 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
详解vue跨组件通信的几种方法
2017/06/15 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
python实现简单温度转换的方法
2015/03/13 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
使用tensorflow实现线性svm
2018/09/07 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
python实现学生管理系统开发
2020/07/24 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
怎样写好自荐信和推荐信
2013/12/26 职场文书
班级课外活动总结
2014/07/09 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
社保缴纳证明申请书
2014/11/03 职场文书