Risk Methodology
PortRisk measures portfolio risk from supplied positions and available market history. It does not predict prices or recommend buying, selling, or holding an asset.
What counts as the portfolio
The portfolio is the union of two sources: the holdings of every connected wallet, and the positions entered by hand or by CSV import. Before v2.4 only the second source reached the score, so a wallet holding 50 000 alongside a manual position of 1 000 produced a score computed on the 1 000.
- An asset found in both sources is counted once, and the wallet wins: a chain records what is actually held, while a manual entry records what someone remembers buying. Symbols are compared in upper case.
- The same asset held across several chains is not a duplicate. Ether on Ethereum, Arbitrum and Base is three holdings of one asset, and the amounts are added.
- Where PortRisk cannot price a symbol itself but the wallet provider reported a value, that value is used. Where only a total is known, the per-unit price stays unknown rather than being derived from it.
- A wallet holding carries no purchase price, so its profit and loss is reported as unknown, not as zero. Zero would read as breaking even, which is a fact PortRisk does not have.
- A position whose value cannot be determined is excluded from the calculation explicitly and reported alongside the score. A portfolio in which nothing can be valued receives no score at all.
Risk Score
The 0–100 score combines concentration, average pairwise correlation, and the non-stablecoin share.
Risk Score = 50% concentration + 30% correlation + 20% non-stablecoin share
The score measures portfolio structure — concentration and co-movement — not the volatility of the assets themselves. A portfolio held mostly in stablecoins is therefore scored on how concentrated it is, not on how calm its prices are.
- Concentration is the largest position weight: the score follows 1.4× that weight up to 60%, then rises linearly so that only a single-asset portfolio reaches 100.
- Correlation uses available portfolio pairs. A single-position portfolio scores 100, because it holds no diversification at all. The neutral fallback of 40 applies only when two or more positions exist and no pair could be computed.
- Non-stablecoin share is the portfolio weight held outside a published list of fiat-pegged stablecoins, capped at 100.
Historical analytics
VaR and CVaR use the empirical distribution of daily portfolio returns at 95% confidence. The default minimum is 60 common daily observations, and at least 95% of portfolio value must have usable history. Missing weight is disclosed and is not redistributed.
Volatility, Sharpe, and Sortino are annualised over 365 days, because crypto trades every day. The risk-free rate is zero. Maximum drawdown comes from the historical portfolio curve; beta uses Bitcoin where sufficient aligned history exists.
Stress tests
A stress test models a fall, never a rise: the shock is between 1% and 90% down. The selected asset receives the full requested shock. Another position receives cascade impact only when its historical correlation with the selected asset is greater than 0.3. Cascade loss is proportional to value, correlation, and shock size. Two set-wide scenarios exist: the whole portfolio, which shocks every holding uniformly, and all altcoins, which shocks every holding except bitcoin and the stablecoins listed above. Set-wide scenarios carry no cascade, because the shock already reaches the whole set. This is a scenario, not a forecast.
Coverage and data status
Financial responses include an as-of timestamp, freshness, and a state:
Advanced analytics also expose included and excluded assets, sample days, covered portfolio weight, and an unavailable reason.
Versioning and changelog
Material changes to formulas, thresholds, coverage, annualization, or stress propagation require a new public version.
- v2.4 — connected wallet holdings are part of the portfolio the score is computed on. An asset present in both a wallet and the manual list is counted once and taken from the wallet; the same asset across several chains is summed. Profit and loss on a wallet holding is unknown rather than zero, and a position that cannot be valued is excluded explicitly instead of being added as zero. Scores change for everyone with a connected wallet.
- v2.3 — a single-position portfolio no longer receives the neutral correlation value, and the concentration component no longer saturates at 71% of portfolio weight. Until this version the model ranked 100% in one asset as less risky than an 80/20 split of two correlated assets.
- v2.2 — stress tests are defined for falls only, set-wide scenarios (whole portfolio, all altcoins) are part of the published model, the altcoin scenario excludes stablecoins, and the stress page now runs the same implementation as the API. Until this version the page computed cascade without the 0.3 threshold, so its numbers could differ from the API.
- v2.1 — the product covers cryptocurrencies only. The third Risk Score component is the non-stablecoin share instead of the non-stock share; annualisation is always 365 days.
- v2.0 — one implementation for Risk Score, coverage, historical tail risk, and stress tests; explicit coverage and data-as-of fields.