#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_[宜配屋]听图阁相关推荐

  1. 差分隐私 python_[宜配屋]听图阁

    Laplace分布定义: 下面先给出Laplace分布实现代码: import matplotlib.pyplot as plt import numpy as np def laplace_func ...

  2. java将数组加上千分号_[宜配屋]听图阁

    对于较大数字,添加千分号可以方便快速地读出数值.千分号是指从最右边开始,每隔三位加个逗号.这种写法很广泛,来源大概是因为英文中 Thousand,千.million,百万.billion,十亿 都是隔 ...

  3. python对数组的基本操作_[宜配屋]听图阁

    这篇文章主要介绍了简单了解python数组的基本操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一,创建列表 创建一个列表,只要把逗号分隔的不同 ...

  4. 怎么用python打印照片_[宜配屋]听图阁

    这篇文章主要介绍了Python如何使用字符打印照片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. 前言 第一次在学校机房里见到计算机,还是上古 ...

  5. python 判断节假日_[宜配屋]听图阁

    不废话,直接上代码Python3.6 签到代码,只需修改url,账号,密码即可,此处是登录时无验证登录,有验证码的自行补充 # -*- coding:utf-8 -*- import json imp ...

  6. python telnet模块 more_[宜配屋]听图阁 - python 处理telnet返回的More,以及get想要的那个参数方法...

    问题: 需要循环获取网元返回的某个参数,并计算出平均值. 解决方案: 通过expect解决返回More的问题. 通过具体的参数位置,精确获取到参数. 讨论: 参数位置固定,不好复用. #! usr/b ...

  7. python开发一个彩票系统_[宜配屋]听图阁

    本文为大家分享了python实现彩票系统的具体代码,供大家参考,具体内容如下 功能:1.注册  2.登录  3.充钱   4.提现  5.下注  6.开奖  7.退出 简述:彩民需要用身份证号码开户注 ...

  8. python wxpython backend wxagg_[宜配屋]听图阁

    使用Matplotlib在wxPython的Panel上绘制曲线图,需要导入: import numpy from matplotlib.backends.backend_wxagg import F ...

  9. python上下文管理关键字_[宜配屋]听图阁

    前言 如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有 "with" 关键字的语句,它通常用在什么场景呢?今天就来说说 with 和 上下文管理器. 对于系统资源如文件 ...

最新文章

  1. python怎么安装包-安装python第三方包
  2. Windows server 1709(不含UI)模板部署
  3. python爬虫技术路线_爬虫学习——中国大学最好排名(技术路线:requests库和bs4)(来源于北理工Python网络爬虫与信息提取网络公开课)...
  4. 业务库负载翻了百倍,我做了什么来拯救MySQL架构
  5. 内联函数 error LNK2001: unresolved external symbol
  6. mysql执行ref_MySql执行分析
  7. 怎么让图片铺满手机屏幕_手机屏幕密码忘了怎么解锁
  8. 计算机装配调试员培训内容.doc,电子计算机装配调试员理论培训文档.doc
  9. CCF202104-3 DHCP服务器(100分)【模拟】
  10. ipqc的工作流程图_IPQC的工作流程及检验流程
  11. 四大名著地图上线,邀您一起来体验!
  12. ZEMAX实例学习1:单透镜(a singlet)
  13. 怎么给视频去水印?手把手教你去水印
  14. Colliding Mice碰撞老鼠工程分析
  15. VMware ESX Server 常用命令行
  16. eplan 电箱布局_Eplan D布局步骤
  17. 操作系统——存储器管理
  18. win10查看笔记本电脑电池健康度
  19. 【微服务】SpringBoot 搭建微服务初体验
  20. PMP考试一定要报培训班吗?

热门文章

  1. 官宣!又一“国字号”大学要来了?
  2. 还只是 39 岁!一个天才年轻程序员的陨落
  3. 3.83亿开房记录被泄露后,万豪又又又泄露用户数据了
  4. 在厕所遇到领导到底该说些什么?
  5. 2019男生身高受欢迎程度表
  6. 快手百度 4.34 亿美元投资知乎;腾讯回应“push团队全部被开”;Android Q Beta 6 发布!...
  7. leveldb源码分析:Open启动流程
  8. Tensorflow实现神经网络及实现多层神经网络进行时装分类
  9. XML,JOSN,YAML三种文件类型的区别
  10. 用OpenCV和深度学习进行年龄识别