vike

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/leaderboard

The 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.

cURL
# 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"
windowqueryoptional
1d | 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 window
sortqueryoptional
One of 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. Default pnl. An unknown key is a 400, not a default
orderqueryoptional
asc | desc. Default desc
cohortqueryoptional
One label on axis
axisqueryoptional
size | pnl | pnl_abs. Default size
min_tradesqueryoptional
Minimum closed trades in the window. Default 3, the floor /traders applies; pass 0 for no floor
min_win_ratequeryoptional
Minimum win rate
min_volumequeryoptional
Minimum total volume
limitqueryoptional
Default 25, max 500
cursorqueryoptional
Keyset cursor
Example response
{
  "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.

Example response
{  "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"}