Python時間序列選擇波動率預測指數(shù)收益算法分析案例
原文?http://tecdat.cn/?p=4092
背景
在傳統(tǒng)的金融理論中,理性和同質(zhì)的投資者是核心假設(shè)之一,表明每個投資者都有相同的信息,從而做出同樣的決定。然而,投資者顯然是不均衡的,信息的不對稱在股市中很普遍。當知情投資者優(yōu)先考慮某種類型的資產(chǎn)時,該類資產(chǎn)可能包含更多隱含信息。
期權(quán)市場是知情投資者可能更積極參與的市場之一,正如布萊克在1975年提出的那樣,讓投資者傾向于以較高的杠桿率而非股票本身交易股票衍生品以獲得更多利益,因此期權(quán)市場可以包含更多信息。提取這些額外信息的一種方法是仔細研究波動性假笑。
波動性 是我們都熟悉的,Pan(2002)的一個主流理論指出,假笑的主要原因是投資者厭惡跳躍風險引起的風險溢價,尤其是OTM看跌期權(quán)的情況。該文假設(shè)知情的交易者認識到跳躍風險,對OTM看跌期權(quán)的需求越多,跳躍風險溢價就越高。因此,我們定義
波動率偏差= OTM認沽期權(quán)隱含波動率 - ?ATM看漲期權(quán)隱含波動率,
我們在這里驗證指數(shù)期權(quán)波動率偏差是未來指數(shù)收益的一個很好的指標。
美國市場
對于美國市場的實證研究,本文使用SPX期權(quán),這是一種現(xiàn)金結(jié)算的歐式期權(quán)。從學術(shù)數(shù)據(jù)庫OptionMetrics中檢索2006-2012的選項數(shù)據(jù)。其中一些列在下面。

我們可能會注意到一些隱含波動率數(shù)據(jù)被遺漏。這可以通過看漲期權(quán)價格的下限來解釋。當標的資產(chǎn)具有0波動率時,期權(quán)價格達到其下限。當實際價格低于下限時,會出現(xiàn)負的隱含波動率,因此我們將其視為錯過。

在確定要考慮哪個ATM認購期權(quán)合約時,我們選擇期權(quán)合約,其中執(zhí)行價格/底層價格的比率最接近1.要選擇OTM認沽期權(quán)合約,我們首先篩選出合約0.9 <執(zhí)行價格/底層證券價格<0.95,然后取其執(zhí)行價格/基礎(chǔ)比率最接近0.92的那個。此外,我的多個合同可能滿足條件,我們只選擇成熟期為30-60天的合同。期限過短的期權(quán)往往會出現(xiàn)更加波動的價格波動,期限過長的期權(quán)數(shù)量很少,無法反映知情交易。本文使用每周平均隱含波動率來檢查,從周三到下周二。這個過程在Python中完成,如下面的代碼所做的那樣。
import pandas as pd
import numpy as np
#read H5S data
#pd.read_excel('SPXOption.xlsx').to_hdf('SPXOption.h5s','data')
ImpliedV=ImpliedV1.append(ImpliedV2)
del ImpliedV1,ImpliedV2
ImpliedV['Expiration']=todatetime(ImpliedV['Expiration'])
#ImpliedV=pd.read_excel("D:\USData\SPXOption.xlsx")
All_Date=pd.Series(ImpliedV.groupby('Date').groups)
SP500=pd.read_excel('D:\USData\SP500.xlsx').iloc[:,0]
Call_Data=pd.Series(0.0,index=todatetime(All_Date),name='Call_Data')
#Select given date
All_Options=ImpliedV[ImpliedV['Date']==All_Date[ii]]
All_Options.loc[:,'Maturity']=(All_Options['Expiration']-Today).dt.days
???#Select maturity
???#Select type & strike price
???Options_Selected_C=Date_Selected_Options[Date_Selected_Options['Type']=="C"]
???Options_Selected_C.sort_values(['StrikePrice'],inplace=True)
???Options_Selected_P=Date_Selected_Options[Date_Selected_Options['Type']=="P"]
???Options_Selected_P.loc[:,'StrikePrice']=abs(Options_Selected_P['StrikePrice']/SP500.iloc[ii]-0.92)
???Put_Data[ii]=Options_Selected_P.iloc[0,4]
SP500.index=Put_Data.index
SP500=SP500.resample('W-TUE').first()
SP500=(SP500-SP500.shift(1))/SP500.shift(1)
Final_Data['Skew']=Final_Data['Put_Data']-Final_Data['Call_Data']
Final_Data.to_csv('Final_US.csv')
?
?
考慮到人們普遍承認該指數(shù)具有動量效應,我們在STATA中運行以下回歸:
Index_Return [t + 3] =β_0+β_1* Volatility_skew [t] +β_2* Last6M_Index_Return [t] + e
顯然,索引返回數(shù)據(jù)集具有異方差性和自相關(guān)特性。運行Newey-West回歸數(shù)據(jù)來調(diào)整異方差性和自相關(guān)性。

從變量Volatility_skew的參數(shù)為負的結(jié)果,這成功地證明了我們的假設(shè)
中國市場
對于中國市場,我們使用SH50ETF期權(quán),這是唯一的交易所交易期權(quán)合約。由于中國市場的動量效應與美國市場不同,我們采用嘗試和誤差方法 - 我們嘗試將過去5,10和15個月的指數(shù)返回數(shù)據(jù)作為自變量之一。結(jié)果如下:


但是,在中國市場,期權(quán)價格并未包含知情交易者的信息。我個人認為,由于嚴厲的監(jiān)管以限制2015年8月股市崩盤后的未平倉合約,這一點很大。SH50ETF剛剛于2015年2月上市,在每周頻率的情況下沒有足夠的數(shù)據(jù)供研究。
交易策略
我們使用從SPX期權(quán)波動率假笑中提取的信息制定了交易策略。當市場周二收盤時,我們計算每周平均波動率偏差,以及過去6個月的指數(shù)收益率。什么時候
β_0+β_1* Volatility_skew [t] +β_2* Last6M_Index_Return [t]> 0
我們在第三周看跌S&P500期貨。從回歸我們知道β_0=0.0016688β_1=-0.0048342β_2= 0.1152003。該策略是用Python編寫的:
?
# -*- coding: utf-8 -*-
Final_Data=pd.read_csv(r'D:\USData\Final_US.csv',index_col=0)
TestData=deepcopy(Final_Data)
Direction=pd.Series(0.0,index=range(0,len(TestData.index)))
TestData.dropna(axis=0,inplace=True)
for ii in range(0,270):
???Direction[ii]=-.0048342*TestData.iloc[ii,0]+.1152003*TestData.iloc[ii,2]+.0016688
???????Total[ii+1]=Total[ii]*(1-TestData.iloc[ii,1])
?
?
如果我們使用此策略進行交易,這是一個凈值圖表

很明顯,這一戰(zhàn)略是一個成功的戰(zhàn)略,并且在2008年的股市崩盤中也取得了成功。
?