Contracts traded each minute on each strike, with SPY above them. The purple triangles mark the biggest steady ramp-up in buying that also moved SPY, with other strikes on the same side ramping too. Click a bar to circle a minute you would buy that strike.
Each entry is the at-the-money option at the quote when the signal fires, about 2 seconds after its minute ends. Volume comes from Schwab's quote feed, which sends total volume changes and not each trade, so a signal can differ from what the tick data would show. Every message is saved in the day's folder.
Click a bar to circle it. Drag across to zoom, double-click for the whole day. The six are picked from 09:30–10:29 volume, so they are only known at 10:30 (shaded).
Share sizes come from Schwab's NYSE and Nasdaq book streams, which list each venue's quote (Arca, Nasdaq, Cboe and others), so this is each venue's best price and not every order queued behind it. Option sizes are each contract's best bid and ask from the quote feed; hover a size to see the same contract by exchange. Resting size shows what is displayed, and much of it is market makers quoting. None of this changes the signal, which uses 0DTE only.
Share jump = calls' share of all the volume over the last 5 minutes minus their share over the 15 minutes before; calls gaining = up, puts gaining = down. A a jump of 10+ points. B a jump bigger than 9 in 10 jumps seen at that clock time (±2 min) on the previous 20 days. C B, and the last 5 minutes' volume at least normal for that time (median of the previous 20 days). D a jump at least 2× today's average jump so far. All: 09:49–15:00, at most one per direction every 15 minutes.
All the volume: every 0DTE call and every put within $15 of the 09:30 open, contracts bought at the ask + sold at the bid (fixed at the open, so nothing is picked with hindsight). Running total: calls since 09:30 vs puts since 09:30; a signal when the leader changes. Each minute: that minute's calls vs puts; a signal every minute the leader changes. Signals 09:32–15:00. Entries only, no exit: how far SPY went the signal's way. Random = every minute of every day, both directions.
Calls 1.3× their own pace or more while puts are 0.7× or less = the up move is tiring → TURN DOWN, buy puts. Puts surging while calls fade = TURN UP, buy calls. Three versions: at B signal minutes, at A signal minutes, or any minute (one per direction every 15 minutes). First table: how often SPY went the turn's way. Second: 10 contracts sold after a fixed 5 / 10 / 15 / 30 minutes. Third: held like the other strategies (add on repeats, flip on an opposite turn, out at 15:30).
Volume exits (one 10-contract trade per turn, 60 minutes at most): other side wakes = the side that surged cools under its pace and then picks up again (1.3×); our burst ends = our side picks up (1.3×) and then drops back under 1.0×, or the other side surges again; our side slows = our side rises above 1.0× and then falls to 0.7×, or the other side surges again.
At each A–D signal, each side's last 5 minutes are compared with its own pace over the 15 minutes before: 1.3× or more = picked up, 0.7× or less = slowed. Calls picked up (puts didn't) = BUY CALLS ▲; puts picked up (calls didn't) = BUY PUTS ▼; calls slowed while puts stayed flat = SELL CALLS (close calls, buy nothing) S; puts slowed while calls flat = SELL PUTS S; both picked up = ◆ (hold, or buy a straddle: switch at the top); both slowed = ○ quiet, close everything. Trading: 10 at-the-money contracts per buy, adds with no limit, BUY on the other side closes the old side first, out at 15:30, live fills.
How each meaning did on its own, all 429 days, SPY 15 minutes later (for SELL: how often the closed side would have kept paying):
10 at-the-money contracts per signal at your live fills ($0.65 a contract each way): the first signal buys 10; a same-side signal adds 10 more (no limit); an opposite signal sells everything and buys 10 on the new side; anything left is sold at 15:30. "Sides reversed" = the same trades with calls and puts swapped. On the SPY chart (Show what happened) the number under each signal is the contracts held after it, and ✕ marks a sale (green made money).