import lib.opt as opt # opt library来自于社区关于期权的分享import pandas as pdfrom CAL.PyCAL import *import matplotlib.pyplot as pltimport scipy.stats as s1. 看跌看涨隐含波动率的不同
期权的隐含波动率,是通过将期权价格带入定价模型反推出来的标的波动率。具体到50ETF期权,以2016-08-26这天为例,得到下图的隐含波动率:
四张图对应当月、次月、当季、下季共四个行权日的期权合约每张图中,横轴为期权行权价,纵轴为隐含波动率看跌期权、看涨期权分别用绿线和蓝线标出红色虚线为当日的50ETF价格opt.histDayPlotSmileVolatilityOpt50ETF('2016-08-26')2. 看跌看涨隐含波动率的差值和IH贴水的关系
在计算期权隐含波动率的过程中,需要用到标的50ETF基金的价格,该基金对标上证50指数;此处看似没问题,但我们知道股灾以来,对应于上证50指数的IH期货长期处于贴水状态;下面简单探讨一下上一节看到的看跌看涨期权隐含波动率差值和IH贴水幅度的关系;看跌看涨隐含波动率差值,和社区分享帖子一样,定义为ATM期权的隐含波动率差值。下表中:
nearPCIVD,近月看跌看涨期权隐含波动率差值nextPCIVD,次月看跌看涨期权隐含波动率差值closeSH50,上证50指数收盘价settleIH, IH结算价closeIH, IH收盘价discount, IH对现货贴水幅度# 看跌看涨期权隐含波动率差值,按照社区分享帖子计算得到,此处直接加载数据pcivd = pd.read_csv(u'50ETF_Option_Data/pcivd_截至2016-09-07.csv')pcivd['tradeDate'] = pcivd['date'] pcivd = pcivd[['tradeDate','nearCallIV','nearPutIV','nearPCIVD','nextCallIV','nextPutIV','nextPCIVD']]# IH连续合约价格ih_data = DataAPI.MktMFutdGet(mainCon=u"1",contractObject=u"IH",startDate=u"20150209",endDate=u"20160907")ih_data = ih_data[['tradeDate','settlePrice','closePrice']]ih_data.columns = ['tradeDate','settleIH','closeIH']# 上证50指数sh50_data = DataAPI.MktIdxdGet(ticker='000016',beginDate='20150209',endDate='20160907')sh50_data = sh50_data[['tradeDate','closeIndex']]sh50_data.columns = ['tradeDate','closeSH50']# 数据合并pcivd = pcivd.merge(sh50_data, on='tradeDate')pcivd = pcivd.merge(ih_data, on='tradeDate')pcivd['discount'] = (pcivd['settleIH'] - pcivd['closeSH50'])/pcivd['closeSH50']pcivd['tradeDate'] = map(Date.toDateTime, map(DateTime.parseISO, pcivd['tradeDate']))pcivd = pcivd.set_index('tradeDate')pcivd.columns = [u'nearCallIV', u'nearPutIV', u'nearPCIVD', u'nextCallIV', u'nextPutIV', u'nextPCIVD', u'closeSH50', u'settleIH', u'closeIH', u'discount']pcivd.tail()
nearCallIV
nearPutIV
nearPCIVD
nextCallIV
nextPutIV
nextPCIVD
closeSH50
settleIH
closeIH
discount
tradeDate
2016-09-01
0.16265
0.17150
0.00885
0.15720
0.18310
0.02590
2220.403
2200.0
2193.0
-0.009189
2016-09-02
0.14690
0.18145
0.03455
0.14695
0.18995
0.04300
2229.893
2198.8
2201.0
-0.013944
2016-09-05
0.16170
0.16975
0.00805
0.15785
0.18210
0.02425
2228.718
2207.6
2204.4
-0.009475
2016-09-06
0.16540
0.16015
-0.00525
0.15860
0.18240
0.02380
2232.451
2213.8
2209.8
-0.008354
2016-09-07
0.15985
0.16595
0.00610
0.15760
0.18400
0.02640
2236.546
2215.6
2214.8
-0.009365
计算IH贴水幅度和看跌看涨期权隐含波动率差值的相关系数
corr_p = st.pearsonr(pcivd['nearPCIVD'], pcivd['discount'])print 'Pearson correlation: ', corr_p[0]print 'p-value: ', corr_p[1]fig = plt.figure(figsize=(12, 6))ax1 = fig.add_subplot(111)ax2 = ax1.twinx()ax1.plot(pcivd.index, pcivd['nearPCIVD'],'-',label='PCIVD(left)')ax2.plot(pcivd.index, pcivd['discount'], '-', color='r',label='IH-SH50 discount(right)')ax1.legend(loc=2, fontsize=13)ax2.legend(loc=0, fontsize=13)ax2.grid()总结:我们看到看跌看涨期权隐含波动率之差和IH贴水幅度的相关系数高达-0.7,p值接近于0,说明两者之间具有很强的负相关性;两者具有负相关性逻辑上是很简单的,IH贴水,表示期权的现货标的50ETF远期合理价格应该更低一点,导致看跌期权贵一点、看涨期权便宜一点;另外,看跌期权隐波大一点,还有一个因素,就是现货持有者买入看跌期权对冲推高了看跌期权价格。