IWM · Call + Put overnight: buy before the close, sell at the open
Every session, at the chosen minute between 15:30 and 16:15 New York, the page buys IWM options that expire on the next session, on strikes near the price, and sells them at the bid a few minutes after the next open. The position holds the after-hours, overnight and pre-market move. Every setting below is recalculated in the browser from frozen quotes.
Frozen NBBO quotes: entries 2026-01-02 — 2026-09-22, sales through 2026-09-23, nights: 181 · New York time · built 2026-09-24.
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
- 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 IWM 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: 12440 matched to the cent, size and timestamp, 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 IWM 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 IWM 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 IWM 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: 21).
- 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 period at $1000 a day with displayed sizes ignored: among the variants (side, purchase minute, strike, sale 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. The “Best variant” button searches again within the options chosen in the form (Call + Put, Call only or Put only) at the current period, position size, fee, freshness and filters. 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. One year of data: a rule that looks good here needs checking on other years and on future nights.
- Reproduction. The quote facts are rebuilt by
python -m scripts.build_call_put_overnight_page --symbol IWM; vendor responses are cached, so a rebuild makes no new requests. The page model matches an independent Python calculation to the cent.