利用实际数据对期权希腊字母绘图_20200525_
利用实际数据对期权希腊字母绘图
import pandas as pd
import re
import os
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import time
import math
from scipy.stats import norm
plt.rcParams['font.sans-serif']=['simhei']#用于正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用于正常显示负号class GreekAlphabetPlot():"""利用实际数据对希腊字母绘图作者:袁江磊"""def __init__(self,data_path):"""data_path为数据所在路径,数据从 http://www.sse.com.cn/assortment/options/risk/ 下载,手动转为.xlsx格式"""self.make_files()self.data=pd.read_excel(data_path)self.data_process()self.plt_save=False#是否将图片保存self.plot_show = True#是否将图片显示出来self.X_col='执行月份'#'执行月份':将绘制希腊值和执行月份的关系;'执行价格':将绘制希腊值和执行价格的关系def make_files(self):"""在当前工作文件夹下生成文件夹用于存放各种生成资料"""path=os.getcwd()#生成用于存放图片的文件夹self.plt_save = False # 决定是否保存图片self.plt_save_order = 0 # 记录保存图片的顺序self.path_picture=os.path.join(path,'生成图片')if os.path.exists(self.path_picture) == False:os.makedirs(self.path_picture)def data_process(self):"""将下载下来的数据做简单处理,以备绘图使用"""data=self.datadata['日期'] = data['日期'].str[:-1]data_names = data['合约简称']# 将期权合约名称切割为标的资产,期权类型,执行日期,执行价格几部分,用于后期分类作图data_info = []for name in data_names:info = re.findall('(\d{2,3}ETF)(.)(\d{1,2})月(\d{4})(\w{0,1})', name)[0]info = list(info)data_info.append(info)data_info = np.array(data_info)data['标的资产'] = data_info[:, 0]data['期权类型'] = data_info[:, 1]data['执行月份'] = data_info[:, 2]data['执行价格'] = data_info[:, 3]data['执行价格'] = data['执行价格'].astype('int') / 1000data['修正次数'] = data_info[:, 4]# 计算修正次数for i in range(len(data['修正次数'])):if data['修正次数'][i] == 'A':data['修正次数'][i] = '二次'else:data['修正次数'][i] = '初次'self.data=data.ix[data['修正次数']=='初次']def lookup_plot_vari(self):"""查看plot()方法中各个自变量可以输入的值"""data=self.data[['标的资产', '期权类型', '执行月份', '执行价格']]return datadef plot(self,stock_name,option_type,X,date,Y_cols):"""绘制希腊值与指定变量的关系stock_name = '50ETF' # 股指名称option_type = '购' # 期权类型X = 2.65 # 执行价格date = 5 # 执行月份Y_cols = ['Delta', 'Theta', 'Gamma', 'Vega', 'Rho'] # 所选因变量名称"""data=self.dataif self.plot_show == False:matplotlib.use('Agg')# 是否显示所生成的图片if self.X_col=='执行价格':option_title = stock_name + option_type + str(date) + '月' # 股指期权名称data_ = data.ix[(data['标的资产'] == stock_name) & (data['期权类型'] == option_type) & (data['执行月份'] == str(date))]elif self.X_col=='执行月份':option_title = stock_name + option_type + str(int(X * 1000)) # 股指期权名称data_ = data.ix[(data['标的资产'] == stock_name) & (data['期权类型'] == option_type) & (data['执行价格'] == X)]X_label = self.X_col # 横轴标签Y_label = '' # 纵轴标签X = data_[X_label] # 自变量取值plt.figure(figsize=(12, 8))for Y_col in Y_cols:Y = data_[Y_col]plt.plot(X, Y, label=Y_col)Y_label += '.' + Y_colplt.legend(loc='upper right')plt.grid(True, alpha=0.3)plt.title(option_title + Y_label + '与' + X_label + '的关系', fontsize=18)plt.xlabel(X_label, fontsize=18)plt.ylabel(Y_label, fontsize=18)if self.plt_save==True:fig=option_title + Y_label + '与' + X_label + '的关系.jpg'fig_path =os.path.join(self.path_picture,fig)plt.savefig(fig_path)def plot_all(self,X_col):"""绘制出所有期权希腊字母图X_col = '执行价格':绘制所有期权希腊值与执行价格的关系X_col = '执行月份':绘制所有期权希腊值与执行月份的关系"""greak_plot.plt_save = True # True可以将生成图片保存self.plot_show = Falsedata = greak_plot.lookup_plot_vari() # 所有可以输入plot()方法的可取值# 绘制所有期权希腊值与执行价格的关系self.X_col=X_colif X_col == '执行价格':total = 0 # 计算生成了多少图片for stock_name in ['50ETF', '300ETF']:for option_type in ['购', '沽']:data_1 = data.ix[(data['标的资产'] == stock_name) & (data['期权类型'] == option_type)]for date in data_1['执行月份']:greak_plot.plot(stock_name=stock_name, option_type=option_type, X='none', date=date,Y_cols=['Delta', 'Theta', 'Gamma', 'Vega', 'Rho'])total += 1print(total)# 绘制所有期权希腊值与执行月份的关系elif X_col == '执行月份':total = 0 # 计算生成了多少图片for stock_name in ['50ETF', '300ETF']:for option_type in ['购', '沽']:data_1 = data.ix[(data['标的资产'] == stock_name) & (data['期权类型'] == option_type)]for X in data_1['执行价格']:greak_plot.plot(stock_name=stock_name, option_type=option_type, X=X, date='none',Y_cols=['Delta', 'Theta', 'Gamma', 'Vega', 'Rho'])total += 1print(total)if __name__=='__main__':#data_path为数据所在路径,数据从 http://www.sse.com.cn/assortment/options/risk/ 下载,手动改为.xlsx格式greak_plot=GreekAlphabetPlot(data_path='E:\课件\研一下\金融衍生品定价\风险对冲\风险指标.xlsx')greak_plot.plt_save=True#True可以将生成图片保存data=greak_plot.lookup_plot_vari()#所有可以输入plot()方法的可取值# 绘制 50ETF购2650 的希腊值['Delta', 'Theta', 'Gamma', 'Vega', 'Rho']与执行月份的关系greak_plot.X_col = '执行月份' # '执行月份':将绘制希腊值和执行月份的关系;'执行价格':将绘制希腊值和执行价格的关系greak_plot.plot(stock_name = '50ETF',option_type = '购',X = 2.55,date ='none',Y_cols = ['Delta', 'Theta', 'Gamma', 'Vega', 'Rho'])greak_plot.plot(stock_name='300ETF', option_type='沽', X=3.3, date='none',Y_cols=['Gamma', 'Vega', 'Rho'])# 绘制 50ETF购2650 的希腊值['Delta', 'Theta', 'Gamma', 'Vega', 'Rho']与执行价格的关系greak_plot.X_col = '执行价格' # '执行月份':将绘制希腊值和执行月份的关系;'执行价格':将绘制希腊值和执行价格的关系greak_plot.plot(stock_name='50ETF', option_type='购', X='none', date=6,Y_cols=['Delta', 'Theta', 'Gamma', 'Vega', 'Rho'])greak_plot.plot(stock_name='300ETF', option_type='沽', X='none', date=5, Y_cols=['Gamma', 'Vega', 'Rho'])#绘制出所有期权希腊字母图,执行下面函数后将在‘生成图片文件夹下逐渐生成图片’greak_plot.plot_all(X_col='执行价格')#绘制所有期权希腊值与执行价格的关系并保存greak_plot.plot_all(X_col='执行月份')#绘制所有期权希腊值与执行月份的关系并保存
利用实际数据对期权希腊字母绘图_20200525_相关推荐
- Python数据分析学习系列 九 绘图和可视化
Python数据分析学习系列 九 绘图和可视化 资料转自(GitHub地址):https://github.com/wesm/pydata-book 有需要的朋友可以自行去github下载 信息可视化 ...
- 分形、大自然的分形几何、数据可视化、Python绘图
分形.大自然的分形几何.数据可视化.Python绘图 中国传统中的『分形』 大自然的分形几何 数据可视化 本系列采用turtle.matplotlib.numpy这三个Python工具,以分形与计算机 ...
- 利用训练数据建立一个简单的分类器
利用训练数据建立一个简单的分类器 在机器学习领域中,分类指的是利用数据的特性将其分成若干类型的过程.分类器则可以是实现分类功能的任意算法,最简单的分类器就是简单的数字函数.在真实世界中,分类器可以是非 ...
- PSINS工具箱学习(一)下载安装初始化、SINS-GPS组合导航仿真、习惯约定与常用变量符号、数据导入转换、绘图显示
文章目录 一.前言 二.相关资源 三.下载安装初始化 1.下载PSINSyymmdd.rar工具箱文件 2.解压文件 3.初始化 4.启动工具箱导览 四.习惯约定与常用变量符号 1.PSINS全局变量 ...
- python绘图库_利用python中的绘图库绘图的方法介绍
matplotlib是Python最著名的绘图库,本文给大家分享了利用matplotlib+numpy绘制多种绘图的方法实例,其中包括填充图.散点图(scatter plots).. 条形图(bar ...
- 利用卫星数据绘制热脆弱性图—利用遥感监测城市热量
地球上的很多地方都有逐渐变热的趋势,特别是我们居住的城市,城市吸收并重新释放大量的热量,该热量来自于用来建造城市的混凝土材料.在某些情况下,这可能只是会引起一些不适感,但对于某些城市来说,可能会导致严 ...
- 如何利用大数据指导市场营销
本文来自网易云社区. 在数字时代,人们的生活方式和思考方式已经发生了变化,同样人们的消费观念也发生了变化.它赋予消费者更广阔的视野,同时也提高了消费者的自主意识.互联网使得很多信息都公开化,消费者不仅 ...
- 滴滴快的精打细算:利用大数据构建产业生态圈
ZDNet至顶网软件频道消息: 随着2014年初那场旷日持久补贴大战的落幕,"土豪"一词也随之成为人们对滴滴快的的印象标签.殊不知,在疯狂补贴的同时,滴滴快的也有一颗精打细算的&q ...
- 利用RGB-D数据进行人体检测 带dataset
利用RGB-D数据进行人体检测 LucianoSpinello, Kai O. Arras 摘要 人体检测是机器人和智能系统中的重要问题.之前的研究工作使用摄像机和2D或3D测距器.本文中我们提出一种 ...
最新文章
- 中文详解phpmailer所有对象和属性
- SQLite学习手册(索引和数据分析/清理)
- 5分钟了解CDN 加速原理 | +新书推荐
- pae扩展内存 linux,浅析linux内核内存管理之PAE
- 【Redis】redis 持久化 RDB 和 AOF
- Excel用控件动态控制图表
- php短信接口开发(http协议)
- ISO文件与镜像文件
- 从零开始的VUE项目-09(vue-alipayer-v视频播放)
- vivo手机光环助手下载游戏怎么打不开_“点亮夜色,点亮你”——全新5G自拍手机,vivo S6系列正式发布...
- java上传视频转格式,Java实现视频格式转化
- 怎么退出自适应巡航_什么是ACC自适应巡航
- android开机动画切换
- 让我们用 Node.js 写自己的 DDNS 动态域名程序
- 项目一(基础)家庭记录收支记账软件
- hive建表与mysql建表的区别
- jkd10Eclipse中查看源码—source not found
- 《我是一只IT小小鸟》书评──将要成为IT小小鸟
- C# 将OFD转为PDF
- 青海湖 游走遇见一路风景