SPY · Deep ITM 0DTE: buy at 09:35, sell at 16:10 or exercise at 17:25

On every session when SPY has an expiry that same day, at 09:35 New York the page buys the in-the-money SPY option expiring that day whose strike + premium (a Put: strike − premium) equals the SPY price within the tolerance, 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). Such an option has almost no time value left, so it moves like the shares, while the loss cannot exceed the premium paid. It is closed the same day: sold at the bid at 16:10 (options on SPY trade until 16:15, 15 minutes longer than the fund itself), or exercised at 17:25 at the intrinsic value from the SPY price then. The daily budget is about $10,000: the number of contracts whose cost comes nearest to it, even when that is a little more. Every setting below is recalculated in the browser from frozen quotes.

Frozen NBBO quotes: 03 Jan 2023 — 29 Dec 2023, sessions with a same-day expiry: 245 (not traded: no expiry that day 3, shortened sessions 2) · 10,495 option quotes at 09:35 · New York time · built 30 Sep 2026.

Best variants by side

Every exit, strike rule, tolerance and formula price

lossprofit· click a cell to select that variant

Cumulative result

Starts from zero on the first session of the period; sessions without an entry leave it unchanged. It sums trade P&L and is not an account balance. Hover, or focus the chart and use the arrow keys; a click opens the session in the table.

Every session

How it is calculated
  • Data. For every session with a same-day expiry the page keeps the NBBO at 09:35:00 of every listed in-the-money Call and Put of that expiry from the money to 5% deep, from the SPY price at 09:35: the last quote at or before that moment from the vendor the project’s archive comes from (Massive, the /v3/quotes history). For the contracts some setting can buy it also keeps the NBBO at the sale minute. The SPY 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.
  • Expiry. The same session: 0DTE. A session without a same-day expiry (by the vendor’s list of contracts) is not traded and stays out of the table. Options on SPY expire every session since late 2022; before that on Mondays, Wednesdays and Fridays.
  • Formula and pick. Overpay = strike + premium − price for a Call and premium − (strike − price) for a Put, as a percentage of the SPY price at 09:35; 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, even when its overpay is at the edge of the tolerance. When none fits, the session is skipped or, as chosen, the option with the smallest overpay is taken.
  • Leverage = the SPY price at 09:35 ÷ the option’s ask: how many dollars of shares one dollar of premium moves like. The table shows it for every session together with the value of the shares the contracts stand for (100 per contract).
  • Purchase. At the ask of the NBBO standing at 09:35:00. 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.
  • Sale at 16:10. At the bid of the NBBO standing at that minute, when it is no older than 5 minutes and covers the fee. The shares stop trading at 16:00, options on SPY at 16:15, so at 16:10 the option still has a market. The bid of a deep in-the-money option is often below its intrinsic value (the price minus the strike for a Call, the strike minus the price for a Put): the field “If the bid is below intrinsic value” either sells at the bid anyway (the default) or exercises the option (they are American) at intrinsic value from the SPY price at that minute. Contracts not sold at the bid 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 since 15:00 at all, the session has no result and is left out of the totals.
  • Exercise at 17:25. Until 17:30 New York the holder of an expiring option decides whether to exercise it, whatever the 16:00 price was. The page exercises at 17:25 when the intrinsic value from the SPY price then (its last trade before 17:25, in the evening session) covers the fee, and counts that value: the shares delivered at the strike are taken as sold (a Put: bought back) at that price, without the shares’ spread or fees. When the option is out of the money at 17:25 it expires at $0 and the premium is lost.
  • Budget is split equally between the chosen legs: with Call + Put, half a day’s budget per leg; both legs are needed, a session without either is skipped. Contracts per leg: the whole number whose cost (ask × 100 + fee each) comes nearest to the leg budget, above or below it; with displayed sizes respected, no more than the ask size. A session where even one contract costs more than twice the leg budget is skipped. The page opens with $10,000 a day and also shows the return on capital: the budget plus the largest drawdown.
  • 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 09:35 price and sold at the price of the exit minute, without fees or spread. The difference from the options is what the overpay, the spreads, the fees and the capped loss cost or earned.
  • Best variant. The page opens on the best variant of the whole year at $10,000 a day, a $0.65 fee, displayed sizes ignored, the strike closest to the formula and sessions without a fitting strike skipped: among the variants (side × exit × formula price × tolerance and, for the sale at the bid, selling or exercising when the bid is below intrinsic value) that trade on at least half of the sessions with a same-day expiry, the one with the largest total without its three best sessions, 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 at the current settings. All of them are picked on the same sessions their results come from, so those results are overstated.
  • Limits. Quotes do not prove fills; latency, queue position and slippage are not modeled, and five minutes after the open spreads are still wider than later in the day. Buying tens of contracts at once can take more than the displayed ask size. 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 sessions are collected by python -B scripts/collect_deep_itm_0dte.py --symbols SPY (one file per session; a session 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_0dte_page.py --symbols SPY --years 2023. The browser prices every setting with public/static/deep-itm-0dte-model.js; money is counted in hundredths of a cent, so results are exact to the cent.