QQQ · A Call overnight on RSI nights, 2023–2026
A copy of the overnight test over four years with one more setting: the position is bought only on nights whose daily RSI is within the chosen range (by default RSI(14) of at least 70). At the chosen minute between 15:30 and 16:15 New York the page buys QQQ options that expire on the next session and sells them at the bid a few minutes after the next open. Every setting below is recalculated in the browser from frozen quotes.
Frozen NBBO quotes: entries 2023-01-03 — 2026-09-22, sales through 2026-09-23, nights: 933 (2023: 250, 2024: 252, 2025: 250, 2026: 181) · New York time · built 2026-09-25.
By year
Best variants by side
Every entry clock and strike
Cumulative result
Starts from zero on the first night of the period; nights without an entry leave it unchanged. It sums trade P&L and is not an account balance. Each point is dated by the purchase day. Dots between the panels mark nights after an earnings report from the basket below. Hover, or focus the chart and use the arrow keys; a click opens the night in the table.
Every night
How it is calculated
- RSI. Wilder’s RSI on daily closes, the way a daily chart shows it: RSI(14) is the standard, RSI(2) a short-term gauge. The closes are the regular-session closes of the project’s five-year volatility history (minute data from September 2021, so the RSI is long warmed up by 2023). A purchase before 16:00 uses the QQQ price of the purchase minute in place of that day’s close, which is what a live chart shows at that moment; from 16:00 on, the session’s close. A night is traded only when that RSI is within the range in the form, bounds included; the other nights are shown as skipped. These minute-data closes differ from the official closes by 6 cents on average, so the RSI differs from one on official closes (Yahoo) by 0.07 points on average for RSI(14) and 0.3 for RSI(2). RSI inputs run through 2026-09-24.
- Data. For every night the page stores the NBBO of each chosen option at the entry clock and at every exit clock: the last quote at or before that moment from the market-data vendor the project archive is built from (Massive, the /v3/quotes history). The project archive keeps same-day expiries only, so it cannot supply the purchase: the evening before, these options still have a day to run. Their listed strikes come from the archive of the expiry session, and the QQQ price is the archive’s last completed minute. Check: by the morning these options are same-day expiries, and wherever the archive kept their quote stream, the sale quotes were compared with it: 2023 — 17504 matched, 0 differed; 2024 — 17904 matched, 0 differed; 2025 — 17600 matched, 0 differed; 2026 — 12320 matched, 0 differed.
- Expiry. The next session after the purchase day: on Friday it is Monday, before a holiday the first session after it. “Nights” can separate these longer nights, whose options cost more because more time is left.
- Strike. Chosen from the QQQ price at the purchase minute. OTM: the Call is the nearest listed strike strictly above the price, the Put strictly below; ITM is the reverse. “+N steps” moves N listed strikes further in the same direction.
- Purchase. At the ask of the NBBO standing at the purchase minute. The quote must be valid, the ask at least $0.01 with at least one contract displayed, and no older than the chosen limit. Stocks stop trading at 16:00, while options on these ETFs trade until 16:15: purchases from 16:00 happen in those last minutes, and 16:15 buys at the last quote of the options session.
- Sale. At the bid of the NBBO standing at the exit minute of the expiry session; 09:31 is the quote at the end of the first minute after the 09:30 open. The quote must have been posted after the open. A bid that does not cover the fee is not taken. Contracts that are not sold — no such bid or, with displayed sizes respected, more than the bid size — are exercised at intrinsic value from the QQQ price at that minute when it covers the fee; otherwise they expire at $0 without a fee.
- Holding to expiry. Optional. “Hold that option”: an option whose sale at the chosen minute would not make money (proceeds, fee deducted, no more than the money spent on it) is not sold; the others are sold as usual. “Hold the whole position”: every leg is kept when the whole position would not make money. A kept option is valued on the expiry day at intrinsic value from the QQQ price at 16:15, when options on these ETFs stop trading, or at 17:25, before the 17:30 exercise cut-off (the project’s after-close rule: a minute price no older than 4 minutes), with the fee when that covers it; otherwise it expires worthless. After 16:00 the shares from an exercise have to be closed after hours, which depends on the broker.
- Budget is split equally between the selected legs: with Call + Put, half a day’s budget per leg. Contracts per leg = leg budget ÷ (ask × 100 + fee), rounded down; with displayed sizes respected, no more than the ask size. The page opens with $1000 a day and also shows the return on capital: the budget plus the largest drawdown, and that result scaled to 252 sessions a year without compounding.
- Fees are charged for every contract bought and sold (and exercised).
- Earnings. The project research basket: AAPL, MSFT, NVDA, AMZN, META, Alphabet, TSLA, AVGO, AMD, MU. All of them publish results after the close, so the move they cause falls inside the night; the dates come from the Nasdaq calendar saved in the project (nights in the period: 112).
- Stability. Besides the total, the page shows how many calendar months ended in profit, on what share of the nights the running total stood above zero, the total without its best night and three best nights, the P&L of each month (of each year when the period spans several) under the chart, and every year side by side with and without the RSI filter.
- Best variant. The page opens on the variant of the original test it was copied from: a Call bought at 16:05, OTM +3 steps, sold at 09:31, $1000 a day. The “Best variant” button searches, within the options chosen in the form, among the variants (purchase minute, strike, sale minute) that trade on at least half of the nights the filters leave (RSI included), for the largest total without its three best nights; ties go to the larger total. It also fills the “Best variants by side” table. They are picked on the same nights their results come from, so those results are overstated.
- Limits. Quotes do not prove fills; latency, queue position and slippage are not modeled, and at the open spreads are wider than during the day. A range that looks good on these four years, picked on the same nights, still needs checking on future nights.
- Reproduction. The quote facts are rebuilt by
python -m scripts.build_call_put_overnight_page --symbol QQQ --year 2023(and 2024, 2025; the current year without --year), the RSI inputs bypython -m scripts.build_call_put_overnight_rsi_page; vendor responses are cached, so a rebuild makes no new requests. The page uses the model of the original test, which matches an independent Python calculation to the cent.