Options flow was never magic.
See the size the moment it prints. Whale Options watches every options trade, flags the sweeps, blocks, and split orders that matter, and scores each one with the math shown in full. Free, open source, on your own machine.
| 09:30:20 | BUY | AAPL C $205 09-04 | 35 @ 27.36 | $96K | 42* | |
| 09:30:23 | BLOCK | SELL | SPY C $650 09-04 | 2210 @ 2.52 | $557K | 47* |
| 09:30:23 | SWEEP | BUY | AMD C $162.5 09-18 | 983 @ 9.38 | $922K | 67* |
| 09:30:27 | MID | NVDA P $217.5 09-04 | 14 @ 27.55 | $39K | 11* | |
| 09:30:30 | BLOCK | SELL | AMD P $200 09-25 | 105 @ 35.07 | $368K | 38* |
| 09:30:33 | BLOCK | BUY | AMD P $155 09-04 | 279 @ 0.96 | $27K | 51* |
| 09:30:34 | BUY | SPY P $700 09-04 | 24 @ 54.81 | $132K | 45* | |
| 09:30:51 | SWEEP | BUY | NVDA P $187.5 09-25 | 1067 @ 7.89 | $842K | 72* |
| 09:30:53 | BUY | TSLA C $315 09-18 | 18 @ 33.46 | $60K | 45* |
· sweep: 6 legs across 6 exchanges in 312ms
· ISO-flagged legs corroborate an intermarket sweep
· aggressor buy: 9.38 at ask 9.38 (nbbo 9.22×9.38, 327ms old)
· cold start: 0/5 baseline sessions; score uncertainty is wider
* cold start: missing components report themselves and the remaining weights renormalize. The score never silently pretends it knew something it didn’t.
Real events · whale run --feed synthetic · the demo tape ships with the repo; no real market data appears anywhere in it
Three shapes of size.
A sweep is urgency, a block is conviction, a split is patience, and the engine never confuses them. Every print is judged against the live quote at the exact moment it happened, and when that quote can’t be trusted it says unknown instead of guessing.
Sweeps
2+ exchanges · 500 ms
Someone in a hurry: the same order racing across two or more exchanges inside half a second, stitched back together as one event.
Blocks
99.5th percentile
Size that is huge for this contract, judged against its own recent volume, with floors so quiet names can’t fake it.
Splits
4+ clips
The same order worked quietly over minutes, in four or more clips. Patience reads differently than urgency, and the engine keeps them apart.
shapes illustrative; thresholds are the engine’s own
A score you can audit.
One number, zero to one hundred, built from six ingredients you can see. If an ingredient can’t be measured it says so and drops out; nothing gets hidden in the weighting, and new contracts are flagged as new instead of quietly fudged.
volumeVsBaseline
day volume vs its own 20-session average, log-scaled
premiumVsBaseline
premium percentile in the underlying’s distribution
volOi
day volume over open interest; ratio above 1 flags likely opening flow
aggression
how it hit the NBBO: mid 0.2, at-quote 0.7, through-quote 1.0
urgency
short-dated plus out-of-the-money distance
repetition
same-contract, same-side recurrence this session
Deterministic replay
Same tape plus same config produces a byte-identical event stream, ids included. A tested property, not a slogan.
The flight recorder
Every tick is self-contained: NBBO, spot, and OI ride along, so any session can be replayed and audited. Replay never re-fires alerts.
Calibration, with caveats
whale audit measures recorded scores against forward moves of the underlying, never option P&L, and prints its caveats with every report.
Around the tape.
The context around the prints, computed from your own recorded data, with every assumption stated in the output.
Alerts as plain JSON.
Tell it what matters (ticker, kind, side, score, premium) and it pings you on Discord, Telegram, your desktop, or any webhook. Cooldowns are on by default so it never spams, and every webhook is signed so you can trust what arrives.
{ "id": "nvda-big-sweeps", "match": { "tickers": ["NVDA"], "kind": ["sweep"], "minScore": 75, "minPremium": 250000 }, "sink": { "type": "discord" }, "cooldownSec": 300}
Thirteen tools. One tape.
The MCP server runs against your own engine, live or recorded, so an agent can pull the top-scored events with their full breakdowns, open one event’s complete story, or replay a window under a new config and diff what changes.
whale_status
Live engine or recording? Tape depth, baseline warmth: the right first call.
whale_recent
The latest flow, filterable by ticker, kind, side, premium.
whale_top
Highest-scored events in a window, full component breakdowns attached.
whale_event
One event’s complete story: every leg, its sale conditions, the NBBO it was judged against.
whale_gex
The GEX ladder plus zero-gamma, sign convention stated in the payload.
whale_rules
List, add, and remove alert rules.
whale_replay
Re-run a stored window under the current config and diff against what was recorded.
whale_oi_deltas
Session-to-session open-interest change per contract, strike, and expiry.
whale_max_pain
Per-expiry max-pain strike, the static-not-prediction note carried in the payload.
whale_iv_rank
IV rank and percentile over recorded ATM-IV history, real window stated.
whale_net_flow
Net premium flow leaderboard per underlying; emitted events only.
whale_audit
Calibrate recorded scores against forward underlying moves, caveats always attached.
whale_short_volume
Cached FINRA daily short-sale volume; end-of-day context, local cache only.
Keys later. Tape now.
The synthetic feed is a seeded, plausible tape with injected sweeps, blocks, and ladders, so the whole engine runs before you hold any vendor key. Plug in a real feed when you’re ready; servers bind loopback by default.
Open the detection. It's just tape.
Just tape. All math.
MIT-licensed and self-host only: the engine phones home to no one, ever. No hosted mode, no order execution, no win-rate claims. Prints, classifications, and arithmetic, with the work shown.
MIT © LuxAlgo Global, LLC · self-host only · no telemetry, ever · contribute
Whale Options is an independent project by LuxAlgo, not affiliated with, endorsed by, or derived from any commercial flow platform. Classifications and scores describe prints, not intent; audit returns measure moves of the underlying, never option P&L, and a calibration table is a measurement of one recorded window, not a forecast and not trading advice.