Hey everyone
I’ve been experimenting with the Nasdaq Retail Trading Activity Tracker / RTAT dataset to see if retail activity can be turned into a usable signal.
The basic idea was to use **retail activity** — i.e., when retail volume is unusually elevated relative to a stock’s own history. My first pass was to use this as a filter on top of price/technical features.
# What I tried
I built a model that scores stocks using:
* Nasdaq retail activity features
* retail activity z-score
* recent activity change
* rolling activity levels
* price/technical features
* RSI
* MACD
* momentum
* price vs SMA20/SMA50
* realized volatility
* volume z-score
The target was an “oracle-style” forward score: basically whether the next \~10 days had more upside than downside. Then each day I ranked stocks cross-sectionally.
The equity version was:
1. Scan a broad ITOT universe.
2. Pick the top-ranked names.
3. Require elevated retail activity.
4. Use a VIX regime gate:
* lower VIX → looser retail activity threshold
* higher VIX → stricter threshold
5. If there are not enough qualifying names, park the rest in SPY/GLD/cash.
# Equity backtest results
Using the deployed max-return config:
* VIX < 18 → activity z-score > 0.5
* VIX ≥ 18 → activity z-score > 1.25
* top 10 names
* idle capital parked in GLD/SPY
The rough 2019–2026 backtest looked like this:
|Strategy|Total Return|CAGR|Max DD|Sortino|
|:-|:-|:-|:-|:-|
|Retail activity strategy|\~+3700%|\~67%|\~−35%|\~2.7|
|QQQ|\~+360%|\~23%|\~−36%|\~1.3|
|TQQQ|\~+1500%|\~46%|\~−82%|\~1.2|
There was also a more conservative Calmar-optimized version:
* VIX < 16 → activity z-score > 0.5
* VIX ≥ 16 → activity z-score > 2.0
That had lower total return but much better drawdown:
|Strategy|Total Return|CAGR|Max DD|Calmar|
|:-|:-|:-|:-|:-|
|Calmar version|\~+2600%|\~60%|\~−24%|\~2.4|
Obviously this is still a backtest and ignores some real-world frictions, but the interesting thing was that the signal did especially well in periods where retail was actually concentrating into names, and the activity gate helped avoid a lot of bad trades.
# What I learned from equities
A few takeaways:
* Retail **activity** seems more useful than retail sentiment.
* Activity alone is not directional.
* It works better as a **confirmation / regime trigger**.
* Price features determine direction.
* The signal is much better cross-sectionally than single-name timing.
* Parking idle capital matters a lot, because the strategy is often not fully invested.
# Trying to extend this to options
The natural next idea was: if the signal finds retail-driven names, maybe buying calls would amplify returns.
I tested buying calls on signal days with different:
* expiries: weekly, 30 DTE, 60 DTE, 90 DTE
* strikes: ATM, 5% OTM, 10% OTM
* holding periods: 5 days, 10 days, to expiry
* $100 per trade
The first call-buying tests were interesting but unstable. Some years looked great, but the strategy was very lottery-like:
* most trades lost
* a few trades drove all the P&L
* best expiry/strike varied a lot by year
* 2026 was especially bad for long calls
That made me think the real options edge may not be buying convexity, but **selling overpriced premium** on names the equity model already likes.
So I tested cash-secured short puts:
* \~30 DTE
* \~5% OTM
* tight spreads only
* sell at bid
* hold to expiry
Preliminary results were much more stable:
|Year|Trades|Avg Return on Collateral|Win Rate|Median|
|:-|:-|:-|:-|:-|
|2023|\~165|\+9%|\~70%|\+5%|
|2025|\~386|\+2%|\~66%|\+5%|
|2026|\~73|\+4%|\~82%|\+8%|
The return distribution looked more like classic premium selling:
* positive median trade
* high win rate
* occasional −30% to −45% losers
* much less dependent on rare moonshots than long call
Curious if anyone has worked with RTAT or similar retail-flow datasets. Does this sound like a reasonable direction? Any obvious pitfalls I’m missing, especially on the options side?