Skip to main content
US market 13 min read

Quad Witching Backtest: Triple Witching Week vs QQQ

What is quad witching, and does it move stocks? We backtested 43 quad (triple) witching days on QQQ and SPY, 2016-2026: 3 of 36 timing settings beat QQQ.

Rerun this strategy with AI, no install

FinLab Studio opens in your browser: AI reruns the backtest with this article's rules, then you can change them and test again.

Rerun in Studio
3 of 36 settings beat QQQ

QQQ and SPY average daily return on each trading day around quad witching, with 95% confidence intervals, 43 events from 2016 to 2026

Reproduce it

Run this strategy

Copy the prompt to reproduce the evidence above with the article’s data, assumptions, and risk checks.

Tell your AI:

Set up FinLab and rerun the quad witching and monthly options expiration timing backtest against QQQ. Please read: https://finlab.finance/en/setup?relatedUrl=/en/blog/quad-witching-backtest

No install, open FinLab Studio

Quad witching is the third Friday of March, June, September and December, when stock index futures, stock index options and single-stock options all expire on the same day. We backtested the 43 quad witching days from January 2016 to November 2026 on QQQ and SPY. In the witching week (from the close five trading days before to the witching-day close) QQQ gained 0.11% on average, and in the week after it gained 0.34%, against 0.39% for any five trading days. Each gap sits well inside its confidence interval. Staying in cash for the week after quad witching earned a daily Sharpe ratio of 0.85, against 0.88 for simply holding QQQ with dividends reinvested; holding QQQ only during the witching week earned 0.07. The monthly options expiration versions did no better: across four designs, 3 of 36 settings beat QQQ, and none of the designs passed.

On quad witching day itself SPY fell 0.32% on average, with a 95% confidence interval of -0.61% to -0.04%, and QQQ fell 0.24%, which is not significant. QQQ also fell 0.47% on average on the fifth trading day after. Those two cells aside, the eleven days around witching show no pattern, and with 22 intervals on the chart, one or two of them excluding zero is what chance alone would produce.

The four designs at a glance

Design (original setting) Time in market CAGR Daily Sharpe Max drawdown Sharpe, first / second half Settings beating QQQ
Q1 Cash in the week after quad witching, QQQ otherwise 92% 17.3% 0.85 -40.7% 1.08 / 0.63 3 of 9
Q2 Hold QQQ only in the quad witching week 8% 0.2% 0.07 -16.5% -0.04 / 0.18 0 of 9
Q3 Cash in the week after every monthly opex 76% 12.3% 0.69 -43.0% 1.03 / 0.36 0 of 9
Q4 Hold QQQ only in monthly opex weeks 24% 1.4% 0.18 -24.7% 0.49 / -0.12 0 of 9
QQQ buy and hold, total return 100% 18.7% 0.88 -35.1% 1.09 / 0.67 benchmark
SPY buy and hold, total return 100% 14.5% 0.85 -33.7% — reference

The window runs from 2016-01-05 to 2026-11-05, the full history of FinLab's US ETF price table (us_fund_price). Every curve starts on the same day, and QQQ and SPY include dividends. The halves split in early June 2021.

What is quad witching, and how is it different from triple witching?

Quad witching, or quadruple witching, is the quarterly day when four kinds of contracts expire together: stock index futures, stock index options, single-stock options and single-stock futures. Before 2002 there were only three, so the day was called triple witching. Single-stock futures started trading in the US in 2002 and turned it into quad witching. When OneChicago closed in September 2020, US single-stock futures stopped trading, so today the day is again effectively triple witching. Both names are in use and refer to the same day.

Every third Friday is a monthly options expiration day, usually shortened to opex. Quad witching is the March, June, September and December opex, when index futures expire too. Open interest and trading volume are usually the largest of the quarter. S&P 500 futures and standard monthly SPX options settle on a special opening quotation that morning, while stock and ETF options settle on the close, so both the open and the close of witching day see heavy position changes. The quarterly rebalances of the S&P 500 and the Nasdaq-100 also take effect after the close on that Friday.

When the market is closed on the third Friday, expiration moves to Thursday. In this window that happened once for quad witching: Friday, June 19, 2026 was the Juneteenth holiday, so quad witching moved to June 18. Upcoming dates, subject to exchange announcements:

Year Quad witching days (third Friday)
2026 December 18
2027 March 19, June 17 (June 18 is the observed Juneteenth holiday), September 17, December 17

How a design had to pass

