How the score is computed
- Daily realized PnL, in dollars, from the same per-wallet daily rollup as the rest of Pulse. It is not limited to perps.
- Every day in the window counts. A day without fills counts as
0, so a wallet that trades twice a month is not scored on its two good days. - Completed UTC days only. Today is always excluded;
asOfis midnight UTC at the end of the window, andcalculatedAtis when the number was computed. - Risk-free rate is zero. Annualized with √365 because crypto trades every day.
- Null, not zero, when there are fewer than two days or the daily PnL never varies. The score is rounded to 4 decimals.
annualizedPnlSharpe alongside realizedPnl and trades, which every response carries next to it with meanDailyPnl and stdDailyPnl.
Endpoints
The wallet endpoints answer for wallets Pulse tracks; an address it has never indexed returns
404. They apply no equity filter — any tracked wallet gets a score.
Custom intervals
/sharpe/interval scores 1–90 completed days. startDay must be no earlier than 90 days before today, and the exclusive end (startDay + days) cannot be later than today. Out-of-range windows are rejected, not shortened — unlike the silent since clamps elsewhere in the API: a malformed startDay, a start more than 90 days ago or an end later than today is a 400; a missing, non-integer or out-of-range days (outside 1–90) is a 422. A one-day interval returns a null score and a standard deviation of 0.
Monthly buckets
/sharpe/monthly always returns three buckets, newest first, each with its own startDay, endDayExclusive, days and asOf:
- Default (
useCalendarMonths=false): the last 30 completed days, the 30 before that, and the 30 before that — 90 days in all. useCalendarMonths=true: the completed days of the current UTC month plus the two full calendar months before it — at most 93 days. On the 1st of a month the current bucket hasdays: 0, zero statistics and anullscore.
The leaderboard
/pulse/sharpe-leaderboard ranks the top 50 wallets. To be eligible a wallet needs at least $2,500 of stored account equity (minEquity) and must clear two activity floors. Both apply by default and can be changed:
All three checks happen before ranking, so the 50 slots go to wallets that pass. Wallets with no equity on record, or with zero variance, are left out. Ties break by realized PnL, then by wallet address. Each row also reports
activeDays, and the response echoes the floors it applied as minActiveDays and minPnl next to minEquity. Out-of-range, non-integer minActiveDays or non-finite values are a 422.
The defaults keep wallets whose score rests on a couple of lucky days or a few dollars off the board. minActiveDays counts fill days the same way as /pulse/hidden-gems, but only inside the 30-day window (hidden-gems counts over all time). minPnl has the same name, dollar meaning and default as on /pulse/max-pain-events and /pulse/perfect-exits, but unlike them it accepts negative values, so the floor can be switched off. To see the whole field, pass minActiveDays=1&minPnl=-1000000000.
accountValueandequityUpdatedAtare the wallet’s latest stored equity checkpoint — not necessarily its live balance, and no checkpoint is too old to count.- The result is cached and refreshed every 30 minutes; if a refresh fails, the previous result may be served.
calculatedAttells you how old the answer is.
Sharpe filters on cohort endpoints
Nine cohort and positioning endpoints take two optional filters that keep only wallets above a Sharpe threshold:
Both are inclusive minimums. Zero and negative values are valid; non-finite values are
422. Leave a filter out and nothing is filtered on it; set it and wallets without a score are excluded. Set both and a wallet must pass both. Filters apply before limits and aggregation, so totals and medians describe the qualifying wallets only.
The filter uses each wallet’s current score. On trade and lifecycle history, a fill from three weeks ago is kept or dropped by the wallet’s score today, not its score then — do not use it to backtest.
These filters have no activity floor. Unlike the leaderboard, they do not take
minActiveDays or minPnl. The stored score does not record how many days a wallet traded, and a wallet with a single winning day in the window scores about 3.49. A minRecentSharpe below that can therefore admit one-day wallets. The cohort itself (its PnL or size tier) is the only size floor.
The filters do not change an endpoint’s tier.
What you can ask
curl
Coverage
- Wallets: every wallet Pulse tracks (see Data coverage). The leaderboard additionally needs a stored equity checkpoint of at least $2,500 and, by default, 10 fill days and $1,000 of realized PnL in the window.
- History: per-wallet scores and intervals reach back 90 days; the monthly view up to 93.
minTotalSharpeuses each wallet’s full available daily history. - Freshness: wallet scores are computed on each request from the daily rollup; the leaderboard is up to 30 minutes old; the stored filter scores refresh hourly (recent) and daily (total).

