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 相关文章推荐
django1.8使用表单上传文件的实现方法
Nov 04 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
python实现汽车管理系统
Nov 30 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
用于ETL的Python数据转换工具详解
Jul 21 Python
浅析Python中字符串的intern机制
Oct 03 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 Python
flask框架中的cookie和session使用
Jan 31 Python
pytest配置文件pytest.ini的详细使用
Apr 17 Python
Python实现机器学习算法的分类
Jun 03 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中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
Python用threading实现多线程详解
2017/02/03 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
使用css3 属性如何丰富图片样式(圆角 阴影 渐变)
2012/11/22 HTML / CSS
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
Java程序员面试题
2016/09/27 面试题
计算机操作自荐信
2013/12/07 职场文书
教师实习自我鉴定
2013/12/14 职场文书
公司贷款承诺书
2014/05/30 职场文书
专科生就业求职信
2014/06/22 职场文书
怎样写离婚协议书
2014/09/10 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
如何用python清洗文件中的数据
2021/06/18 Python
golang 实用库gotable的具体使用
2021/07/01 Golang