"Beats QQQ" means a higher daily Sharpe ratio than buying and holding QQQ with dividends reinvested, over exactly the same trading days. The daily Sharpe ratio is the mean daily return divided by its standard deviation, times √252, with no risk-free rate; the Sharpe ratio calculator shows the arithmetic. The rules were written down before we looked at any result:

  1. Neighbouring parameters. Each design has two parameters: window length L (4, 5 or 6 trading days) and window shift o (one day earlier, no shift, one day later). At least 7 of the 9 settings must beat QQQ. The original setting is L = 5, o = 0.
  2. Both halves. The window is split at its middle date, and the original setting must beat QQQ in each half.
  3. Trading costs. finlab's default US commission and tax are zero, and the original setting must win there. It must also win after paying 0.1% on every buy and every sell, to cover the bid-ask spread and slippage.

Q2 and Q4 are in the market less than half the time, so they must also beat QQQ held at the same average weight and beat QQQ on returns above T-bills (BIL). A design that clears all of that would then be checked without its best year. The same rules applied to SPY are compared with SPY only, as a reference.

The four designs and where they come from

The idea that the witching week is strong and the week after is weak comes mostly from trader almanacs, not from journals. The academic work is about what happens on and around expiration. Stoll & Whaley (1987) found that stock price volatility was higher in the last hour of S&P 500 futures expiration days and in the first half hour of the next day. Ni, Pearson & Poteshman (2005) showed that optionable stocks tend to close near a strike price on expiration days, which they link to the hedging of option market makers. Stivers & Sun (2013) found that S&P 100 stocks earn higher returns in monthly option-expiration weeks than in other weeks, and slightly lower returns in the week after.

  • Q1 Cash in the week after quad witching: sell QQQ at the witching-day close, buy back five trading days later, hold the rest of the time. Four round trips a year.
  • Q2 Hold only the quad witching week: buy QQQ at the close five trading days before witching day, sell at the witching-day close.
  • Q3 and Q4: Q1 and Q2 with every monthly third Friday instead of only the quarterly ones, twelve round trips a year. This is the monthly expiration week that Stivers and Sun studied, and it shows whether quad witching is any different from an ordinary expiration.

Result 1: all four designs trail QQQ

Growth of $1 for four options expiration rules against QQQ with dividends, 2016-2026, log scale

One dollar in QQQ with dividends reinvested grew to 6.39fromJanuary2016toNovember2026.Stayingincashtheweekafterquadwitchinggrewto6.39 from January 2016 to November 2026. Staying in cash the week after quad witching grew to 5.63, the closest of the four. Cash after every monthly opex reached 3.51,holdingonlymonthlyopexweeks3.51, holding only monthly opex weeks 1.16, and holding only the quad witching week $1.02, about break-even over ten years.

Q1's maximum drawdown of -40.7% was deeper than QQQ's -35.1%. In the bear market from late 2021 to November 2022, three of the four weeks it sat out were rallies: +5.0% in December 2021, +2.4% in March 2022 and +6.7% in June 2022. It dodged only the -4.6% week in September 2022, and it was in the market for the down days in between.

The two designs that hold only expiration weeks look worse once T-bills are counted. Their Sharpe ratios on returns above BIL are -0.23 for Q2 and -0.02 for Q4, against 0.78 for QQQ. Holding QQQ at the same average weight every day, about 8% for Q2 and 24% for Q4, earned 1.5% and 4.6% a year, more than either design.

Result 2: 3 of 36 settings beat QQQ

Daily Sharpe ratio of 36 settings across four quad witching and monthly opex designs; only 3 exceed QQQ's 0.88

All three winning cells are in Q1, and none is the original setting: four days in cash shifted one day later (0.90), six days shifted one day earlier (0.90) and six days shifted one day later (0.89). The original scored 0.85 and its two neighbours on the same row 0.81 and 0.87. Winners and losers alternate instead of forming a block, which usually means the gap comes from a handful of lucky weeks. Three of nine is well short of the seven-of-nine bar.

Q3 lost in all nine settings, with a best of 0.81. Across the 18 settings of Q2 and Q4 the highest was 0.52. In the first half, from 2016 to early June 2021, Q1 scored 1.08 against QQQ's 1.09, close to a tie; in the second half it scored 0.63 against 0.67. Paying 0.1% per side took Q1 from 0.85 to 0.82. At four round trips a year, cost is not why it lost.

What QQQ did in the witching week and the week after

Average five-day returns of QQQ and SPY in the quad witching week, the week after, other opex weeks and the weeks after them, against any five trading days

