“该策略在VIX指数上涨至超过均值三个标准差的当天开立SPDR S&P500信托ETF(SPY)的多头仓位,持有该仓位22个交易日(一个月)。策略的假设是VIX的大幅上涨通常意味着市场恐慌,随后可能会出现市场回升,因此采取反向操作买入SPY。”
资产类别:ETF,期货 | 区域:美国 | 频率:每月 | 市场:股票 | 关键词:VIX策略
策略概述
投资组合包括SPDR S&P500信托ETF(SPY)。在VIX指数上涨至均值以上三个标准差的一天后,开立SPY的多头仓位,并保持该仓位一个月(22个交易日)。
策略合理性
正如简述中提到的,恐惧指数(美国的VIX指数)的极端波动预示着未来市场将有显著的正收益。该策略之所以有效,主要原因在于货币政策对隐含波动率指数正向冲击的敏感性。根据Bekaert等人(2013)的研究,通过对VIX指数的分解,较高的风险厌恶情绪和不确定性通常会导致宽松的货币政策。因此,折现率下降可能导致实际收益的增加。
换句话说,该策略可以被描述为一种均值回归策略,在市场经历恐慌后购买股票——即在VIX大幅上涨之后。因此,该策略是一个具吸引力的量化指标,用于判断股市的入市时机。
论文来源
Do Not Fear the Fear Index: Evidence from the US, UK and European Markets [点击浏览原文]
- Pankaj Chandorkar,Janusz Brzeszczynski,纽卡斯尔大学北方商学院,纽卡斯尔大学,英国
<摘要>
VIX指数通常被称为“恐惧指数”。类似的指数也在英国和欧洲股市中引入。在本研究中,我们研究了这些指数是否反映了投资者的恐惧。我们基于长期预测回归的结果表明,这些指数的波动,以及极端跳升,并未显著预测出美国、英国和欧洲市场中的负向市场回报。此外,领先商业周期指标对恐惧指数冲击的反应在统计上并不显著。然而,这些国家的货币政策似乎对这些冲击很敏感。


回测表现
| 年化收益率 | 10.8% |
| 波动率 | 5.59% |
| Beta | 0.405 |
| 夏普比率 | 1.93 |
| 索提诺比率 | -0.036 |
| 最大回撤 | -3.61% |
| 胜率 | 62% |
完整python代码
from AlgorithmImports import *
# endregion
class ContrarianVIXstrategy(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2000, 1, 1)
self.SetCash(100000)
self.market:Symbol = self.AddEquity("SPY", Resolution.Daily).Symbol
# Subscribe to VIX index data
self.vix:Symbol = self.AddData(CBOE, "VIX").Symbol
self.period:int = 120 * 21
self.min_period:int = 12 * 21
self.std_multiplier:int = 2
self.buy_date:DateTime = None
history:DataFrame = self.History(CBOE, self.vix, self.period, Resolution.Daily)['close']
self.close_list:List[float] = history.values.tolist()
self.SetPortfolioConstruction(EqualWeightingPortfolioConstructionModel())
self.SetExecution(ImmediateExecutionModel())
def OnData(self, data:Slice) -> None:
if self.vix in data and data[self.vix]:
# store vix value
self.close_list.append(data[self.vix].Close)
if len(self.close_list) >= self.min_period:
vix_mean:float = np.mean(self.close_list[:-1])
vix_std:float = np.std(self.close_list[:-1])
vix_yesterday:float = self.close_list[-2]
if not self.Portfolio.Invested and vix_yesterday >= vix_mean + self.std_multiplier * vix_std:
self.EmitInsights(Insight.Price(self.market, timedelta(days=22), InsightDirection.Up))
