python障碍式期权定价公式
作者:王大锤95 时间:2023-12-08 03:54:53
早期写的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)
来源:https://blog.csdn.net/qq_41239584/article/details/83269874
标签:python,期权,公式
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
MySQL延时复制库方法详解
2024-01-26 14:21:51
使用OpenCV校准鱼眼镜头的方法
2022-04-02 01:58:48
![](https://img.aspxhome.com/file/2023/4/82704_0s.png)
Mootools 1.2教程(14)——定时器和哈希简介
2008-12-08 12:50:00
pymongo实现控制mongodb中数字字段做加法的方法
2021-12-15 21:04:06
python 基于空间相似度的K-means轨迹聚类的实现
2022-10-24 07:29:02
![](https://img.aspxhome.com/file/2023/4/90294_0s.png)
python 中的 super详解
2023-09-07 01:27:35
![](https://img.aspxhome.com/file/2023/3/131563_0s.png)
Pandas实现一列数据分隔为两列
2021-01-06 04:31:36
利用Python开发一个自动答题程序
2022-12-31 10:33:16
Vue.js实现文章评论和回复评论功能
2024-05-29 22:20:31
![](https://img.aspxhome.com/file/2023/9/123179_0s.jpg)
go语言区块链实战实现简单的区块与区块链
2024-05-10 13:57:33
![](https://img.aspxhome.com/file/2023/4/127484_0s.png)
Golang依赖注入工具digo的使用详解
2023-08-27 13:00:43
SQL Server数据库动态交叉表的参考示例
2009-01-04 14:44:00
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2023-07-27 11:51:43
php绘制圆形的方法
2023-10-29 17:31:52
Python中的两个内置模块介绍
2023-03-29 08:10:00
多次执行mysql_fetch_array()的指针归位问题探讨
2024-01-16 00:16:16
pytorch中的embedding词向量的使用方法
2022-03-25 09:05:27
Python OpenCV超详细讲解调整大小与图像操作的实现
2022-07-09 21:16:27
![](https://img.aspxhome.com/file/2023/2/105582_0s.png)
解密SQL Server数据库系统的编译
2009-03-16 17:33:00
js+html5实现半透明遮罩层弹框效果
2024-05-08 09:33:09
![](https://img.aspxhome.com/file/2023/5/130275_0s.jpg)