Five-day return Events QQQ mean QQQ 95% interval QQQ up weeks SPY mean
Quad witching week 43 +0.11% -0.93% to +1.16% 56% -0.35%
Week after quad witching 43 +0.34% -0.55% to +1.24% 53% +0.31%
Other monthly opex weeks 87 +0.18% -0.40% to +0.75% 52% +0.26%
Week after other opex 87 +0.58% +0.02% to +1.14% 62% +0.40%
Any five trading days rolling +0.39% — — +0.30%

The weak week after quad witching does not show up in these ten years: QQQ averaged +0.34%, about the same as any week. The witching week was not strong either, and for SPY it was negative. The surprise is the week after the other monthly expirations. QQQ averaged +0.58% and rose in 62% of those weeks, the opposite of the slight underperformance Stivers and Sun reported. It is the only one of the four windows whose interval excludes zero, and only barely, with a lower bound of +0.02%.

Day by day, in the chart at the top, SPY fell 0.32% and QQQ 0.24% on witching day, and QQQ rose 0.28% and 0.44% on the first and second trading days after. That fits the expiration-day selling and next-day rebound Stoll and Whaley described, but it adds up to two or three days with wide intervals, and a bid-ask spread on each trade leaves little room.

The code

This is the core of Q1: find the quad witching days, mark the week after, hand the position to sim() and compare daily Sharpe ratios with QQQ.

Show Code
import numpy as np
import pandas as pd
import finlab
from finlab import data
from finlab.backtest import sim
 
finlab.login()  # finlab guides you through login automatically
data.set_market("us_fund")
END = "2026-11-05"
 
# 1. QQQ with dividends reinvested, without the empty holiday rows
close = data.get("us_fund_price:adj_close")["QQQ"].dropna().loc[:END]
days = close.index
 
# 2. Quad witching: third Friday of March, June, September and December,
#    or the trading day before it when the market is closed
quad = []
for month in pd.period_range(days[0], days[-1], freq="M"):
    if month.month in (3, 6, 9, 12):
        first = pd.Timestamp(month.year, month.month, 1)
        friday = first + pd.Timedelta(days=(4 - first.weekday()) % 7 + 14)
        if friday <= days[-1]:
            quad.append(days.searchsorted(friday, side="right") - 1)
 
# 3. Cash for the five trading days after quad witching, QQQ otherwise
hold = np.ones(len(days), dtype=bool)
for p in quad:
    hold[p + 1:p + 6] = False
 
# 4. sim() trades at the next day's close, so the signal goes in two days early
signal = pd.Series(hold, index=days).shift(-2, fill_value=True)
report = sim(signal.astype(float).to_frame("QQQ"), resample=None, trade_at_price="close", upload=False)
 
# 5. Daily Sharpe of the rule and of QQQ over the same days
equity = report.creturn.reindex(days).ffill().loc[days[1]:]
for name, curve in [("Cash after quad witching", equity), ("QQQ buy and hold", close.loc[days[1]:])]:
    daily = curve.pct_change().dropna()
    print(name, round(daily.mean() / daily.std() * 252 ** 0.5, 2))

With data through 2026-11-05 this prints 0.85 and 0.88. Expiration dates are known in advance, so shifting the signal two days earlier does not use any future price. The full research.py adds the other three designs, the 36-setting grid, both halves, the cost and T-bill checks, the SPY reference and all event statistics, and it appends the scheduled NYSE sessions after the last data row so the final days know where the next window falls.

Install the FinLab skill for your AI agent

You do not need to write the code above yourself. Install the FinLab skill in Claude Code, Codex or Gemini CLI with one command:

Show Code
npx skills add koreal6803/finlab-ai --skill finlab -g -y

Then ask your agent in plain language, for example "test staying out of SPY for the week after quad witching, then rerun it with neighbouring windows, on each half of the window and with 0.1% cost per trade" or "show QQQ's average return on each day around monthly options expiration". The AI agent setup page walks through each tool, the AI-assisted setup connects your FinLab account, and the same research runs in the browser at studio.finlab.finance.

Backtest method and limits

