背景介绍 | VIX指数是什么
在投资组合管理中,市场波动性是一个关键的风险因素。为了应对潜在的市场崩盘或极端波动,投资者往往会使用对冲策略进行风险管理。VIX指数(波动率指数)通常被称为“恐慌指数”,是衡量市场预期波动性的指标。然而,VIX指数本身不可直接投资,因此,使用VIX期货和期权作为对冲工具就变得非常重要。
本文介绍了一种基于VIX期权的对冲策略,旨在通过系统性购买VIX看涨期权来应对尾部风险,并在市场波动加剧时保护投资组合。
使用VIX期权对冲投资组合策略
各种策略可以为基于资产的投资组合提供资本保护;然而,在市场上升趋势期间,这些策略会产生相当大的负超额收益,在过去几年里,这些策略的成本是难以承受的。但一篇有趣的学术论文为一种有趣且成本效益高的对冲策略带来了希望。该策略使用VIX期权,因为VIX指数本身无法直接投资。为了确定成本效益最高的VIX看涨期权位置,以应对尾部风险,该策略每个月系统性地购买一个月、两个月、三个月和四个月期的VIX看涨期权。在尾部事件期间,投资组合经理不仅可以选择兑现近期合约,还可以兑现持有的所有期权,因为所有期权的市值都会增加。该策略仅在VIX指数不极高或极低的月份中投资每个月25个基点(bsp)在VIX看涨期权上。这种方法在非事件期减少了对冲成本。
根本原因
波动性倾向于集聚并回归均值。每个月分配固定比例的资金允许在VIX低于均值时购买更多期权,而在VIX高于均值时购买更少的期权。该策略试图在投资组合框架内确定最佳的内在价值、到期日和最小资本需求。VIX指数在15%到50%之间时才会买入看涨期权。因此,投资者不会购买他们可能不需要的期权,从而避免支付过高的费用。
策略概述
该策略投资范围包括60%股票和40%债券的组合。股票由SPDR S&P 500 ETF Trust (SPY) 代表,债券则由iShares 7-10年期国债ETF (IEF) 代表。策略首先投资0-100个基点(bsp)在所需的VIX看涨期权上,然后将投资组合的60%分配给SPY,剩余40%分配给IEF。期权以标的VIX期货价格135%的内在价值水平买入。该策略系统性地购买等量的一个月、两个月、三个月和四个月的VIX看涨期权。如果VIX指数在15到30之间,VIX看涨期权的权重为投资组合的1%。如果VIX指数在30到50之间,权重为0.5%。如果VIX指数高于50或低于15,那么投资组合中期权的权重为0%。每个月,在到期日的前一天,期权会滚动到适当的到期日。VIX看涨期权以报价买入并以出价卖出,以保持假设的保守性。期权持有至到期,并在期权和期货到期前的星期二下午卖出。如果合约具有任何内在价值,它们会以出价卖出,现金在月底用于重新平衡股票/债券部分的投资组合。
策略实现
1. 投资组合构建:
• 60%的资金分配给SPY,代表股票市场的头寸。
• 40%的资金分配给IEF,代表债券市场的头寸。
2. VIX看涨期权的购买:
期权的执行价设置为VIX期货价格的135%。策略系统性地每月购买等量的一月期、两月期、三月期和四月期的VIX看涨期权。
• 当VIX指数在15至30之间时,策略会将投资组合的1%分配给VIX看涨期权。
• 当VIX指数在30至50之间时,VIX看涨期权的权重降低为0.5%。
• 当VIX指数低于15或高于50时,不进行期权购买。
3. 期权的到期管理:每月在到期日前一天,策略将现有期权展期到下一个适当的到期期限。所有VIX看涨期权会持有至到期,并在VIX期货和期权到期前一天的下午进行平仓。如果这些期权具有任何内在价值,它们会按出价卖出,所得资金用于月末重新平衡股票和债券部分的投资组合。
策略实现代码基于QuantConnect平台,详细完整代码和策略原文请见知识星球
# Advice:
# - To view algorithm errors, toggle Console view below when in Backtesting
# - To print out debugging messages (the difference is only in colours), use
# `self.Debug(...)` or `self.Error(...)` - See LINK 1
# - To stop backtesting, go to Organisation (tab #2) -> Resources -> Stop
from AlgorithmImports import *
class PortfolioHedgingUsingVIXOptions(QCAlgorithm):
def Initialize(self):
# TODO 1: (LINK 2)
# Set up conditions:
# - cash (1000000)
# - start date (1/1/2010)
self.SetStartDate(...)
self.SetCash(...)
# TODO 2: (API)
# Set up holdings:
# - on S&P ("SPY")
# - with minutely resolution
# - with leverage of 5 (LINK 3)
# Do the same for IEF(bond)
# Links: _1_ _2_
data = self.AddEquity(...)
data.SetLeverage(...)
self.spy = data.Symbol
data = self.AddEquity(...)
data.SetLeverage(...)
self.ief = data.Symbol
# TODO 3: Add VIX options with option filter(LINK4, ~5 lines)
def OnData(self,slice):
for i in slice.OptionChains:
chains = i.Value
# invested is a list of all instruments that the strategy is currently invested in.
invested = [x.Key for x in self.Portfolio if x.Value.Invested]
# TODO 4: Write a code to check if you hold options or not (~ 2 more lines)
if len(invested) <= 2:
# TODO 5: Execute strategy (~12 lines)
underlying_price = ...
expiries = ...
strikes = ...
# TODO 6: Execute strategy (~10 lines)
#Filter out the expiries
for...
if ...
elif ...
if weight != 0:
options_q = ...
self.Securities[...] = ...
self.Buy(...)
# TODO 7: Execute strategy (LINK 6, ~2 lines)
# Buy spx and ief after buying options in 60:40 ratio of the left-over margin.
关于LLMQuant
📰 每日资讯:人工智能与量化金融的前沿动态,附中英文原文,助你紧跟行业发展。
💻 策略详解:获取量化策略的完整代码,支持多平台回测,提升你的实战能力。
❓ 免费答疑:每日解答社区成员问题,高效提升你的知识水平。
🌐 线上交流:与国内外量化从业者互动,参与深度知识分享,拓展你的专业网络。
欢迎加入我们的知识星球,和全球精英一起探索人工智能与量化金融的无限可能!🚀✨
搜索 LLMQuant
关注我们