Options flow scanner
Reads the entire US equity options flow tape and highlights the few prints each day worth acting on.
Somebody buys a large options position aggressively, lifting the offer instead of resting a bid. That leaves a print, and a vendor (Unusual Whales) publishes those prints in near-real time: roughly ten thousand a day across US-listed equities. The claim under test is that some of this is informed (or otherwise well-placed) money, and that its footprint arrives early enough to follow.
The academic evidence on naive flow-following is skeptical, and friction at retail size is worse than the claim usually admits. At one contract, a 15% relative spread costs about 9% round trip; a 25% spread needs a move above 22% to break even. Seeing the whales is not the problem, since the prints are published on a schedule. The issue is sifting through the noise to identify the actionable trades.
Settling that takes more than an alert feed. Most of this system exists to record what was knowable at the instant each signal fired, so the question can be answered from data months later instead of argued from memory.
Bar length is the share of each step's input that survived it, not a share of the original ten thousand. Steps 1–5 test conviction; steps 6–7 test whether the contract was tradable at retail size when the alert fired. Open interest is the count of contracts outstanding, so an order bigger than all of it cannot be a close.
The same chain fired again at 11:28 with $5.3M more at the ask. By then the contract's mid had moved from 3.16 to 3.35, six percent more expensive in 98 minutes.
| Criterion | Max | This print | Why it counts |
|---|---|---|---|
| Order sizemin(premium / $1M, 3) × 2 | 6.00 | 6.00 | Bigger checks mean more conviction. Capped, so one giant print cannot buy the whole score. |
| Volume vs open interestmin(volume / OI, 5) × 1.5 | 7.50 | 7.50 | Day volume at a multiple of OI is new positioning, not existing contracts changing hands. |
| Aggression(ask-side share − 0.5) × 4 | 2.00 | 2.00 | Paying the offer signals urgency. Premium sold into the bid scores negative. |
| Alert rule+2 for the RepeatedHits family | 2.00 | 2.00 | Repeated aggressive fills on one contract inside a tight window: someone working an order. Here the ascending variant: each fill printed higher. |
| Order vs open interestmin(size / OI, 10) × 0.1 | 1.00 | 1.00 | This order alone against everything outstanding, not the day's accumulated tape. |
| Size vs the ticker's normsize / 30-day avg option volume, capped | 1.00 | 1.00 | 6,000 lots is noise in SPY and an event in a small name. Read from the prior session's baseline, never the same day's. |
| Order vs day volumesize / volume | 1.00 | 1.00 | One order carrying most of the volume rules out two-way churn behind the volume test above. This order was 38,541 of the day's 38,542. |
| IV change across the alertcapped at ±0.02, × 50 | 1.00 | 0.00 | Demand pushes implied vol. The weakest input: 72% of alerts show no change at all. |
| Multileg−3 if part of a spread | −3.00 | 0.00 | One leg of somebody's spread reads as directional and is not. |
| Score | 21.50 | 20.50 | Pushed as a phone alert at 12.47 and above. |
A $12.3M order that was the day's entire volume to that minute pins seven of the nine terms at their caps; the caps are what keep even this print from drowning the model.
The score above stops at the print. A person deciding whether to act keeps going: the dark pool tape, insider and congressional buying, the earnings calendar, short pressure, news, retail chatter, SEC filings, the rest of the day's flow on the ticker, and whether open interest confirms the next morning. Since Monday 17 August the system gathers that context itself and scores it the same way it scores the print: transparent capped terms, summed.
The context score is computed after the push decision and cannot influence it, so no amount of tuning here can flatter the measured results. A missing input contributes zero, never a penalty, and every source carries a coverage flag, so "the source had nothing" and "the source was never fetched" stay different facts.
| Criterion | Range | This print | Why it counts |
|---|---|---|---|
| Dark pool blocksmin($1M+ prints, 10) × 0.1 | 0 to 1 | 1.00 | Million-dollar prints crossing off-exchange the same session; IWM's tape had at least ten, the cap. |
| Insider net flownet 90-day premium / $10M, capped | −1 to 1 | 0.00 | Insiders net buying or selling their own name. An index fund has no insiders to file. |
| Congress buysmin(buys in 60 days, 3) / 3 | 0 to 1 | 0.00 | Congressional purchase disclosures in the ticker over two months. |
| Earnings in life+1 if the next report lands before expiry | 0 to 1 | 0.00 | A scheduled report inside the contract's life is a catalyst with a date. An index fund reports nothing. |
| Short pressure(short volume ratio − 0.45) × 4 | −1 to 1 | 0.96 | Short volume ran near 69% of IWM's tape against a 45% norm, heavy pressure in the put's direction. |
| News attentioncount, majors, sentiment; 3-day window | 0 to 1.5 | 0.00 | Headlines naming the ticker, major outlets flagged, vendor sentiment taken as sent. |
| Reddit attention0.5 presence + 0.5 × mention growth | 0 to 1 | 1.00 | Retail attention by mention count, present and growing day over day. One vendor's number, never a blend. |
| SEC filingsmin(material filings in 14 days, 3) / 3 × 0.5 | 0 to 0.5 | 0.00 | Material filings inside two weeks: 8-K, insider Form 4, 13D/G stakes and kin. |
| Same-day flowmin(other signals today, 5) / 5 | 0 to 1 | 0.20 | Other signals on the ticker the same day. The 11:28 second push above is this term. |
| OI confirmation+1 if OI rose next morning, −0.5 if it fell | −0.5 to 1 | 1.00 | Open interest printed 57,016 the next morning, up from 2,494. The opening claim held. |
| Context scoreten capped terms, summed | −2.5 to 10 | 4.16 | Shown beside the primary score wherever a signal appears. It never decides what gets pushed. |
At the 09:50 push this read 2.96: the second push had not happened yet and open interest publishes once a day. The next morning's pass counted both and settled the score at 4.16. Nine of eleven tracked sources had captured data; the two without any are flagged as uncovered rather than scored as if they had answered.
Below: Monday 17 August through Wednesday 19 August, tracking the move in the underlying from the price each alert fired at to later sessions' closes. Blue is with the bet, magenta against: seven of ten were with the bet at their latest mark. These are stock moves, not option returns.
| Fired | Signal | Score | Premium | +1d | +2d | +3d |
|---|---|---|---|---|---|---|
| Tue | IWM 293 put, 18 Sep | 20.50 | $12.3M | −0.1% | · | · |
| Mon | IBIT 20 put, 15 Dec 28 | 20.21 | $3.2M | +0.9% | +6.9% | · |
| Tue | SOXX 500 put, 11 Sep | 20.00 | $3.8M | −1.6% | · | · |
| Tue | IWM 293 put, 18 Sep · 2nd push | 18.98 | $5.3M | +0.2% | · | · |
| Tue | MU 935 call, 21 Aug | 17.64 | $2.8M | +0.4% | · | · |
| Mon | SPCX 105 put, 15 Dec 28 | 16.24 | $2.2M | −3.0% | −5.5% | · |
| Mon | IREN 44.5 put, 21 Aug | 15.21 | $0.6M | −6.0% | −4.1% | · |
| Mon | VIX 24 call, 16 Sep | 15.09 | $10.9M | +7.1% | 0.0% | · |
| Tue | MU 990 put, 19 Aug | 15.07 | $8.0M | −0.2% | · | · |
| Tue | TQQQ 62 put, 4 Sep | 15.04 | $0.3M | −0.7% | · | · |
Closes are the vendor's daily marks; a dot is a mark that lands beyond Wednesday, where this week's data ends. VIX's flat Wednesday counts with neither side. The shaded row is the worked example above.