利用实际数据对期权希腊字母绘图

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_相关推荐

  1. Python数据分析学习系列 九 绘图和可视化

    Python数据分析学习系列 九 绘图和可视化 资料转自(GitHub地址):https://github.com/wesm/pydata-book 有需要的朋友可以自行去github下载 信息可视化 ...

  2. 分形、大自然的分形几何、数据可视化、Python绘图

    分形.大自然的分形几何.数据可视化.Python绘图 中国传统中的『分形』 大自然的分形几何 数据可视化 本系列采用turtle.matplotlib.numpy这三个Python工具,以分形与计算机 ...

  3. 利用训练数据建立一个简单的分类器

    利用训练数据建立一个简单的分类器 在机器学习领域中,分类指的是利用数据的特性将其分成若干类型的过程.分类器则可以是实现分类功能的任意算法,最简单的分类器就是简单的数字函数.在真实世界中,分类器可以是非 ...

  4. PSINS工具箱学习(一)下载安装初始化、SINS-GPS组合导航仿真、习惯约定与常用变量符号、数据导入转换、绘图显示

    文章目录 一.前言 二.相关资源 三.下载安装初始化 1.下载PSINSyymmdd.rar工具箱文件 2.解压文件 3.初始化 4.启动工具箱导览 四.习惯约定与常用变量符号 1.PSINS全局变量 ...

  5. python绘图库_利用python中的绘图库绘图的方法介绍

    matplotlib是Python最著名的绘图库,本文给大家分享了利用matplotlib+numpy绘制多种绘图的方法实例,其中包括填充图.散点图(scatter plots).. 条形图(bar ...

  6. 利用卫星数据绘制热脆弱性图—利用遥感监测城市热量

    地球上的很多地方都有逐渐变热的趋势,特别是我们居住的城市,城市吸收并重新释放大量的热量,该热量来自于用来建造城市的混凝土材料.在某些情况下,这可能只是会引起一些不适感,但对于某些城市来说,可能会导致严 ...

  7. 如何利用大数据指导市场营销

    本文来自网易云社区. 在数字时代,人们的生活方式和思考方式已经发生了变化,同样人们的消费观念也发生了变化.它赋予消费者更广阔的视野,同时也提高了消费者的自主意识.互联网使得很多信息都公开化,消费者不仅 ...

  8. 滴滴快的精打细算:利用大数据构建产业生态圈

    ZDNet至顶网软件频道消息: 随着2014年初那场旷日持久补贴大战的落幕,"土豪"一词也随之成为人们对滴滴快的的印象标签.殊不知,在疯狂补贴的同时,滴滴快的也有一颗精打细算的&q ...

  9. 利用RGB-D数据进行人体检测 带dataset

    利用RGB-D数据进行人体检测 LucianoSpinello, Kai O. Arras 摘要 人体检测是机器人和智能系统中的重要问题.之前的研究工作使用摄像机和2D或3D测距器.本文中我们提出一种 ...

最新文章

  1. 中文详解phpmailer所有对象和属性
  2. SQLite学习手册(索引和数据分析/清理)
  3. 5分钟了解CDN 加速原理 | +新书推荐
  4. pae扩展内存 linux,浅析linux内核内存管理之PAE
  5. 【Redis】redis 持久化 RDB 和 AOF
  6. Excel用控件动态控制图表
  7. php短信接口开发(http协议)
  8. ISO文件与镜像文件
  9. 从零开始的VUE项目-09(vue-alipayer-v视频播放)
  10. vivo手机光环助手下载游戏怎么打不开_“点亮夜色,点亮你”——全新5G自拍手机,vivo S6系列正式发布...
  11. java上传视频转格式,Java实现视频格式转化
  12. 怎么退出自适应巡航_什么是ACC自适应巡航
  13. android开机动画切换
  14. 让我们用 Node.js 写自己的 DDNS 动态域名程序
  15. 项目一(基础)家庭记录收支记账软件
  16. hive建表与mysql建表的区别
  17. jkd10Eclipse中查看源码—source not found
  18. 《我是一只IT小小鸟》书评──将要成为IT小小鸟
  19. C# 将OFD转为PDF
  20. 青海湖 游走遇见一路风景

热门文章

  1. 通俗案例剖析市场营销
  2. 【Unity3d】 教会你如何做一个简单的电梯系统(升降平台)
  3. 学校计算机机房解说词,学校各功能馆室解说词
  4. 领英达到每周好友邀请上限怎么办?领英加好友时要注意哪些细节?置顶推荐
  5. 百度竞价 - 百度单页竞价推广项目实操教程分享
  6. 再来一篇,看jdk源码大师亲自操刀编写的集合源码
  7. 网易博客日志:COSTAS环低通滤波器设计及环路增益设计
  8. 新浪微博客户端(12)-判断当前软件是否是新版本(是否显示新特性)
  9. informatica 常见问题收录及解决(陆续补录)
  10. CloudManage介绍