Read open interest spikes, avoid the most common misread, and see how the official strategy trades it in reverse.
A big block lights up on the overview heatmap. Are whales piling into longs? Whale Hunter tells you how unusual the open interest and volume move is. Direction is a separate question, and it is where most people misread the indicator.
Whale Hunter (WH) is Blave's proprietary positioning-shift indicator. It measures how unusual perpetual futures open interest (OI) and volume are within the timeframe you choose, compared with the coin's usual level. It has two scores:
| Score | What it looks at | How to read it |
|---|---|---|
score_oi | Change in open interest within the window | Positive = OI rose more than usual over the period, usually a net increase; negative = fell more than usual, usually a net decrease |
score_volume | Volume within the window — the level of volume, not its change | Positive = busier than usual; negative = quieter than usual, which does not mean volume is falling |
No upper or lower bound: around 0 is the normal level, and the larger the absolute value, the more unusual. Beyond ±2 is rare and beyond ±3 extreme, on the same scale for every coin. Scan your thresholds with a backtest. For a coin that keeps adding positions for a long time, adding is its usual, so the value does not stay high. Data Studio's status badges use these thresholds (score_oi as the example):
| Value | Data Studio badge | Meaning |
|---|---|---|
| ≥ +3 | Overly Increased | OI rising far more than usual, an extreme reading |
| +2 ~ +3 | Substantially Increased | Net OI increase clearly above the norm |
| +0.5 ~ +2 | Increased | Net OI increase above the norm |
| −0.5 ~ +0.5 | No label | About the same as usual |
| ≤ −0.5 | Decreased / Substantially / Overly Decreased | Mirror of the positive side at −0.5, −2 and −3: OI is being closed out faster than normal |
The sign of Whale Hunter only tells you how unusual the OI or volume move is. It has no direction. Rising OI means new positions were opened, but those can be longs or shorts. To judge direction, go back to price, or pair WH with a directional indicator such as Holder Concentration.
The "whale" in the name is a metaphor. It looks at the market-wide total and cannot see individual accounts, so it cannot tell a few big players from a crowd of retail traders.
score_oi drops below −0.7 (OI flushed out unusually hard) and goes flat once it recovers above 0.2. Long only. Backtest shown in the Blave strategy library (2023-01-01 to 2026-07-13, 0.05% fee per side): 268.17% total return, Sharpe 1.46, max drawdown −22.5%, MCPT significance test p = 0.005. Chasing big blocks, by contrast, has no verified strategy behind it today.Of the three uses below, only the first maps to a listed official strategy that passed the library checks. The other two are sketches of how to combine signals: not backtested, so verify every threshold yourself.
The logic is simple. When the 24h net OI decrease becomes unusual (score_oi < −0.7), a large share of positions was closed in that window. The strategy goes long, then exits to flat once the score recovers above 0.2. This is the signal function of the official btc_whale_1h strategy:
ENTRY_TH = -0.7
EXIT_TH = 0.2
def compute_signals(df, entry_th=ENTRY_TH, exit_th=EXIT_TH):
# df['WH'] = BTCUSDT 24h score_oi, read on every 1h bar
signal = pd.Series(np.nan, index=df.index)
signal[df['WH'] < entry_th] = 1.0 # OI flushed out -> go long
signal[df['WH'] > exit_th] = 0.0 # score recovers -> go flat
return signalENTRY_TH = -0.7 and EXIT_TH = 0.2 come from a parameter scan plateau, not a guess: entry thresholds from −1.3 to −0.6 and exit thresholds from 0.0 to 0.3 all sit in the robust zone, and the plateau Sharpe is 0.884 of the chosen point's Sharpe.
Blave's own site alerts use this condition: when the 1h score_oi and score_volume are both above 2, the alert reads "open interest and trading volume surged". Use it as a screen for coins where something is happening:
oi = fetch_whale_hunter(SYMBOL, INTERVAL, START, END, hdrs,
timeframe='1h', score_type='score_oi')
vol = fetch_whale_hunter(SYMBOL, INTERVAL, START, END, hdrs,
timeframe='1h', score_type='score_volume')
# both scores > 2: same condition as the site alert
active = (oi['alpha'] > 2) & (vol['alpha'] > 2)This is a screen, not an entry signal: it gives no direction and has no backtest. To trade it, add at least one directional check and run your own backtest.
Since WH carries no direction, a natural pairing is to let it answer "is something unusual happening?" and hand the entry decision to a directional indicator, such as Holder Concentration. The structure below is a sketch; replace compute_direction_filter with your own condition:
wh_active = df['WH'] > 2
direction_ok = compute_direction_filter(df) # e.g. a Holder Concentration condition
signal = pd.Series(np.nan, index=df.index)
signal[wh_active & direction_ok] = 1.0
signal[~wh_active] = 0.0This combination is not backtested, and the threshold of 2 is simply borrowed from the site alert. Scan the parameters and check performance after fees before you use it.
WH has two settings that are easy to mix up. The timeframe is how long a stretch of OI change or volume it looks at: 15min, 1h, 4h, 8h, 24h or 3d, defaulting to 24h and score_oi. The bar interval (5min to 1d on Data Studio charts, the interval in a strategy) only sets how often you read the value. The official strategy reads the 24h-window score on 1h bars.
| Timeframe | What one value covers | Notes |
|---|---|---|
15min / 1h | OI change or volume over the last 15 minutes or 1 hour | Short window: don't reuse 24h thresholds, scan separately |
4h / 8h | Change over the last 4 or 8 hours | Between the short windows and the daily view; scan your own thresholds |
24h | Change over the last 24 hours | Default; the window used by the BTC Whale Hunter Contrarian strategy |
3d | Change over the last 3 days | Longest window: one large position build stays in the value for 3 days |
Blave measured BTC, ETH and 1000PEPE from 2024-09 to 2026-09: on the default 24h window, the OI score's 1st and 99th percentiles sit near −2.6 and +3, with extremes around ±10. Shorter windows have fatter tails: on 1h, extremes already exceed ±20. The volume score skews right (negative readings rarely go below −2), so don't borrow the OI score's symmetric thresholds. Thresholds don't carry across setups: rescan when you change the timeframe or the coin. Don't reuse −0.7 elsewhere as is.
| Page | What it shows |
|---|---|
| Overview | Block heatmap: switch the timeframe and OI change or volume change. Shows the top 30 coins with a value above 0, block area proportional to the value, largest first; colour is the price change over the same window. |
| History | WH bars for one coin over price, with timeframe, score type and chart interval selectors, plus the stat field. |
| Scatter (Pro) | The latest snapshot of all coins: OI score on the x-axis and volume score on the y-axis, with only zero lines and no quadrant labels. The lower half means volume is quieter than usual, not that volume is falling. |
These are ideas for combining signals, not verified results:
| Pairing | Purpose |
|---|---|
| WH + Holder Concentration | WH finds coins with unusual position changes; Holder Concentration helps judge whether those positions lean long or short. |
| WH + Taker Intensity | When OI drops sharply, use Taker Intensity to see how aggressively traders were buying and selling over the same period, to help tell whether liquidations were involved. |
The API endpoint is GET /whale_hunter/get_alpha with symbol, period, timeframe (default 24h), score_type (score_oi or score_volume) and start/end dates; in Blave Agent the helper is fetch_whale_hunter. Only closed bars are returned. Without a start date you get the last 365 days, and ranges longer than 365 days are truncated. History starts on 2021-12-01 (or the coin's listing). The response also carries one stat object describing the latest reading, and its field names don't quite match what they compute:
| Field | Meaning |
|---|---|
up_prob | The model's estimated probability of a rise 24 hours later. It is an estimate, not a guaranteed win rate. |
avg_up_return /avg_down_return | The average gain when the price was up 24 hours later, and the average loss when it was down, regardless of the WH level. |
exp_value | up_prob × avg_up_return + (1 − up_prob) × avg_down_return, as a decimal, not a percentage. |
is_data_sufficient | Whether there is enough history; when false, treat these numbers as reference only. |
stat is an estimate, not a win rate. Validate any threshold with your own backtest.