Episode 9: Why QQQ Beat SPY In Dispersion Options

Daniel Ratke
Research & Engineering

Term map
Backtesting vocabulary for this article
Treat signal timestamp, point-in-time universe, quote-aware fill, reject reason, replay artifact, walk-forward test, and cache key as first-class terms. They separate reproducible research from a backtest that only preserves the final performance table.
Follow the linked definitions for Point-in-time contracts, Quote-aware fills, Reject reasons, Replay artifact, Cache key, Signal timestamp, Look-ahead leakage, Walk-forward test, Slippage model, Same-bar fill, Promotion gate, and Options data API.
Read this article with Options Backtesting API, Backtesting Framework, Backtesting Data Quality Checklist, Backtesting Execution Realism, Quote-Aware Options Backtests, and Backtest to Paper Trading Parity Checklist.
Scope
This episode follows the most interesting research branch still not promoted: the QQQ-only dispersion sleeve.
The main evidence is concentrated in the April 11 to April 18 section of RUNS.md, together with decision_gate.json.
Result Snapshot
Three results define the branch.
First, the strict-causal reruns showed the symbol split clearly:
SPY-only stayed negative or weakQQQ-only stayed positive
Second, infrastructure fixes mattered:
- quote-loader repair eliminated quote starvation as the dominant blocker
- session-bar cache and proxy-data repair removed a false parity gap
- dynamic overlay generation removed stock-to-option drift
Third, even after those fixes, the branch still ended research_only because of sample size.
Representative results:
- strict-causal rerun:
QQQsingle+20.81%on5trades, vertical+10.85%on8trades - patched combined rerun: single
+5369.05on7trades, vertical+8150.18on11trades - direct Stage B QQQ replay:
qqq_single_base9trades,+44537.92;qqq_single_volume15_v110trades,+32998.35 - positive-unlock replay:
qqq_single_base9trades,+9079.91;qqq_single_volume15_v117trades,+326.53
Strategy Context
The QQQ sleeve is not an entirely separate strategy family. It is a specialized descendant of the c4 dispersion-relative breakout logic. At the stock level, the branch uses QQQ-specific variants of the dispersion breakout seed, changing relative-volume floors, beta-shock tolerance, and entry thresholds to find a denser but still positive stock winner. At the option level, the repo then derives overlays from the selected stock winner instead of hard-coding a fixed option alias. This is important because it keeps the option expression aligned with the actual stock signal that survived Stage A.
The two main option overlays discussed in this branch are simpler than their names make them sound. qqq_single_base is the standard single-leg option overlay derived from the selected stock seed. qqq_single_volume15_v1 is the same basic overlay with one meaningful extra requirement: minimum option entry volume of 15 contracts at both the leg and structure level. The comparison therefore isolates a scientifically useful question. Does demanding more entry-bar options liquidity improve the branch enough to offset the trades it removes?
Why The Branch Improved
The most interesting part of this story is that the repo found more than a better threshold. It found a better diagnosis.
The early combined branch looked worse partly because:
- fixed option overlays no longer matched the selected stock seed
- quote availability was broken in the loader path
- some parity gaps were due to missing proxy/session data
Once those issues were repaired, the signal got cleaner:
extra_option_attempt_countfell to0stock_signal_drift_symbolsstayed empty- quote rejects fell sharply
- the preferred overlay changed from
qqq_single_volume15_v1toqqq_single_base
That change in winner ranking is not trivial. It means the branch stopped confusing execution cleanliness with execution edge. A stricter entry-volume filter can make a backtest look more institutionally respectable, but if it removes too much of the economically good sample, it can reduce the value of the sleeve. The repo's final posture on volume15 is therefore nuanced: it is a useful control, but not the retained anchor.
That is exactly what a scientific process should do. It should convert "the strategy looks noisy" into "which layer of the pipeline is introducing the noise?"
What Worked
Two things worked especially well.
First, the symbol decomposition was informative. The repo learned that dispersion strength was not evenly distributed across SPY and QQQ. QQQ was the actual signal carrier.
Second, the dynamic overlay fix was not cosmetic. It changed the winner ranking and reduced parity drift. That is a real research result, more than an engineering note.
The best QQQ evidence still comes with caveats, but it is not hand-wavy anymore. It has:
- positive economic results
- cleaner parity
- explicit robustness diagnostics such as largest-winner share and leave-one-out minimum PnL
What Did Not Work
Three negative results remain.
-
SPYstill did not cooperate. The repo repeatedly tried to repair theSPYsleeve, and the best positive SPY vertical remained extremely sparse. -
Sample size is still too small. The QQQ density gate explicitly required more stock and options trades than the branch could deliver consistently.
-
The denser positive-unlock follow-up did not preserve quality well enough to replace the base anchor.
qqq_single_volume15_v1got to17trades in one positive-unlock replay, but its total PnL and leave-one-out robustness still did not beatqqq_single_base.
That is why the lane stayed research_only.
This is worth emphasizing because it is exactly the kind of branch that invites premature promotion. A reader who sees +44537.92 on 9 trades or +20.81% on 5 trades may feel that the repo is being too conservative. The better interpretation is that the repo is finally behaving like a portfolio researcher rather than a chart collector. Large positive totals on thin samples are hypotheses, not admissions tickets.
Why This Week Matters
This is one of the most valuable episodes in the whole journey because it contains both a real positive result and a real refusal to overclaim it.
In light One Piece language, this branch found a promising island but did not yet declare it the final one.
That is exactly the tone public research should have.
Public Build Takeaway
The right lesson to publish is:
- symbol-specific sleeves matter
- QQQ carried more dispersion signal than SPY in this repo
- fixing the data and overlay path changed the conclusion materially
- even strong-looking QQQ results remain unpromoted because sample is thin
That combination of excitement and restraint is what makes the branch worth following publicly.
Related workflow
For the Episode 9: Why QQQ Beat SPY In Dispersion Options workflow, continue through Options Backtesting API, Backtesting Framework, Backtesting Execution Realism, Backtesting Data Quality Checklist, Quote-Aware Options Backtests, and Backtest to Paper Trading Parity Checklist.
How the terminology applies
For Episode 9: Why QQQ Beat SPY In Dispersion Options, the backtesting workflow should treat Point-in-time contracts, Quote-aware fills, Reject reasons, Replay artifact, Cache key, and Signal timestamp as operational state rather than glossary decoration. That framing keeps the research claim causal: the strategy can only select instruments, prices, and labels that existed at the decision time.
A developer implementing this research idea should persist Look-ahead leakage, Walk-forward test, Slippage model, Same-bar fill, Promotion gate, and Options data API beside the result, instead of leaving those words in a term card. It also turns attractive performance into an auditable record where fills, skips, thresholds, and replay inputs can be challenged independently.
The review artifact for Episode 9: Why QQQ Beat SPY In Dispersion Options becomes more useful when OPRA-originating data, OCC option symbol, Bid/ask spread, Midpoint, Quote/trade condition, and Quote vs trade semantics appear in the same body of evidence as the selected rows. When a result is promoted, these fields should appear in the run manifest, rather than a prose summary or final equity curve.
In production notes for this backtesting workflow, REST snapshot, WebSocket stream, Entitlement gate, Quote freshness, Timestamp semantics, and Pagination cursor define the checks that decide whether the workflow is reproducible. The result is a backtest that can be rerun, compared across threshold families, and rejected when the evidence is not strong enough.
For Episode 9: Why QQQ Beat SPY In Dispersion Options, the practical acceptance test is simple: another developer should be able to read the body, identify the exact inputs, reproduce the request sequence, and explain the accepted and rejected rows without relying on the bottom terminology grid. If a phrase appears in the page vocabulary, it should correspond to a stored field, a validation check, a replay step, or an implementation decision in the backtesting workflow.
This is also the reason the article should not measure success only by the final chart, table, or headline metric. The better standard is whether the data path, timing model, entitlement state, and evidence trail survive review. When those pieces are written directly into the body, the terminology becomes part of the workflow readers can implement.
Terminology
Market-data terms used in this article
These terms keep the article connected to the CuteMarkets knowledge base and to the exact API workflow behind the research.
Point-in-time contracts
Contract discovery anchored to the research date so a backtest does not use future listings.
Quote-aware fills
Entry and exit assumptions based on bid/ask quotes, quote age, spread width, and side-specific fill rules.
Reject reasons
Logged explanations for skipped contracts or fills, including stale quote, wide spread, no bid, or missing data.
Replay artifact
The saved request, selection, fill, reject, and metric record that lets another developer audit the backtest.
Cache key
The structured identifier that keeps provider, endpoint, ticker, timestamp, plan, and schema state from being mixed.
Signal timestamp
The exact time a strategy made a decision, used to reconstruct the visible universe and quote window causally.
Look-ahead leakage
A research error where a fill, contract, indicator, or label uses information unavailable at decision time.
Walk-forward test
A validation method that repeatedly trains and evaluates across separated time windows instead of trusting one optimized sample.
Slippage model
A fill-cost assumption based on bid/ask side, midpoint, spread percent, quote age, and liquidity policy.
Same-bar fill
An intraday backtest assumption that can become invalid when signal, entry, stop, and target ordering is ambiguous.
Promotion gate
The written threshold that decides whether a research candidate can move into paper trading or production monitoring.
Options data API
The product surface for chains, contracts, quotes, trades, aggregates, Greeks, IV, open interest, and expirations.
OPRA-originating data
The U.S. listed-options source context behind quotes, trades, exchange participation, and consolidated option-market records.
OCC option symbol
The exact option contract identifier that preserves root, expiration, call or put side, and strike.
Bid/ask spread
The execution interval between bid and ask that determines whether a contract is realistically tradable.
Midpoint
The computed center between bid and ask, useful as a reference price but not proof that an order would fill.
Quote/trade condition
The condition-code, exchange, correction, sequence, and timestamp context that explains how a quote or trade row can be used.
Quote vs trade semantics
The distinction between executable bid/ask markets, printed transactions, and bar-level summaries.
REST snapshot
A reproducible request for current or historical market state, used for initialization, backfills, and audit logs.
WebSocket stream
A persistent live connection that needs subscription topics, reconnect tracking, freshness labels, and REST repair paths.
Entitlement gate
The product, plan, quote, live, delayed, historical, or commercial-use boundary checked before data is shown.
Quote freshness
The age, timestamp, and live or delayed state of a bid/ask record before it is used in a scanner, backtest, or UI.
Timestamp semantics
The exchange, provider, ingestion, session, and application time context attached to a market-data record.
Pagination cursor
The continuation token or next URL that keeps large chains, trades, quotes, and historical windows complete.

Written by
Daniel Ratke
Research & Engineering
Daniel covers the deeper research notes: options backtesting, execution realism, robustness testing, data engineering, and strategy validation.
Product links
Build the workflow with CuteMarkets
This article is part of the broader CuteMarkets product and research stack. Use the landing pages below to move from the blog into the specific API workflow you want to evaluate.
Beginner options path
Send newcomers to the beginner path for calls, puts, chains, Greeks, IV, and risk.
Options Data API
See the main options overview for real-time and historical options data.
Historical Options Data API
Inspect the historical contracts, quotes, trades, and aggregates workflow.
Options Chain API
Go straight to chain snapshots, expirations, and strike discovery.
Pricing
Review plans before you move from free evaluation into production usage.