So about that strategy I posted using QQQ options...
A reader (shoutout WS, thank you very much!) pointed out on July 10th that my linked backtests on Option Alpha they saw were very different from the ones I posted in a previous article the classic Opening Range Breakout strategy.
Returns for my version of a QQQ ORB were cut by more than half of what I'd initially found. This clearly wasn't just a small bug or rounding error. So I dug into Option Alpha backtests and the community to see what the issue was.
As it turns out, Option Alpha had a data leakage problem in their new ORB backtest detailed [here]
If you can't open the link, here's a screenshot summarizing the issue:
I wasn't too worried about slippage and errors with the initial strategy, since near-the-money QQQ options are liquid, and I'd only be trading a single contract. With a > 2 Profit Factor on a single leg'd long option, losing $1K on a $5K gain/year strategy would be annoying, but not deadly.
But now we've cut the hypothetical profitability by half, so I'm no longer that confident in the original strategy. Losing $1K on $2.5K gains/year isn't as comfy.
My first instinct is to just scrap the whole thing and admit defeat. Bad data, bad results. Garbage in, garbage out! I had another article and strategy I'd been working on that I wanted to release before July 21st...
However...
I've noticed that most of the time I'm doing the QQQ ORB in production over the past 2 weeks, the first 1-2 hours of a breakout are very profitable. sometimes making a a big 50%-100% return. But then the price reverts and hits the 25% stop-loss and I'm left with an annoying loss.
Now, trying to perfectly predict a top in a security price is a recipe for madness. But what if I did trailing stop losses instead? Once the trade is profitable by say, that initial buffer 25%, shouldn't we have 0% overall loss as the new baseline if things go bad? And keep moving up the trailing stop if the option continues to make money?
I had to try and model it myself. OptionAlpha doesn't have a trailing stop loss backtest option. I had nothing going on last weekend, sure. So it was time to grind out some code and backtesting.
The Results:
After some coding and compromises and a few late nights, I pulled data from Polygon and Financial Modeling Prep and got a decent backtest file going that I think replicates what OptionAlpha has. I have data since around 2022-01-01 to 2025-07-10 for QQQ stock and Options prices, and so I simulated what happens buying and selling a single contract intraday using the following rules:
Establish a 15-minute Opening Range from 9:30AM EST to 9:45AM EST using the High and Low prices of QQQ in that period.
When QQQ ends a 1-minute candle above the OR High, and VIX is down from the prior close, Buy a QQQ Call Option with a strike price at least $2 below the current QQQ price.
When QQQ ends a 1-minute candle below the OR Low, and VIX is down from the prior close, Buy a QQQ Put Option with a strike price at least $2 above the current QQQ price.
Set a 50% trailing stop for the call/put.
If the trailing stop doesn’t trigger a close for the trade before the end of the day, close the QQQ option at 3:55PM EST.
Since we're buying and selling our lone call or put on the Open of a 1-minute candle, I've tacked on $0.02 slippage for each entry and exit.
The 5-minute ORB was too small of a timeframe for options. No advantageous data leak means there’s no data edge here I guess, but that's okay. I chose a 15-minute ORB instead. (The strategy still works for 10 and 30-minute, but the 15-minute one's decent enough and feels like a high point.)
I'm thinking we can go for a more relaxed 50% stop loss than the normal 25% if we have a trailing loss, but close out at the end of the day just the same, about 5 minutes before markets close. There's probably some return to squeeze out of the last few minutes, but again we're being conservative with assumptions here.
The above charts show return comparisons for Regular (50% stop) QQQ ORB, a Trailing 50% stop version, and a No stops at all version for roughly 2 years of data. There is data as far back as 2022, and it shows drawdowns for the non-VIX filtered data. But there is not enough 1-minute VIX data available at the moment to do an apples-to-apples comparison.
Anyway, the code I wrote with trailing stops and a dropping VIX has a slightly better Sharpe and Sortino Ratio than the regular stops or no stops strategies. Even if it had comparable or slightly lower returns than the no-stops strategy, I'd probably choose the trailing losses version, because the sheer mental damage of watching a 100% gain turn into a 25% loss within an hour while running the QQQ ORB original strategy was pretty bad.
I tested this trade (no stops and 50% stops versions) for QQQ on my own backtester along with OptionAlpha's, and got similar results between them. So we're going to throw this into production again starting 7/15/2025 and see if things work out. I'm still going to use OptionAlpha to automate this strategy, since it has trailing stop features.
Here is a link for the code to the backtests.
- Lay Quant
With a stop-loss in place—what’s the point of using options then? You need to earn significantly more to offset the decaying premium and the typically worse bid/ask spread compared to something like QQQ.
If you're using options purely for leverage, have you considered testing the strategy with futures or leveraged ETFs instead?