QQQ Premarket Oversold Bounce — Backtest
Strategy 1099 · QQQ, long only · entries 04:00–09:30 ET on 15-minute bars · Jan 6, 2016 – Oct 23, 2026 · 100 shares per trade · paper account PA3PJANDI40H
Cumulative P&L
Cumulative net P&L for 100 shares, by exit date. The dashed line marks Jan 1, 2023: the rules were chosen on data to its left only. Prices are split- and dividend-adjusted, so early-year dollar amounts reflect QQQ's lower price then.
Rules
- Bars: 15-minute QQQ bars built from SIP 1-minute bars between 04:00 and 20:00 ET. Indicators: RSI(14), MACD(12,26,9) histogram, Bollinger Bands(20, 2), 20-bar volume average.
- Signal: RSI < 25 and a confirmation score of at least 1.5 (MACD histogram rising +1; close at or below the lower band +1, else at or below the middle band +0.5; volume at least 0.8× its average +1). The signal stays armed while RSI is below 35.
- Entry: buy 100 shares on the first bar that closes higher than the one before it, only if that bar closes between 04:00 and 09:30 ET (pre-market).
- Exit: at the close of any 15-minute bar from 04:00 to 20:00 ET when RSI > 60, or the close reaches the upper band, or the MACD histogram turns down with RSI > 55. No stop; a position can be held overnight.
- Fills in the backtest: the volume-weighted price of the minute after the signal bar closes, plus a per-side cost of 4¢ pre-market, 2.9¢ regular hours and 4.75–5.5¢ after hours. These costs are the quoted half spread plus a delay cost, calibrated so the original 1026 rules reproduce their real-quote result on 2025–2026 (−8.5¢ a share per round trip).
Median hold 4.8 hours; 32% of trades are held more than 6.5 hours, and the position is in the market 3.1% of the time. Exits: RSI 144, upper band 120, MACD fading 35.
In sample vs out of sample
| Period | Trades | Win rate | Avg / trade | Net P&L | Max drawdown |
|---|---|---|---|---|---|
| 2016–2022 (in sample) | 181 | 74% | +23.6 bp | $8,979 | $1,530 |
| 2023–2026 (out of sample) | 118 | 81% | +31.0 bp | $18,099 | $1,637 |
| Total | 299 | 77% | +26.5 bp | $27,078 | $1,637 |
Daily Sharpe ratio, idle days counted as zero: +1.26 in sample, +2.43 out of sample.
How the rules were chosen
This strategy came out of a study of strategy 1026 (QQQ mean reversion on 1-minute bars, 04:00–20:00 ET). With realistic fills, 1026's own rules lose money in every period, so 11,520 variations were tested: bar length (1, 5, 15 min), RSI threshold, entry session, stop, exit rule, time limit, overnight holding, a trend filter and up-bar confirmation. Only 428 were profitable in 2016–2022. The rules above had the best 2016–2022 Sharpe ratio; 2023–2026 was not used to choose them.
| Same fill model, 2016–2026 | Trades | Avg / trade | Net P&L (100 sh) | Sharpe in / out |
|---|---|---|---|---|
| Original 1026 rules (1-min bars, all sessions, 0.2% stop) | 8,852 | -3.0 bp | -$69,234 | -4.48 / -1.15 |
| This strategy | 299 | +26.5 bp | $27,078 | +1.26 / +2.43 |
Checks against luck
- Market drift. QQQ rose about 19.6% a year over the sample, which explains about 2 bp of each trade over these holding times, against +26.5 bp earned.
- Random entries. 300 sets of random pre-market entries with the same exits and costs averaged -1.5 bp a trade (best 1%: +6.2 bp). None did as well as the signal.
- Real quotes. The 62 trades from 2025–2026 were re-priced at the actual bid and ask one second after each signal (buy at the ask, sell at the bid): +231¢ a share per trade, $14,319 for 100 shares, against +231¢ in the bar model. Median spread at entry 6¢, at exit 3¢.
- Selection. With 11,520 variations tested, a 2016–2022 Sharpe of 1.26 could arise by luck alone. The evidence is the out-of-sample period, the checks above, and the neighbouring settings below, all of which stayed profitable from 2023 on.
Cost sensitivity
| Costs | Sharpe 2016–22 | Sharpe 2023–26 | Avg 2016–22 | Avg 2023–26 |
|---|---|---|---|---|
| No costs | +1.46 | +2.54 | +27.5 bp | +32.6 bp |
| 1× costs | +1.26 | +2.43 | +23.6 bp | +31.0 bp |
| 2× costs | +1.07 | +2.33 | +19.8 bp | +29.4 bp |
| 3× costs | +0.86 | +2.22 | +15.9 bp | +27.8 bp |
Neighbouring settings (one change at a time)
| Change | Sharpe 2016–22 | Sharpe 2023–26 | Trades | Avg 2023–26 |
|---|---|---|---|---|
| 5-minute bars | -0.24 | +1.11 | 920 | +5 bp |
| 30-minute bars | +0.38 | +1.46 | 152 | +41 bp |
| RSI < 20 | +0.79 | +1.52 | 113 | +29 bp |
| RSI < 30 | +0.53 | +0.78 | 541 | +9 bp |
| 2% stop | +1.02 | +2.00 | 304 | +36 bp |
| 1% stop | +0.89 | +1.54 | 311 | +28 bp |
| Exit at RSI > 50 | +0.71 | +1.42 | 300 | +19 bp |
| Exit at middle band | +0.72 | +1.61 | 305 | +16 bp |
| Pre-market + after-hours entries | +1.20 | +2.22 | 348 | +27 bp |
| All-session entries | -0.40 | +0.41 | 636 | +5 bp |
| No up-bar confirmation | +0.97 | +1.87 | 275 | +26 bp |
| Flat every night | +1.11 | +1.30 | 304 | +29 bp |
Results by year
| Year | Trades | Win rate | Avg / trade | Net P&L | Max drawdown |
|---|---|---|---|---|---|
| 2016 | 14 | 64% | +8.9 bp | $97 | $207 |
| 2017 | 18 | 83% | +10.2 bp | $245 | $206 |
| 2018 | 35 | 77% | +23.2 bp | $1,252 | $446 |
| 2019 | 25 | 68% | +7.2 bp | $309 | $604 |
| 2020 | 22 | 91% | +79.7 bp | $3,790 | $263 |
| 2021 | 27 | 67% | -1.4 bp | -$170 | $1,530 |
| 2022 | 40 | 70% | +31.5 bp | $3,457 | $1,041 |
| 2023 | 29 | 83% | +32.9 bp | $2,957 | $634 |
| 2024 | 27 | 70% | +8.0 bp | $815 | $1,637 |
| 2025 | 29 | 97% | +54.2 bp | $8,396 | $160 |
| 2026 | 33 | 73% | +27.7 bp | $5,932 | $595 |
Worst trades
| Entry | Exit | Return | P&L |
|---|---|---|---|
| 2024-07-24 09:00 | 2024-07-25 09:00 | -211 bp | -$989 |
| 2022-08-19 05:45 | 2022-08-23 10:15 | -300 bp | -$953 |
| 2021-01-27 08:15 | 2021-01-28 07:15 | -249 bp | -$785 |
| 2021-03-03 09:00 | 2021-03-04 09:00 | -243 bp | -$743 |
| 2024-01-02 07:00 | 2024-01-04 04:15 | -172 bp | -$689 |
Risks
- Few trades. About 28 a year, so a year of live results is a small sample, and returns are lumpy: 2020, 2022 and 2025 made most of the money, and 2021 lost slightly.
- No stop. Positions are held until an exit signal, sometimes for days. The worst trade lost 3.0%. A 2% stop did not reduce the worst losses, which came from overnight gaps.
- Pre-market fills. Entries happen as early as 04:00, when QQQ trades thinly. Before 2020 pre-market liquidity was lower than the cost model assumes.
- Selection. The rules are the best of 11,520 tested variations; out-of-sample results are usually weaker than the backtest.
Generated Oct 29, 2026 from python_trading/qqq_premarket/research/ on the MT4 server. Trade list: qqq_premarket_oversold_bounce_1099_backtest.csv.