Item What we did
Window 2016-01-05 to 2026-11-05, the full us_fund_price history (it starts on 2016-01-04, and the first buy is at that day's close). The table has 55 empty holiday rows, which are dropped first.
Expiration dates Third Friday of each month, with quad witching in March, June, September and December, moved to the previous trading day when the market is closed. 43 quad witching days and 130 monthly expirations. Quad witching moved once, to 2026-06-18; monthly expirations also moved three times for Good Friday, to 2019-04-18, 2022-04-14 and 2025-04-17.
Asset and weights QQQ, 100% in the market or 0%. The same rules on SPY are a reference only, and every original setting on SPY scored below SPY's 0.85.
Idle cash Earns nothing, finlab's default. The designs that hold only expiration weeks are also compared on returns above BIL.
Signal timing Expiration dates are known in advance. sim() trades at the next trading day's close, so signals are set two trading days early; see look-ahead bias.
Costs finlab's US default of zero, plus a second run at 0.1% per side (fee_ratio=0.001) for spread and slippage.
Turnover Four round trips a year for Q1 and Q2, twelve for Q3 and Q4 (turnover).
Benchmark QQQ buy and hold with dividends, no costs; daily Sharpe with no risk-free rate.
Sample All in-sample. 43 quad witching days is a small sample with wide intervals, and the halves are a stability check, not an out-of-sample test. Capacity was not estimated; QQQ and SPY are among the most traded securities in the world.

What this result does and does not say

It says that from 2016 to 2026, timing QQQ around quad witching or monthly options expiration did not pass in any of the 36 settings we tried. The closest, cash in the week after quad witching, won in 3 of 9 settings, scattered rather than clustered. The strong witching week and the weak week after did not show up on QQQ or SPY in these ten years.

It does not say quad witching is unimportant. The volume, the closing auction and the index rebalances that take effect that day are real, and anyone trading on that Friday should mind spreads and closing-price swings. For someone holding the index, the data gives no reason to step aside.

The one QQQ timing rule in our US research that has passed the same three checks since 2016 is the US ETF rotation strategy, which trades on QQQ's trend and momentum rather than the calendar and holds 2x leveraged ETFs, with the risks that brings; its record is on the strategy page. Other calendar rules are covered in Santa Claus rally and Sell in May vs QQQ, the weekday version in best day of the week to buy stocks, and everything else in the US quant strategies overview.

FAQ

What is quad witching?

Quad witching is the third Friday of March, June, September and December, when stock index futures, stock index options, single-stock options and single-stock futures expire on the same day. US single-stock futures stopped trading in 2020, so it is now often called triple witching.

When is the next quad witching day?

December 18, 2026. In 2027 the dates are March 19, June 17 (moved up a day because June 18 is the observed Juneteenth holiday), September 17 and December 17.

What is the difference between triple witching and quad witching?

Triple witching is the expiration of index futures, index options and stock options on the same day. Adding single-stock futures in 2002 made it quad witching. Since those futures stopped trading in 2020, the two names describe the same day.

Does the stock market go down on quad witching day?

In the 43 events from 2016 to 2026, SPY fell 0.32% on average on witching day and QQQ fell 0.24%, and each was up on only 15 of the 43 days (35%). QQQ rebounded on average over the next two days, and the whole week looked like any other week.

Is the week after triple witching bearish?

Not in these ten years. QQQ rose 0.34% on average in the week after, against 0.39% for any five trading days. Staying in cash for that week scored a daily Sharpe of 0.85 against 0.88 for holding, and turned 1into1 into 5.63 instead of $6.39.

Is there a monthly options expiration week effect?

Stivers and Sun (2013) found higher returns in expiration weeks for S&P 100 stocks. On QQQ, the 87 monthly expiration weeks outside the quad witching months averaged +0.18%, below the +0.39% of any week, and holding QQQ only in expiration weeks scored a daily Sharpe of 0.18.

Can I rerun this myself?

Yes. Install the FinLab skill through the AI-assisted setup, download research.py below and run python research.py. It writes every number in this article to metrics.json.

Reproduce it yourself

  • research.py: four designs, the 36-setting grid, both halves, the cost and T-bill checks, the SPY reference and the event statistics.
  • data.csv: daily equity curves of the four designs and of QQQ and SPY with dividends.
  • metrics.json: every statistic quoted in this article, including each setting and each day around expiration.

More US research is on the FinLab blog, the long-run ETF comparison behind our benchmark is in QQQ vs SPY, VOO and VTI, the quant trading guide covers the basics, and the team behind it is on the about page.


Last updated: 2026-11 | Backtest window: 2016-01 to 2026-11 | Benchmark: QQQ total return | Author: FinLab Quant Research (reviewed by a quantitative researcher)

Past performance does not represent future results, and every result here is an in-sample backtest. This content is for education only, is not investment advice, and does not constitute investment advice.

FinLab AI

Want to build your own strategy?

Describe your stock-picking ideas in natural language. AI automatically validates, backtests, and gives you answers

Start Free

More Macro & Market research

View all