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判断某个用户对某个文件的权限
Oct 13 Python
python清除字符串中间空格的实例讲解
May 11 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
Python3.5迭代器与生成器用法实例分析
Apr 30 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 Python
用Cython加速Python到“起飞”(推荐)
Aug 01 Python
Python yield的用法实例分析
Mar 06 Python
python实现四人制扑克牌游戏
Apr 22 Python
python 匿名函数与三元运算学习笔记
Oct 23 Python
浅析Python中的随机采样和概率分布
Dec 06 Python
Python加密与解密模块hashlib与hmac
Jun 05 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数据库代码
2009/03/10 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
thinkPHP5.0框架命名空间详解
2017/03/18 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
Javascript开发之三数组对象实例介绍
2012/11/12 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
Koa 中的错误处理解析
2019/04/09 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
vue2.x数组劫持原理的实现
2020/04/19 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
.net开发工程师面试题
2014/02/25 面试题
大二法英学生职业生涯规划范文
2014/02/27 职场文书
经理任命书模板
2014/06/06 职场文书
党旗在我心中演讲稿
2014/09/15 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
聘任书范文大全
2015/09/21 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书