当前位置: 首页 > 后端技术 > Python

Tuoduantecdat-Python时间序列选择波动率预测指数收益算法分析案例

时间:2023-03-25 20:33:06 Python

原文http://tecdat.cn/?p=4092背景在传统金融理论中,理性和同质的投资者是核心假设之一,表明每个投资者都有相同的信息,从而做出相同的决定。然而,投资者显然是不平衡的,信息不对称在股市中很普遍。当知情投资者优先考虑某类资产时,该类资产可能包含更多隐含信息。期权市场是知情投资者可能更积极参与的市场之一,正如布莱克在1975年提出的那样,投资者更愿意交易具有更高杠杆率的股票衍生品而不是股票本身以获得更多收益,因此期权市场可以包含更多信息。提取这些额外信息的一种方法是仔细观察波动性假笑。波动性是我们都熟悉的东西,潘(2002)的一个主流理论指出,之所以产生这种傻笑,主要原因是投资者厌恶跳跃风险带来的风险溢价,尤其是在OTM看跌期权的情况下。本文假设知情交易者认识到跳跃风险,并且对OTM看跌期权的需求越高,跳跃风险溢价就越高。因此,我们定义波动率偏差=OTM看跌期权隐含波动率-ATM看涨期权隐含波动率,我们在此验证指数期权波动率偏差是未来指数收益的良好指标。美国市场对于美国市场的实证研究,本文采用SPX期权,即现金结算的欧式期权。2006-2012年的期权数据取自学术数据库OptionMetrics。下面列出了其中一些。我们可能会注意到某些隐含波动率数据缺失。这可以用看涨期权价格的下限来解释。当标的资产的波动率为零时,期权价格达到其下限。当实际价格低于下限时会出现负隐含波动率,因此我们将其视为未命中。在确定要考虑哪些ATM看涨期权合约时,我们选择执行价格/标的价格比率最接近1的期权合约。要选择OTM看跌期权合约,我们首先过滤掉0.9<执行价格/标的价格的合约<0.95,则取行使价/标的比率最接近0.92的那个。另外,我的多个合约可能符合条件,我们只选择到期日为30-60天的合约。到期日太短的期权往往会经历更剧烈的价格波动,而到期日太长的期权数量较少,不能反映知情交易。本文使用从周三到下周二的平均每周隐含波动率进行检验。这个过程是用Python完成的,就像下面的代码一样。将熊猫导入为pdimportnumpy作为np#readH5S数据#pd.read_excel('SPXOption.xlsx').to_hdf('SPXOption.h5s','data')ImpliedV=ImpliedV1.append(ImpliedV2)delImpliedV1,ImpliedV2ImpliedV['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')#SelectgivendateAll_Options=ImpliedV[ImpliedV['Date']==All_Date[ii]]All_Options.loc[:,'Maturity']=(All_Options['Expiration']-Today).dt.days#Selectmaturity#Selecttype&strikepriceOptions_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.indexSP500=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')考虑到普遍认为索引有一个动量效应,我们在STATA中运行如下回归:Index\_Return[t+3]=β\_0+β\_1*Volatility\_skew[t]+β\_2*Last6M\_Index\_Return[t]+e显然,索引返回数据集具有异方差性和自相关性。运行Newey-West回归数据以针对异方差性和自相关性进行调整。从变量Volatility\_skew的参数为负的结果来看,这成功地证明了我们对中国市场的假设。对于中国市场,我们使用SH50ETF期权,这是唯一的交易所交易期权合约。由于中国市场的动量效应不同于美国市场,我们采用试错法——我们尝试将最近5、10和15个月的指数回报数据作为自变量之一。结果如下:然而,在中国市场,期权价格不包括来自知情交易者的信息。就我个人而言,我认为这很大,因为2015年8月股市崩盘后限制未平仓合约的严格监管。SH50ETF2015年2月刚刚上市,周频情况下没有足够的数据可供研究。交易策略我们使用从SPX期权波动率微笑中提取的信息制定了交易策略。周二收市时,我们计算每周平均波动率偏差,以及过去6个月的指数回报。当β\_0+β\_1*Volatility\_skew[t]+β\_2*Last6M\_Index\_Return[t]>0我们看跌第3周的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)foriiinrange(0,270):Direction[ii]=-.0048342*TestData。iloc[ii,0]+.1152003*TestData.iloc[ii,2]+.0016688Total[ii+1]=Total[ii]*(1-TestData.iloc[ii,1])如果我们使用这个策略交易,这是一张净值图表很明显,这个策略是成功的,而且在2008年股市崩盘期间也很成功。有什么问题吗?联系我们!