Leaderboard
The trader leaderboard carrying the full risk-metric set — drawdown, Calmar, recovery factor, profit factor, expectancy and streaks beside PnL.
GET https://data.vike.io/v1/hyperliquid/leaderboardThe trader leaderboard carrying the full risk-metric set — drawdown, Calmar, recovery factor, profit factor, expectancy and streaks beside PnL. A wallet up 300% through a 70% drawdown is not the same find as one up 300% without, and a PnL-only board cannot tell them apart.
Truncated: traders holds 3 rows (limit=3); the first is shown in full, so the whole
risk-metric set is visible.
# the 30-day PnL board with the full risk-metric set beside each wallet
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard?limit=3&window=30d" \
-H "X-API-KEY: $VIKE_API_KEY"
# risk-adjusted instead of raw PnL: best Calmar ratio among wallets with at least 50 trades
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard?sort=calmar&min_trades=50&limit=10" \
-H "X-API-KEY: $VIKE_API_KEY"
# next page of the Calmar board: NEXT is its nextCursor; resend the same window, sort, order, axis and cohort
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard?sort=calmar&min_trades=50&limit=10&cursor=$NEXT" \
-H "X-API-KEY: $VIKE_API_KEY"
# consistent winners: min_win_rate is compared with the same win_rate column the rows show, a fraction
# (0.6 is 60%), where /traders takes a percent
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard?sort=win_rate&min_trades=100&min_win_rate=0.6&limit=25" \
-H "X-API-KEY: $VIKE_API_KEY"
# only wallets in the 3x smart realized-PnL band, by slug; the label is resolved from today's dictionary
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard?axis=pnl&cohort=3x_smart&window=30d&limit=25" \
-H "X-API-KEY: $VIKE_API_KEY"
# the other end of the board: the biggest realized losses
curl -s "https://data.vike.io/v1/hyperliquid/leaderboard?sort=pnl&order=asc&min_trades=20&limit=25" \
-H "X-API-KEY: $VIKE_API_KEY"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 windowsortqueryoptionalpnl, realized_pnl, roi, volume, trades, win_rate, long_win_rate, short_win_rate, account_value, profit_factor, expectancy, calmar, recovery_factor, max_drawdown, current_drawdown, avg_leverage, avg_duration, fees, win_streak, loss_streak. Default pnl. An unknown key is a 400, not a defaultorderqueryoptionalasc | desc. Default desccohortqueryoptionalaxisaxisqueryoptionalsize | pnl | pnl_abs. Default sizemin_tradesqueryoptional/traders applies; pass 0 for no floormin_win_ratequeryoptionalmin_volumequeryoptionallimitqueryoptionalcursorqueryoptional{
"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"
}
],
"totalCount": 172293,
"nextCursor": "eyJrIjoiMzBkfHBubHxkZXNjfHNpemV8IiwiciI6MywidiI6MTAzNzA4NDkuMDQwNzYzOTk4LCJ3IjoiMHgwMjBjYTY2YzMwYmVjMmM0ZmUzODYxYTk0ZTRkYjRhNDk4YTM1ODcyIn0"
}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. total_realized_pnl,
the trade, win and loss counts, win_rate, volume, fees, profit_factor, expectancy, the long and
short halves and the two tags are computed from those trades. (Until 2026-10-19 the window held the
trades opened in it and since closed, so a loss on a position opened before the window never showed in
it; see the changelog.) max_win_streak and max_loss_streak are still taken over
the trades opened in the window. A row is recomputed whenever the wallet trades, and once a day for
wallets with a trade that has left a window, so a trade does not stay in a window after its day. The
drawdown fields (max_drawdown_pct, current_drawdown_pct, calmar_ratio, recovery_factor) are
computed from the wallet's own equity over the same window, and are null where there is too little
of it to say.
min_trades defaults to 3 closed trades in the window, the floor /traders
applies, because a wallet with one or two trades otherwise tops a PnL board on a single fill. Pass
min_trades=0 for the unfloored board, wallets with no trade in the window included.
sort is a closed allow-list. An unknown key gets a 400, not a clamped default — sorting by
something other than what was asked for is a wrong answer that looks like a right one.
The 20 accepted keys: pnl, realized_pnl, roi, volume, trades, win_rate,
long_win_rate, short_win_rate, account_value, profit_factor, expectancy, calmar,
recovery_factor, max_drawdown, current_drawdown, avg_leverage, avg_duration, fees,
win_streak, loss_streak.
Both cohort labels are returned regardless of which axis you filtered on. pnl_pct is a
null-guarded ROI: the stored roi is raw even when equity is a rounding error (values like 4.8e10
occur), so pnl_pct is null below $1 of equity and a client can display one column without
special-casing.