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实现定时播放mp3
Mar 29 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
Jun 24 Python
python遍历目录的方法小结
Apr 28 Python
Python实现PS滤镜功能之波浪特效示例
Jan 26 Python
Python3编码问题 Unicode utf-8 bytes互转方法
Oct 26 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
python爬虫 urllib模块反爬虫机制UA详解
Aug 20 Python
Python参数传递及收集机制原理解析
Jun 05 Python
如何基于pandas读取csv后合并两个股票
Sep 25 Python
Python实现钉钉/企业微信自动打卡的示例代码
Feb 02 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 Python
Python 统计序列中元素的出现频度
Apr 26 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&MYSQL服务器配置说明
2006/10/09 PHP
php下使用以下代码连接并测试
2008/04/09 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
Python格式化压缩后的JS文件的方法
2015/03/05 Python
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
python模块如何查看
2020/06/16 Python
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
解释一下抽象方法和抽象类
2016/08/27 面试题
中专生的个人自我评价
2013/12/11 职场文书
毕业生自荐书
2013/12/18 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
风之谷观后感
2015/06/11 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书