Method
How Hypercast works
Every day at 00:00 UTC Hypercast reads the open positions of the biggest Hyperliquid accounts, turns them into a call per asset, seals it with a public hash, and scores it against the real price 24 hours later. Hypercast never trades and holds no one's money. It is not affiliated with Hyperliquid.
Who's a whale
- At 23:30 UTC, Hypercast walks the public leaderboard by account value.
- It drops vaults, sub-accounts and agent wallets (Hyperliquid's own userRole answer), protocol and system accounts such as HLP (each listed with its reason in excluded.json, and HLP's child vaults re-read daily), and accounts with no open position in any of their last 7 snapshot reads.
- The first 200 that remain are that day's whales. On 2026-10-30 only 71 of the top 300 by account value held any perp position (the leaderboard counts spot and staked balances), so the walk goes as deep as it needs to (up to 1,500 accounts) to find 200.
- Whales are shown by address, plus the leaderboard name only when the account set one itself. No guessed identities. Entries and exits are public on /whales.
How the call is made
- Assets: SOL, HYPE, BTC and ETH always, plus the 16 perps with the most open interest at 23:30 UTC.
- Between 23:55:00 and 23:59:59 UTC every whale's positions are read once (the read time is recorded). A whale that fails to load is listed as missing, never filled in.
- Per asset: long and short notional (size × mark at the read time), net% = (long − short) / (long + short) × 100, whales long / short / flat, conviction (notional-weighted leverage) and the 5 biggest positions per side.
- Positions under $10K are ignored: they count as no position, in the whale counts, the sums and each whale's calls. The board and the API show how many were ignored per asset (dustLong / dustShort in /api/board).
- Every headline, title, card and alert uses the call's own number, net % by notional ("SOL 15% net short"). A count of whales is always labeled as a count ("29 of 49 whales short").
- Long at net% ≥ +10, short at ≤ −10, flat in between. No call with fewer than 5 whales holding a position or under $5M gross.
- At 00:00:00 UTC the calls are frozen into a canonical JSON payload (every asset, every position used, read times, the missing list), hashed with SHA-256 and published before 00:01. The database refuses edits and deletes of calls. Verify any day in your browser.
How it's scored
- p0 = the close of the 1-minute candle that ends at 00:00 UTC on the call date (the last trade before the freeze); p1 = the same 24 h later; move% = (p1 / p0 − 1) × 100.
- A long call hits above +0.5%, a short call below −0.5%; the opposite is a miss; within ±0.5% it's a push, which counts as neither. A flat call hits within ±0.5% and misses outside it. No call: not scored.
- Every whale's own position in each asset at the snapshot is its own call, scored the same way: that's each whale's record, the "callers" and the "sizers".
- Strength buckets: hit rate by |net%| in 10–25, 25–50 and 50–100, to see whether stronger agreement means better calls.
- Corrections only for real data errors (a re-read of the same candles that disagrees), publicly, with the old and new values. Never to improve the record; the calls and their hash never change.
The baselines
- Always long: what crypto usually rewards.
- Yesterday's direction: the previous day's move as the call (momentum).
- Fade the whales: the opposite of every call (for a flat call: "it moves").
- All are scored on the same asset-days. If the whales don't beat them, /record says so.
The trader tools
- Liquidation map: each position's current liquidation price, bucketed every 0.5% (log) around the mark. Longs below, shorts above; a cluster is $10M+ in adjacent buckets. Cross-margin liquidation prices move with the whole account, so it's an estimate refreshed every 2–10 minutes. Positions with no liquidation price are counted apart.
- Cost basis: the size-weighted average entry of each side, the share in profit and the side's unrealized PnL.
- Alerts: Web Push from Hypercast's own server (VAPID), plus an Atom feed per asset.
- Solana first: SOL and HYPE lead every list; coins whose main Solana pool is quoted in HYPE are listed on /solana.
The backfill
So day one isn't empty: for the top 50 whales, positions at each of the 7 snapshots before the first live one are rebuilt from their fills (signed fills summed per coin, back from the current position), only where the fill history covers the whole window and every fill reconciles. Those days are labeled "reconstructed from fills (backfill)", have no hash, are scored the same way, and are kept out of the live hit rate (a toggle on /record, off by default).
What can go wrong
- Partial reads: a whale that doesn't load in the window is missing that day; the call is made from the rest, and the missing list is in the payload.
- Hedges across venues: a whale short here may be long elsewhere. Hypercast only sees Hyperliquid, so a "short" can be half of a hedge.
- Closed seconds after the snapshot: a position read at 23:57 may be gone at 00:01. The call is what the whales held at the read, not what they did next.
- Size isn't skill: the biggest accounts include market makers and funds whose positions aren't directional bets. That is exactly what the record measures.
- Shared rate limits: Hyperliquid limits requests per IP and Cloudflare's addresses are shared. Hypercast budgets half the published limit, backs off on 429s and opens a circuit breaker; /status shows it.