
The strategy involves shorting the most liquid front-month OTM S&P 500 index put options one week before expiration, holding until maturity, and equally weighting the portfolio, excluding illiquid securities.
ASSET CLASS: options | REGION: United States | FREQUENCY:
Daily | MARKET: equities | KEYWORD: Timing, Option Returns
I. STRATEGY IN A NUTSHELL
The strategy focuses on highly liquid S&P 500 index options, excluding securities priced below $0.1. Each month, the top 25% of the most traded front-month put options are selected and classified as ATM, ITM, or OTM. The investor shorts front-month OTM puts one week before expiration and holds them until expiration. The portfolio is equally weighted, maintaining positions for one week, targeting liquid, heavily traded options near expiry.
II. ECONOMIC RATIONALE
Option returns are concentrated in the final days before expiration due to heightened convexity risk rather than volatility risk. Close to maturity, OTM puts become highly sensitive to price jumps in the underlying, capturing the option premium associated with jump risk during this critical period.
III. SOURCE PAPER
The Timing of Option Returns [Click to Open PDF]
Adriano Tosia, Wellington Management; Alexandre Ziegler, University of Zurich – Department of Finance
<Abstract>
We document empirically that the returns from shorting out-of-the-money S&P 500 put options are concentrated in the few days preceding their expiration. Back-month options generate almost no returns, and front-month options do so only towards the end of the option cycle. The concentration of the option premium at the end of the cycle re ects changes in options’ risk characteristics. Speci cally, options’ convexity risk increases sharply close to maturity, making them more sensitive to jumps in the underlying price. By contrast, volatility risk plays a smaller role close to maturity. Our results imply that speculators wishing to harvest the put option premium should short front-month options only during the last days of the cycle, while investors wishing to protect against downside risk should use back-month options to reduce hedging costs.


IV. BACKTEST PERFORMANCE
| Annualised Return | 8.69% |
| Volatility | 3.11% |
| Beta | 0.751 |
| Sharpe Ratio | 2.8 |
| Sortino Ratio | 0.613 |
| Maximum Drawdown | N/A |
| Win Rate | 100% |
V. FULL PYTHON CODE
from AlgorithmImports import *
#endregion
class TimingOptionReturns(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2010, 1, 1)
self.SetCash(100000)
data = self.AddEquity("SPY", Resolution.Minute)
self.symbol = data.Symbol
option = self.AddOption("SPY", Resolution.Minute)
option.SetFilter(-20, 20, 0, 7)
def OnData(self, slice):
if self.symbol not in slice:
return
for i in slice.OptionChains:
chains = i.Value
if not self.Portfolio.Invested:
puts = list(filter(lambda x: x.Right == OptionRight.Put, chains))
if not puts: return
underlying_price = slice[self.symbol].Value
expiries = [i.Expiry for i in puts]
# Determine expiration date nearly one month.
expiry = min(expiries, key=lambda x: abs((x.date() - self.Time.date()).days - 7))
strikes = [i.Strike for i in puts]
# Determine 5% out-of-the-money strike.
otm_strike = min(strikes, key = lambda x:abs(x - float(0.95) * underlying_price))
otm_put = [i for i in puts if i.Expiry == expiry and i.Strike == otm_strike]
if otm_put:
# Sell 10% OTM put.
options_q = int(self.Portfolio.MarginRemaining / (underlying_price * 100))
self.Sell(otm_put[0].Symbol, options_q)
VI. Backtest Performance