← Data catalog

Positioning & flow (hourly)

Pro
gold_positioning_1h

hourly snapshots, partitioned per (coin, month)

gold_positioning_1h is hourly Hyperliquid open-interest and positioning data, derived from the full two-sided perp ledger — total open interest, long-vs-short account skew, per-side concentration, whale-cohort net position, and the taker flow behind each change. Download the history as Parquet or query it through the Tessera API.

Hourly Hyperliquid positioning aggregates derived from the full two-sided perp ledger: open interest, head-count asymmetry, per-side concentration, whale-cohort net position, snapshot-to-snapshot attribution, and a taker-flow rollup. Because the ledger is a closed system (every long is someone's short), the signal lives in asymmetries — who is crowded, who is concentrated, who is big — not in a net total.

What you'd use it for: Tracking open-interest trends, gauging crowded or concentrated positioning, and spotting squeezes and capitulations from whale and taker-flow shifts.

Open interest (BTC) · BTC · sample

Whale net position · BTC · sample

Data dictionary

Core aggregates

Column Type What it means
time timestamp[us] The hour this positioning snapshot was taken (UTC).
coin string Which market this row is for.
open_interest float64 Total size of open positions in the market — how much risk is on the table. Rising OI means new money committing; falling OI means positions being unwound. How it's computed: Two-sided open interest = (long_oi + short_oi)/2. long_oi == short_oi by the ledger identity, so this is the single OI figure.
n_long_positions uint32 How many wallets are currently holding a long.
n_short_positions uint32 How many wallets are currently holding a short.
n_unique_users uint32 How many distinct wallets have a position at all — the breadth of participation.
account_ls_ratio nullable float64 Long accounts divided by short accounts. Above 1 means more wallets are long than short (crowd leaning long by head-count). Extreme readings often mark crowded, vulnerable positioning. How it's computed: n_long_positions / n_short_positions — the long/short *account* ratio (crowd direction by head-count). NULL when no shorts.
top10_long_share nullable float64 How much of the long side is held by its ten biggest accounts — high means the longs are a few whales, not a broad crowd.
top10_short_share nullable float64 The same concentration measure for the short side.
concentration_skew nullable float64 Whether shorts or longs are the more concentrated side (short share minus long share). Positive means the shorts are the whale-heavy side — the ones more prone to a squeeze. How it's computed: top10_short_share - top10_long_share; >0 when shorts are more concentrated than longs. NULL when either side is empty.
hhi_gross nullable float64 A standard market-concentration score over all exposure — high when a handful of accounts dominate the whole book. How it's computed: Herfindahl–Hirschman concentration index over gross exposure.
whale_net_position float64 The net direction of the biggest accounts (top 10% by size). Positive means the whales are net long. This survives the zero-sum ledger because it's a sub-group, so it's a genuine 'smart money' tilt signal. How it's computed: Net signed szi of the top 10% of accounts by |szi| (the whale cohort). Signed: >0 = whales net long. Non-degenerate because it sums over a sub-population, not the whole zero-sum ledger. Divide by open_interest for an OI-relative skew.
whale_long_account_share nullable float64 What fraction of the whale cohort is on the long side, by head-count. How it's computed: Fraction of the whale cohort net long, by head-count. NULL when empty.
n_whale_accounts uint32 How many accounts make up the whale cohort this hour (the top 10% by position size). How it's computed: Whale cohort size = ceil(0.10 * n_unique_users), floored at 1 when non-empty.

Attribution — what changed since the previous snapshot

Head-count deltas versus the prior hour: how many wallets opened, closed, or flipped sides. This is the raw churn behind the positioning change — useful for telling a quiet drift apart from a violent reshuffle.

Column Type What it means
d_open_interest float64 Change in open interest since the previous snapshot — net risk added or removed over the hour.
n_new_longs uint32 Wallets that opened a fresh long this hour.
n_new_shorts uint32 Wallets that opened a fresh short this hour.
n_closed_longs uint32 Wallets that closed a long this hour.
n_closed_shorts uint32 Wallets that closed a short this hour.
n_flipped_l2s uint32 Wallets that flipped from long to short — a sentiment reversal, one wallet at a time.
n_flipped_s2l uint32 Wallets that flipped from short to long.

Taker-flow rollup — aggressive flow over the hour

Column Type What it means
aggressor_delta_1h nullable float64 Net aggressive buy-minus-sell pressure summed over the hour — the hourly version of CVD's slope. How it's computed: Σ aggressor_delta over the window — net taker buy−sell pressure (windowed CVD).
net_taker_open_1h nullable float64 Net new aggressive directional risk: long opens minus short opens by takers. The single headline 'which way is the aggressive money leaning' number for the hour. How it's computed: Σtaker_open_long_vol − Σtaker_open_short_vol — net aggressive new directional risk. The headline signed positioning-flow figure.
oi_opened nullable float64 Aggressive volume that opened positions this hour — flow-implied risk coming on. How it's computed: Σtaker_open_long_vol + Σtaker_open_short_vol — flow-implied OI added.
oi_closed nullable float64 Aggressive volume that closed positions this hour — flow-implied risk coming off. How it's computed: Σtaker_close_long_vol + Σtaker_close_short_vol — flow-implied OI removed.
flow_vs_snapshot_oi_residual nullable float64 The gap between the OI change we saw and the OI change taker flow can explain. What's left is mostly the maker side — passive positioning you can't see directly in the trade tape. How it's computed: d_open_interest − (oi_opened − oi_closed). Reconciles snapshot ΔOI against flow-implied ΔOI (flips folded in); residual ≈ maker-driven OI, unobservable from taker fills.
taker_flip_l2s_1h nullable float64 Aggressive long-to-short flip volume — a capitulation tell (longs giving up and flipping). How it's computed: Aggressive 'Long > Short' flip volume (close-long + open-short legs) — capitulation signal.
taker_flip_s2l_1h nullable float64 Aggressive short-to-long flip volume — a squeeze tell (shorts giving up and flipping). How it's computed: Aggressive 'Short > Long' flip volume (close-short + open-long legs) — short-squeeze signal.

Provenance

Column Type What it means
bootstrap_source string Housekeeping flag for how the first row of the month was seeded from the prior month. Ignore unless auditing continuity.