Flow-adjusted leaderboard
Ranked on fills-derived realized PnL, with external flow reported beside it.
GET https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjustedRanked on fills-derived realized PnL, with external flow reported beside it.
Truncated: traders holds 3 rows (limit=3); the first is shown in full, including the deposit and
withdrawal figures and the flow_unbalanced flag described below.
# who earned the most from trading in 30 days, deposits excluded by construction
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?limit=3&window=30d" \
-H "X-API-KEY: $VIKE_API_KEY"
# next page of the first call: NEXT is its nextCursor, passed back verbatim with the same window
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?window=30d&limit=3&cursor=$NEXT" \
-H "X-API-KEY: $VIKE_API_KEY"
# this week's board
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?window=7d&limit=25" \
-H "X-API-KEY: $VIKE_API_KEY"
# the all-time board, the largest page the route serves
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?window=all&limit=500" \
-H "X-API-KEY: $VIKE_API_KEY"
# drop the wallets whose attribution is unreliable; the route reports flow_unbalanced but never filters on it
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard/flow-adjusted?window=30d&limit=100" \
-H "X-API-KEY: $VIKE_API_KEY" \
| jq '.traders[] | select(.flow_unbalanced | not) | {wallet, rank, total_realized_pnl}'windowqueryoptional1d | 7d | 30d | all. Default 30d. The trades CLOSED in the current UTC day and the 1, 7, 30 or 365 days before it, so PnL, trade counts, win rates and tags are what was realized in the windowlimitqueryoptionalcursorqueryoptionalmin_tradesqueryoptional0 keeps any wallet with at least one{
"traders": [
{
"wallet": "0x30afce2f6842bf183c7e3fe7162e279ff0b6393e",
"rank": 1,
"account_value": 0.0,
"total_realized_pnl": 11709016.230618,
"cum_realized_pnl": 3615564.967409672,
"roi": 0.0,
"pnl_pct": null,
"total_volume": 280185067.76154,
"total_fee": 39422.057744,
"trade_count": 9,
"win_count": 6,
"loss_count": 3,
"win_rate": 0.6666666865348816,
"long_win_rate": 0.6666666865348816,
"short_win_rate": 0.0,
"long_pnl": 11709016.230618,
"short_pnl": 0.0,
"profit_factor": 2.5232200622558594,
"expectancy": 1301001.803402,
"max_drawdown_pct": null,
"current_drawdown_pct": null,
"calmar_ratio": null,
"recovery_factor": null,
"max_win_streak": 2,
"max_loss_streak": 3,
"avg_leverage": 0.0,
"avg_duration_seconds": 988861,
"size_cohort": "shrimp",
"pnl_cohort": "3x smart",
"pnl_cohort_tag": "consistent_winner",
"style_cohort_tag": "whale_hunter",
"attributed": {
"trading_pnl_total": -8843945.93713,
"realized_trading_pnl": -561313.3808879973,
"delta_unrealized_pnl": -8282632.556242004,
"funding_paid_usd": 0.0,
"delta_account_value": -18664526.948445,
"account_value_eod": 0.0,
"active_days": 11,
"last_day": "2026-10-18",
"perps_trading_pnl": -8843945.93713
},
"flow": {
"deposit_usd": 199417.988685,
"withdraw_usd": 9999999.0,
"net_external_flow_usd": -9820581.011315,
"net_total_flow_usd": -9820581.011315
},
"flow_unbalanced": true
}
],
"totalCount": 172293,
"nextCursor": "eyJrIjoiZmxvd2FkanwzMGQiLCJyIjozLCJ2IjoxMDM3MDg0OS4wNDA3NjM5OTgsInciOiIweDAyMGNhNjZjMzBiZWMyYzRmZTM4NjFhOTRlNGRiNGE0OThhMzU4NzIifQ",
"ranked_by": "total_realized_pnl (fills-derived; excludes deposits by construction)"
}A window is what a wallet realized in it. window covers the trades closed in the current UTC
day and the 1, 7, 30 or 365 days before it (all is 365 days), whenever they opened, so "who earned the
most from trading in 30 days" is answered by the trades that closed in them. (Until 2026-10-19 the window
held the trades opened in it and since closed; see the changelog.) min_trades
defaults to 3 closed trades in the window; min_trades=0 keeps any wallet with at least one, which is
what the board listed before. The attributed and flow blocks are sums over the same number of days of
wallet_pnl_attributed_daily and ledger_events, which count by calendar day and ledger timestamp, not by
the trades' close.
An account-value delta is not a trading result: a wallet that deposits $1M and loses $50k reads as +$950k on any equity-delta ranking. The rank here comes from the sum of closed round-trip PnL, which excludes deposits by construction — there is no flow term in it to corrupt. Deposits, withdrawals and the daily attribution figures come back in the same row, so a caller can see what was excluded rather than trust that something was.
flow_unbalanced is a per-row honesty flag, not a filter
flow_unbalanced is true when the wallet had a send in the window, which is when the
attributed block beside the rank is unreliable —
the ledger records send one-sided (measured 2026-08-04: 1,010,263 negative rows against
835,295 positive over 30 days, netting −$1.27B, while spotTransfer, internalTransfer and
subAccountTransfer each net about 0). The rank itself does not depend on attribution and is
unaffected. The flag is reported and never used to filter: active traders move money constantly,
and excluding them would empty the board rather than clean it.