Sources and methodology
vv-public-risk-v3
VaultVision separates protocol observations from its own historical models. A reproducible score is not an independently audited safety rating, a probability of loss, or a forecast.
Machine-readable formulas · Vault scanner
Reproduce a vault snapshot
Open the vault's evidence link or request /api/v1/vaults/0xADDRESS/evidence. It contains the original redacted Hyperliquid history, SHA-256 receipt, selected history window, materialized observations, daily closes, calculation inputs and output. Account values and PnL are separate series.
Source timestamps matter: a later API response need not equal an earlier snapshot. A hash proves internal consistency, not that Hyperliquid signed the response. Missing, stale or quarantined history does not produce a public risk score.
Upstream: Hyperliquid vault directory (TVL) and Hyperliquid Info API (vaultDetails).
Risk
- weights
perf: 0.35 drawdown: 0.25 liquidity: 0.25 data_risk: 0.15
- upper inclusive buckets
volatility: [[0.003, 10], [0.01, 25], [0.02, 45], [0.04, 65], [null, 85]] worst_loss: [[0.005, 10], [0.02, 35], [0.05, 65], [null, 90]] drawdown: [[0.01, 10], [0.05, 35], [0.12, 60], [0.25, 80], [null, 95]] tvl_volatility: [[0.01, 15], [0.03, 35], [0.08, 60], [null, 85]]
- tvl lower inclusive buckets
[[100000000, 10], [20000000, 20], [5000000, 35], [1000000, 55], [0, 75]]
- components
perf: int(0.6 * volatility_bucket + 0.4 * worst_loss_bucket) drawdown: drawdown_bucket liquidity: int(0.7 * tvl_size_bucket + 0.3 * tvl_volatility_bucket) data_risk: int(0.7 * 10 + 0.3 * (10 if daily_return_count >= 30 else 20))
- total
clamp(round(sum(component * weight)), 0, 100); Python ties-to-even rounding
- bands
low: [0, 33] moderate: [34, 66] high: [67, 100]
- missing data
null, never APR-derived volatility, drawdown estimates, or a default safe score
- eligibility
Recorded, hash-matching, trusted PnL history <=48h old; >=24 consecutive completed UTC daily returns in the trailing 30-day window; positive account values.
History
- interval return
(pnl_usd[t] - pnl_usd[t-1]) / account_value[t-1]
- share index
S[0]=1; S[t]=S[t-1]*(1+interval_return[t])
- daily close
Last sample in each UTC date, excluding the UTC date of the latest sample (unfinished day).
- window
Daily closes in [last_completed_close - 30 days, last_completed_close]. No forward fill; a missing UTC date withholds risk and drawdown.
- drawdown
max(1 - S[t]/max(S[0:t+1])) over that window, including the initial close; positive fraction
- volatility
Sample standard deviation (ddof=1) of daily share-index returns; not annualized
- sharpe
mean(daily returns) / sample_stdev(daily returns) * sqrt(365); zero risk-free rate; null when stdev <= 1e-9
- worst day
min(0, min(daily returns)); positive days are not losses
- tvl volatility
Sample standard deviation (ddof=1) of log(account_value[t]/account_value[t-1]) at the same daily closes
- risk size input
Latest recorded account_value from the same source receipt, not current directory TVL
- limitations
Sampled PnL/prior-equity estimate, not exact investor TWR or fee-adjusted realized return; intraperiod flow timing unavailable. Daily-close drawdown can miss intraday losses. Window coverage and source timestamps are disclosed per vault.
Tvl
- endpoint
https://stats-data.hyperliquid.xyz/Mainnet/vaults
- selector
item.summary.vaultAddress == vault_id; item.summary.tvl
- type
Observed directory equity, not return, available withdrawal liquidity, or proof of reserves
- cross check
vaultDetails.portfolio[window].accountValueHistory[-1]; different sampling times/scopes can differ. No top-level tvl field required.
Ranking
- risk adjusted
clamp(r30, -0.95, 1) / max(0.15, risk_score/100) * (0.8 + 0.2 * log_normalized_directory_tvl)
- tvl normalization
Clamp TVL between configured directory floor and $500M; normalize log10 to [0,1]. Floor returned in ranking response.
- eligibility
Active directory vault, fresh snapshot confidence >=0.7, recorded risk evidence, and available 30d PnL return. No APR fallback. Sort descending, address ascending for ties; limit after sort.
- universe
Up to 500 active Hyperliquid directory vaults by descending TVL, subject to the configured TVL floor; candidates_examined is returned. Unscored candidates are excluded, not assigned zero.
- meaning
Research ordering, not Sharpe, expected return, or a recommendation. Verified/estimated rankings retain their separate legacy APR-based formulas; they are not this v3 ranking.
Entry
- version
entry-score-v1
- start
50
- upnl
u<-0.05: -min(20,abs(u)*200); else u<-0.02: -abs(u)*100; else u>0.02: +min(10,u*100)
- leverage
L>5: -min(15,(L-5)*3); else L>3: -(L-3)*2; else L<2: +5
- concentration
top1>0.8: -10; else top1>0.5: -5
- liquidation
elevated: -10; otherwise no adjustment
- flow
f=net_flow_7d/equity; f<-0.1: -min(15,abs(f)*50); else f<-0.03: -5; else f>0.05: +5
- whale outflow
whale_outflow_7d < -50000: -5
- realized pnl
p=realized_pnl_30d/equity; p>0.05: +min(15,p*100); else p>0: +5; else p<-0.05: -10
- rounding
Clamp round(score) to [0,100], ties to even. >=70 Good Entry, >=40 Neutral, otherwise Avoid. Missing inputs skip their adjustment; ratios need positive equity.
- publication gate
Fresh position snapshot, trusted PnL history with 30d return, finite score, known position scope. HLP consolidated scope remains unverified, so no HLP entry score.
- limitations
Heuristic, not a profitable-entry prediction. Rolling flow estimates are not a wallet-transfer ledger. Entry inputs do not yet have raw position-source receipts.
What this does not prove
Source replay tests implementation consistency. It does not validate predictive power. Contract security, manager integrity, liquidation/exit liquidity and portfolio correlation are outside this model. HLP's historical score does not establish consolidated position coverage. No exact investor return or future profit is promised.
Prior risk v2 used stored analytics and sometimes estimates from APR or endpoint returns. Public v3 uses only recorded daily history, excludes the unfinished UTC date and treats positive days as zero downside. Historical and v3 scores are not directly interchangeable.