
“该策略在期权到期周的周四对深度实值(ITM)期权高未平仓合约(Open Interest)的股票进行做空,构建等权重投资组合,并持有一天直至周五期权到期日。”
资产类别:股票 | 地区:美国 | 频率:每日 | 市场:股票市场 | 关键词:做空、股票、期权、到期日
I. 策略概述
该策略针对NYSE、AMEX和NASDAQ中股价高于5美元并拥有可交易期权的股票。股票根据其期权的实值程度(ITM)分为三类:
- 略微实值(0-5% ITM)
- 中度实值(5-25% ITM)
- 深度实值(超过25% ITM)
在深度实值类别中,按照未平仓合约(Open Interest)将股票进一步分为小型、中型和大型组,切分点为40%和70%分位数。策略在深度实值组中,选择未平仓合约数量最高的股票进行做空。等权重投资组合在期权到期周的周四构建,并持有一天,直至周五期权到期日结束。
II. 策略合理性
价格压力假说解释了非信息驱动的需求变化(例如大规模股票买卖)对价格的短期影响。当大量股票被出售时,价格会被压低;而当大量股票被买入时,价格会被推高。在期权市场中,深度实值认购期权的持有者行权后通常会立即卖出所获得的股票,这种直接清算行为在市场上增加了短期供给,导致股价短暂下跌。
这一现象表明,股票价格可能因交易机制而非基本面变化而波动。该策略通过提前预测和利用这些暂时的价格压力,捕捉到期日的短期下跌机会。
III. 论文来源
Stock Returns on Option Expiration Dates [点击浏览原文]
- 作者:Chiang
- 机构:哥伦比亚大学
<摘要>
本文提供了令人信服的证据,表明具有大量深度实值认购期权的股票在期权到期日收益显著较低,平均日回报下降幅度可达1个百分点。这一价格波动通常伴随着短期的反弹修正。期权到期机制带来的额外卖出压力导致了股价短暂下跌,为交易者在期权到期日捕捉短期回报波动提供了明确的机会。研究结果进一步强调了交易驱动型价格波动的重要性以及相关套利策略的有效性。

IV. 回测表现
| 年化收益率 | 18.86% |
| 波动率 | 24.69% |
| Beta | -0.025 |
| 夏普比率 | 0.6 |
| 索提诺比率 | N/A |
| 最大回撤 | N/A |
| 胜率 | 46% |
V. 完整python代码
from AlgorithmImports import *
#endregion
class OptionExpirationWeekEffect(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2010, 1, 1)
self.SetCash(100000)
self.symbol = self.AddEquity('DIA', Resolution.Minute).Symbol
option = self.AddOption('DIA')
option.SetFilter(-3, 3, timedelta(0), timedelta(days = 60))
self.SetBenchmark('DIA')
self.last_expiry = datetime.min
self.Schedule.On(self.DateRules.Every(DayOfWeek.Tuesday, DayOfWeek.Tuesday), self.TimeRules.AfterMarketOpen(self.symbol), self.GetExpiryDay)
self.Schedule.On(self.DateRules.Every(DayOfWeek.Thursday, DayOfWeek.Thursday), self.TimeRules.AfterMarketOpen(self.symbol), self.Open)
self.Schedule.On(self.DateRules.Every(DayOfWeek.Friday, DayOfWeek.Friday), self.TimeRules.AfterMarketOpen(self.symbol), self.Close)
def GetExpiryDay(self):
# Expiry days are available only on Tuesday
calendar = self.TradingCalendar.GetDaysByType(TradingDayType.OptionExpiration, self.Time, self.EndDate)
expiries = [i.Date for i in calendar]
if len(expiries) == 0: return
self.last_expiry = expiries[0]
def Close(self):
# Liquidate on Friday
self.Liquidate()
def Open(self):
# Buy on Thursday before expiry date.
if (self.last_expiry - self.Time).days <= 1 and self.last_expiry != datetime.min:
self.SetHoldings(self.symbol, -1)