专栏首页拓端tecdatPython时间序列选择波动率预测指数收益算法分析案例

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

背景

在传统的金融理论中,理性和同质的投资者是核心假设之一,表明每个投资者都有相同的信息,从而做出同样的决定。然而,投资者显然是不均衡的,信息的不对称在股市中很普遍。当知情投资者优先考虑某种类型的资产时,该类资产可能包含更多隐含信息。

期权市场是知情投资者可能更积极参与的市场之一,正如布莱克在1975年提出的那样,让投资者倾向于以较高的杠杆率而非股票本身交易股票衍生品以获得更多利益,因此期权市场可以包含更多信息。提取这些额外信息的一种方法是仔细研究波动性假笑。

波动性 是我们都熟悉的,Pan(2002)的一个主流理论指出,假笑的主要原因是投资者厌恶跳跃风险引起的风险溢价,尤其是OTM看跌期权的情况。该文假设知情的交易者认识到跳跃风险,对OTM看跌期权的需求越多,跳跃风险溢价就越高。因此,我们定义

波动率偏差= OTM认沽期权隐含波动率 - ATM看涨期权隐含波动率,

我们在这里验证指数期权波动率偏差是未来指数收益的一个很好的指标。

市场实证研究

对于市场的实证研究,本文使用SPX期权,这是一种现金结算的欧式期权。从学术数据库OptionMetrics中检索2006-2012的选项数据。

我们可能会注意到一些隐含波动率数据被遗漏。这可以通过看涨期权价格的下限来解释。当标的资产具有0波动率时,期权价格达到其下限。当实际价格低于下限时,会出现负的隐含波动率,因此我们将其视为错过。

在确定要考虑哪个ATM认购期权合约时,我们选择期权合约,其中执行价格/底层价格的比率最接近1.要选择OTM认沽期权合约,我们首先筛选出合约0.9 <执行价格/底层证券价格<0.95,然后取其执行价格/基础比率最接近0.92的那个。此外,我的多个合同可能满足条件,我们只选择成熟期为30-60天的合同。期限过短的期权往往会出现更加波动的价格波动,期限过长的期权数量很少,无法反映知情交易。本文使用每周平均隐含波动率来检查,从周三到下周二。这个过程在Python中完成,如下面的代码所做的那样。

  1. import pandas as pd
  2. import numpy as np
  3. #read H5S data
  4. #pd.read_excel('SPXOption.xlsx').to_hdf('SPXOption.h5s','data')
  5. ImpliedV=ImpliedV1.append(ImpliedV2)
  6. del ImpliedV1,ImpliedV2
  7. ImpliedV['Expiration']=todatetime(ImpliedV['Expiration'])
  8. #ImpliedV=pd.read_excel("D:\USData\SPXOption.xlsx")
  9. All_Date=pd.Series(ImpliedV.groupby('Date').groups)
  10. SP500=pd.read_excel('D:\USData\SP500.xlsx').iloc[:,0]
  11. Call_Data=pd.Series(0.0,index=todatetime(All_Date),name='Call_Data')
  12. #Select given date
  13. All_Options=ImpliedV[ImpliedV['Date']==All_Date[ii]]
  14. All_Options.loc[:,'Maturity']=(All_Options['Expiration']-Today).dt.days
  15. #Select maturity
  16. #Select type & strike price
  17. Options_Selected_C=Date_Selected_Options[Date_Selected_Options['Type']=="C"]
  18. Options_Selected_C.sort_values(['StrikePrice'],inplace=True)
  19. Options_Selected_P=Date_Selected_Options[Date_Selected_Options['Type']=="P"]
  20. Options_Selected_P.loc[:,'StrikePrice']=abs(Options_Selected_P['StrikePrice']/SP500.iloc[ii]-0.92)
  21. Put_Data[ii]=Options_Selected_P.iloc[0,4]
  22. SP500.index=Put_Data.index
  23. SP500=SP500.resample('W-TUE').first()
  24. SP500=(SP500-SP500.shift(1))/SP500.shift(1)
  25. Final_Data['Skew']=Final_Data['Put_Data']-Final_Data['Call_Data']
  26. 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月股市崩盘后的未平仓合约,这一点很大。SH50ETF刚刚于2015年2月上市,在每周频率的情况下没有足够的数据供研究。

交易策略

我们使用从SPX期权波动率假笑中提取的信息制定了交易策略。当市场周二收盘时,我们计算每周平均波动率偏差,以及过去6个月的指数收益率。什么时候

β_0+β_1* Volatility_skew [t] +β_2* Last6M_Index_Return [t]> 0

我们在第三周看跌S&P500期货。从回归我们知道β_0=0.0016688β_1=-0.0048342β_2= 0.1152003。该策略是用Python编写的:

如果我们使用此策略进行交易,这是一个净值图表

很明显,这一战略是一个成功的战略,并且在2008年的股市崩盘中也取得了成功。

本文分享自微信公众号 - 拓端数据部落(tecdat),作者:TRL 拓端研究室

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R语言时间序列数据指数平滑法分析交互式动态可视化

    请此图是完全交互式的:当鼠标移到系列上时,将显示各个值。还可以选择要放大的图形区域(双击缩小)。

    拓端
  • R语言时间序列数据指数平滑法分析交互式动态可视化

    请此图是完全交互式的:当鼠标移到系列上时,将显示各个值。还可以选择要放大的图形区域(双击缩小)。

    拓端
  • R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)

    判别分析包括可用于分类和降维的方法。线性判别分析(LDA)特别受欢迎,因为它既是分类器又是降维技术。二次判别分析(QDA)是LDA的变体,允许数据的非线性分离。...

    拓端
  • css模糊匹配

    CSS2支持的属性选择器用一个表达式[{属性 | 属性 {= | |= | ~=} 值}]

    山河木马
  • LeetCode 1323. 6 和 9 组成的最大数字

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-69-number 著作权归领扣网络...

    Michael阿明
  • Android开发第一讲 Android体系架构与Android发展史

    GSM-->GPRS-->EDGE-->WCDMA-->HSDPA-->FDD-LTE

    IBinary
  • 【陆勤践行】Python和数据科学的起步指南

    Python拥有着极其丰富且稳定的数据科学工具环境。遗憾的是,对不了解的人来说这个环境犹如丛林一般(cue snake joke)。在这篇文章中,我会一步一步指...

    陆勤_数据人网
  • 数据结构(一)之基础知识

    用户2145235
  • 数据结构(一)之基础知识

    用户2145235
  • Spring源码学习笔记(5)——@Conditonal注解

    在Condition接口的matches()方法加断点,可以追溯到ConfigurationClassBeanDefinitionReader类的loadBea...

    张申傲

扫码关注云+社区

领取腾讯云代金券