QQQ · Deep ITM overnight: buy before the close, sell at the open

Every session, at the chosen minute between 15:30 and 16:15 New York (options on QQQ trade until 16:15, 15 minutes longer than the fund itself), the page buys the in-the-money QQQ option of the nearest expiry after that day whose strike + premium (a Put: strike − premium) equals the QQQ price within the tolerance (±0.02% by default), and of those the one whose strike + premium comes closest to the price (or, as chosen, the one nearest the money, with the most leverage). It is sold at the bid after the next open (09:31 by default), so the position holds the after-hours, the night and the pre-market. Every setting below is recalculated in the browser from frozen quotes.

Frozen NBBO quotes: purchases 07 Mar 2022 — 30 Dec 2022, sales through 03 Jan 2023, nights: 208 (left out: shortened sessions 1) · 117,612,458 option quotes read · New York time · built 27 Sep 2026. Option quotes exist from 7 March 2022, so 2022 starts in March.

Best variants by side

Every purchase clock, tolerance and formula price

lossprofit· click a cell to select that variant

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. Hover, or focus the chart and use the arrow keys; a click opens the night in the table.

Every night

How it is calculated
  • Data. For every night the page keeps the NBBO of in-the-money Calls and Puts of the nearest expiry after the purchase day, on a grid of strikes by depth from the price at 15:30 (the funds 0.25–7.5%, the stocks 0.5–20%), at each purchase minute and each sale minute: the last quote at or before that moment from the vendor the project’s archive comes from (Massive, the /v3/quotes history; one request per contract from 15:25 of the purchase day to 10:00 of the next session). The QQQ price at a minute is its last trade before that minute, from the project’s minute archive. The vendor has option quotes from 7 March 2022. Shortened sessions are left out: the options close earlier and the night is not the same trade.
  • Expiry. The nearest one after the purchase day, so the option lives through the night. Options on QQQ, SPY and IWM expire every session (in 2022 on Mondays, Wednesdays and Fridays); options on the stocks mostly expired only on Fridays until 2025, so the nearest expiry can be days away and the option then costs more for the time left. How many nights of this year end at an expiry on the next session is stated under the form.
  • Formula and pick. Overpay = strike + premium − price for a Call and premium − (strike − price) for a Put, as a percentage of the QQQ price at the purchase minute; the premium is the ask (what buying costs) or the middle of the quote, as chosen. The in-the-money options (a Call below the price, a Put above it) whose overpay is within ±tolerance fit. By default the page takes the one whose overpay is smallest, so strike + premium comes closest to the price (overpays within 0.01% of the price count as equal, and the one nearest the money wins); with "the most leverage" it takes the one nearest the money: the cheapest, so the most leverage (price ÷ premium), even when its overpay is at the edge of the tolerance. When none fits, the night is skipped or, as chosen, the option with the smallest overpay is taken (within 0.01% of the price, again the one nearest the money).
  • Purchase. At the ask of the NBBO standing at the purchase minute. The quote must be valid: the ask above zero and not below the bid, at least one contract on the ask, no older than 60 seconds. The shares stop trading at 16:00, options on QQQ at 16:15: purchases after 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 sale minute of the next 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, and the bid must cover the fee. At the open the bid of a deep in-the-money option is often below its intrinsic value (the QQQ price minus the strike for a Call, the strike minus the price for a Put, at that minute): the field “If the bid is below intrinsic value” either sells at the bid anyway (the default, a sale at the open) or exercises the option (they are American) at intrinsic value instead; the page counts how often the bid was lower and what the sale gave up. Contracts not sold at the bid — no such bid or, with displayed sizes respected, more than the bid size — are exercised at intrinsic value when it covers the fee; otherwise they count as $0 without a fee. When the vendor has no quote of the option posted after the open at any sale minute — a gap in its history, or an expiry that fell on a closed day — the night has no result and is left out of the totals.
  • Budget is split equally between the chosen legs: with Call + Put, half a day’s budget per leg; both legs are needed, a night without either is skipped. Contracts per leg = leg budget ÷ (ask × 100 + fee), whole contracts rounded down; with displayed sizes respected, no more than the ask size. A night whose leg budget buys less than one contract is skipped; how many and what one contract costs is stated under the form, with a budget that covers it and the “one contract per leg” sizing. 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 (or exercised); $0.65 by default.
  • The same in shares. For comparison: as many shares as the options cover (100 per contract; for a Put, sold short), bought at the price of the purchase minute and sold at the price of the sale minute, without fees or spread. The difference from the options is what the overpay, the spreads, the fees and the missing time value cost or earned.
  • 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, and the P&L of each month under the chart.
  • Best variant. The page opens on the best variant of the whole year at $1000 a day, a $0.65 fee, displayed sizes ignored, the strike closest to the formula, nights without a fitting strike skipped and a sale at the bid even below intrinsic value: among the variants (side × sale minute × formula price × tolerance × purchase minute) that trade on at least half of the nights, the one with the largest total without its three best nights, so that a few jumps cannot make it; ties go to the larger total. When no variant qualifies — usually because one contract costs more than the budget — the page opens on Call, the last purchase minute, 09:31, ±0.02% at the ask, and says why under the form. The “Best variant” button searches again within the options chosen in the form (Call + Put, Call only or Put only) at the current period, nights, position size, fee, sizes, strike rule, rule for nights without a fitting strike and rule for a bid below intrinsic value. The “Best variants by side” table gives each side’s pick by stability and by total. All of them 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, for deep in-the-money options especially. The best variant is chosen in-sample, on the year it is shown on: a rule that looks good in one year needs checking on the other years.
  • Reproduction. The nights are collected by python -B scripts/collect_deep_itm_overnight.py --symbols QQQ (one file per night; a night already on disk is not requested again), and the page snapshot is built from them without new requests by python -B scripts/build_deep_itm_overnight_page.py --symbols QQQ --years 2022. The browser prices every setting with public/static/deep-itm-overnight-model.js; money is counted in hundredths of a cent, so results are exact to the cent.