Risk Metrics - Methodology

How we calculate risk indicators for cryptocurrencies

Table of Contents

Overview

CoinRisqLab provides a comprehensive suite of risk metrics to help investors understand and quantify the risk profile of cryptocurrencies. These metrics are based on Modern Portfolio Theory and industry-standard risk management practices.

Metrics use different calculation windows based on their purpose: Volatility uses a 90-day window for recent risk assessment, VaR and Sharpe Ratio use 365 days for more stable risk estimates, while Skewness, Kurtosis, and SML use 90 days to capture recent distribution characteristics.

Beta is computed in two flavours persisted side-by-side: a statistical beta on log returns over a 365-day window (used everywhere a market-sensitivity number is displayed), and an economic beta on simple returns over a 90-day window (consumed by the SML formula so β and the market return live in the same return space).

Volatility

Price Uncertainty

VaR/CVaR

Downside Risk

Beta/Alpha/Sharpe

Market Sensitivity & Risk-Adjusted Return

Skew/Kurtosis

Distribution Shape

SML

CAPM Valuation

Return Types: Logarithmic vs Simple

Descriptive distribution metrics (volatility, skewness, kurtosis, statistical beta) are estimated on logarithmic returns for statistical stability. Economic-interpretation and portfolio-risk metrics (performance, VaR, CVaR, stress tests, SML) are computed on simple returns or PnL so the output reads as an actual gain or loss.

Logarithmic Returns

Rlog=ln ⁣(PtPt1)R_{\text{log}} = \ln\!\left(\frac{P_t}{P_{t-1}}\right)

Used for statistical distribution metrics, where additivity over time and symmetry around zero matter.

  • Volatility (σ)
  • Skewness
  • Kurtosis
  • Beta (statistical — OLS regression)
  • Correlation matrix

Simple Returns

Rsimple=PtPt1Pt1=PtPt11R_{\text{simple}} = \frac{P_t - P_{t-1}}{P_{t-1}} = \frac{P_t}{P_{t-1}} - 1

Used for economic interpretation and portfolio risk, where the result must read as an actual profit or loss.

  • VaR / CVaR
  • Sharpe ratio
  • Security Market Line (SML)
  • Min / Max / Mean return
  • Stress tests & PnL

Why the split?

Log returns are additive over time (rt=ln(Pn/P0)\sum r_t = \ln(P_n / P_0)) and better approximate a normal distribution, which stabilises variance, regression, and higher-moment estimators. Simple returns are additive across assets (a portfolio simple return is exactly the weighted sum of its constituents' simple returns) and align with how gains and losses are realised in practice, so they are the right basis for risk-at-loss and performance metrics shown to investors.

Volatility

Volatility measures the degree of variation in a cryptocurrency's returns over time. It is estimated as the unbiased standard deviation of logarithmic returns computed over the previous 90 trading days.

Rolling Window Setup

For each cryptocurrency with sufficient data (≥90 log returns):

Window[i]=[ri89,  ri88,  ,  ri]\text{Window}[i] = \bigl[r_{i-89},\; r_{i-88},\; \ldots,\; r_i\bigr]

The window slides forward one day at a time, always containing exactly 90 consecutive daily log returns.

Statistical Calculations

For each 90-day window, we calculate:

a) Unbiased Variance Estimation

s2=1n1i=1n(rirˉ)2s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(r_i - \bar{r})^2
Where rir_i = logarithmic return at observation ii, rˉ\bar{r} = average logarithmic return over the sample, n=90n = 90 observations

b) Daily Volatility (Standard Deviation)

σ=s2\sigma = \sqrt{s^2}
This measure captures the magnitude of return fluctuations over the selected time window and reflects the level of uncertainty associated with the asset's price movements.

c) Annualized Volatility

σannual=σ×365\sigma_{\text{annual}} = \sigma \times \sqrt{365}
Where 365 = trading days per year (crypto markets 24/7)

Why Multiply by √365?

The square root of time rule applies under the assumption of independent and identically distributed returns. Since cryptocurrency markets operate 24/7 throughout the year, we use 365 days to convert daily volatility to an annual measure that's comparable across different assets and time periods.

Example

Given: Bitcoin (BTC) with 90-day log returns

Day 1: Price = $40,000 → $42,000, r₁ = ln(42000/40000) = 0.0488
Day 2: Price = $42,000 → $41,000, r₂ = ln(41000/42000) = -0.0241
...
Day 90: Price = $45,000 → $46,000, r₉₀ = ln(46000/45000) = 0.0220
Mean return: μ = 0.0015
Daily volatility: σ_daily = 0.03 (3% per day)
Annualized volatility: σ_annual = 0.03 × √365 = 0.573
Result: Bitcoin has an annualized volatility of
57.3%

Value at Risk (VaR)

Value at Risk (VaR) is a statistical measure that quantifies the potential loss in value of an asset over a defined period for a given confidence level. It answers the question: "What is the maximum loss I can expect with X% confidence?"

Definition

VaR at confidence level α represents the (1-α) percentile of the return distribution. For example, VaR 95% indicates the loss that will not be exceeded 95% of the time.

VaR(α)=Percentile(Returns,  100α)\text{VaR}(\alpha) = -\text{Percentile}(\text{Returns},\; 100 - \alpha)
Where α\alpha = confidence level (95% or 99%)

Historical VaR Method

We use the Historical Simulation method, which makes no assumptions about the distribution of returns:

  1. Collect up to 365 days of daily logarithmic returns
  2. Sort returns from lowest to highest
  3. Find the return at the (100-α) percentile position
  4. Report the absolute value as potential loss

Note: The volatility (standard deviation) used in VaR calculations is computed over a 365-day window, unlike the standalone volatility metric which uses a 90-day window and is then annualized. This longer window provides more stable risk estimates for downside risk measurement.

Confidence Levels

LevelPercentileInterpretation
VaR 95%
5th percentileLoss exceeded only 5% of days (1 in 20)
VaR 99%
1st percentileLoss exceeded only 1% of days (1 in 100)

Example

Asset: Bitcoin (BTC)
Period: 365 days
VaR 95%: 4.5%
VaR 99%: 8.2%
Interpretation: With 95% confidence, the daily loss will not exceed 4.5%. Only on 5% of days (approximately 18 days per year) should we expect losses greater than 4.5%.

Conditional VaR (CVaR) / Expected Shortfall

CVaR, also known as Expected Shortfall (ES), addresses a key limitation of VaR: it tells you the average loss when VaR is exceeded. It answers: "When things go bad, how bad do they get?"

Formula

CVaR(α)=E[R    R<VaR(α)]\text{CVaR}(\alpha) = -\mathbb{E}\bigl[R \;\big|\; R < -\text{VaR}(\alpha)\bigr]
Average of all returns in the tail beyond VaR

VaR vs CVaR Comparison

MetricQuestionProperty
VaRWhat's the threshold loss?Single point estimate
CVaRWhat's the average extreme loss?Tail average (coherent risk measure)

Note: CVaR is always greater than or equal to VaR. It provides a more complete picture of tail risk.

Beta (Market Sensitivity)

Beta measures the sensitivity of an asset's returns to market movements. It indicates how much an asset tends to move relative to the overall market (CoinRisqLab 80 Index).

For each asset, beta is estimated over a 365-day rolling window using daily logarithmic returns. The market benchmark used is the CoinRisqLab 80 Index, which represents the aggregated performance of a universe of 80 crypto-assets.

OLS Regression Model

The estimation is based on a simple linear regression using the Ordinary Least Squares (OLS) method:

Ri,t=αi+βi×Rm,t+εtR_{i,t} = \alpha_i + \beta_i \times R_{m,t} + \varepsilon_t
Where Ri,tR_{i,t} = logarithmic return of asset ii at time tt, Rm,tR_{m,t} = logarithmic return of the CoinRisqLab 80 Index, βi\beta_i = sensitivity of the asset to market movements

Within this framework, the beta coefficient estimated by OLS is equivalent to:

βi=Cov(Ri,Rm)Var(Rm)\beta_i = \frac{\text{Cov}(R_i,\, R_m)}{\text{Var}(R_m)}

This formula compares the covariance between the asset and the market (their tendency to move together) to the variance of the market (the magnitude of market fluctuations).

Beta Interpretation

Beta ValueCategoryMeaning
β < 0
InverseMoves opposite to the market
0 ≤ β < 0.95
DefensiveLess volatile than market
0.95 ≤ β ≤ 1.05
MarketMoves like the market
1.05 < β ≤ 2
AggressiveAmplifies market movements
β > 2
SpeculativeExtreme market sensitivity

Additional Regression Metrics

R-Squared (R²)

Percentage of asset variance explained by market movements. Higher R² means the asset tracks the market more closely.

Correlation

Strength and direction of linear relationship with the market. Ranges from -1 (perfect inverse) to +1 (perfect positive).

Alpha (Excess Return)

Alpha measures the excess return of an asset beyond what would be predicted by its beta. A positive alpha indicates outperformance; negative alpha indicates underperformance.

Formula

α=Rassetβ×Rmarket\alpha = \overline{R}_{\text{asset}} - \beta \times \overline{R}_{\text{market}}
The y-intercept of the regression line

Interpretation

  • Positive Alpha: Asset generates returns above what beta predicts (skilled selection or unique value)
  • Negative Alpha: Asset underperforms relative to its market risk
  • Zero Alpha: Returns fully explained by market exposure

Pairwise Correlation

Correlation measures the strength and direction of the linear relationship between the returns of two assets. It is the standardized version of covariance and ranges from -1 (perfect inverse) to +1 (perfect co-movement).

Pearson Correlation Coefficient

Given two series of daily log returns RAR_A and RBR_B:

ρA,B=Cov(RA,RB)σA×σB=t=1n(RA,tRˉA)(RB,tRˉB)t=1n(RA,tRˉA)2×t=1n(RB,tRˉB)2\rho_{A,B} = \frac{\text{Cov}(R_A, R_B)}{\sigma_A \times \sigma_B} = \frac{\sum_{t=1}^{n}(R_{A,t} - \bar{R}_A)(R_{B,t} - \bar{R}_B)}{\sqrt{\sum_{t=1}^{n}(R_{A,t} - \bar{R}_A)^2} \times \sqrt{\sum_{t=1}^{n}(R_{B,t} - \bar{R}_B)^2}}

Interpretation

ρ+1\rho \to +1

Strong positive correlation. The two assets tend to move in the same direction. Holding both provides limited diversification.

ρ0\rho \approx 0

No linear relationship. Movements are independent. Good diversification potential.

ρ1\rho \to -1

Strong negative correlation. The assets move in opposite directions. Excellent diversification — rare in crypto.

Key Details

  • Computed from aligned daily log returns — only dates where both assets have data are used.
  • Uses sample covariance (n-1 denominator) for an unbiased estimate.
  • The correlation matrix on the portfolio analytics page applies this formula to every pair of holdings.
  • Correlation does not imply causation — two assets can be highly correlated due to shared market exposure without directly influencing each other.
  • In crypto markets, most major assets are positively correlated (typically 0.4<ρ<0.90.4 < \rho < 0.9) because they share the overall market sentiment.

Relation to Covariance & Volatility

Covariance, correlation, and volatility are related:

Cov(RA,RB)=ρA,B×σA×σB\text{Cov}(R_A, R_B) = \rho_{A,B} \times \sigma_A \times \sigma_B

This relationship is at the heart of portfolio volatility calculation: the off-diagonal entries of the covariance matrix equal ρi,jσiσj\rho_{i,j} \sigma_i \sigma_j.

Sharpe Ratio

The Sharpe Ratio measures the risk-adjusted return of an asset. It tells you how much excess return you receive for the extra volatility you endure — essentially, the return per unit of risk.

Formula

S=RpRfσpS = \frac{R_p - R_f}{\sigma_p}

RpR_p = Mean daily return of the asset

RfR_f = Risk-free rate (0% for crypto)

σp\sigma_p = Standard deviation of daily returns

The daily Sharpe Ratio is annualized by multiplying by 365\sqrt{365}, giving a comparable annual figure.

Interpretation

Sharpe RatioQualityMeaning
< 0
Negative
The asset loses money or underperforms the risk-free rate
0 - 1
Low
Positive return but low reward relative to risk taken
1 - 2
Good
Good risk-adjusted return — the strategy is efficient
> 2
Excellent
Excellent risk-adjusted return — very efficient strategy

Our Implementation

  • Calculated using 365 days of daily log returns
  • Risk-free rate set to 0% (standard for crypto markets)
  • Annualized via 365\sqrt{365} to give a yearly comparable figure
  • Historized daily in the database and recalculated with each new day of data

Security Market Line (SML)

The Security Market Line (SML) measures whether a crypto-asset is fairly priced relative to its systematic risk. It is derived from the Capital Asset Pricing Model (CAPM) and describes the relationship between expected return and systematic risk (Beta).

The SML allows us to determine whether an asset is undervalued, fairly valued, or overvalued relative to the market. To represent the crypto market, we use the CoinRisqLab 80 Index, which tracks the performance of 80 liquid cryptocurrencies, providing a broad representation of the crypto market.

All calculations are performed using a rolling 90-day window. This period balances statistical robustness and market responsiveness. Using shorter windows would increase noise, while longer windows could dilute recent market dynamics.

Methodology

For each asset and for the market index, we compute daily logarithmic returns. The expected market return is estimated as the mean of daily returns of the CoinRisqLab 80 Index over the last 90 days. The beta of each crypto-asset, based on 90 days, measures its sensitivity to market movements.

The expected return predicted by the CAPM is:

E(Ri)=rf+βi×(E(RM)rf)\mathbb{E}(R_i) = r_f + \beta_i \times \bigl(\mathbb{E}(R_M) - r_f\bigr)
This represents the return an asset should deliver given its systematic risk.

Note: We use rf=0r_f = 0 (simplified model for crypto markets where traditional risk-free rates are less relevant).

Jensen's Alpha

We compare the CAPM expected return to the realized return over the same 90-day period:

αi=RiE(Ri)\alpha_i = R_i - \mathbb{E}(R_i)
α>0\alpha > 0 → asset outperforms CAPM → potentially undervalued | α<0\alpha < 0 → asset underperforms CAPM → potentially overvalued
PositionInterpretation
Above SML
Asset delivers higher return than its risk → potentially undervalued
On SML
Fairly priced
Below SML
Return too low for its risk → potentially overvalued

Skewness

Skewness measures the asymmetry of the return distribution. It indicates whether extreme returns are more likely to be positive or negative.

Fisher's Skewness Formula

Skewness=n(n1)(n2)i=1n(xiμσ)3\text{Skewness} = \frac{n}{(n-1)(n-2)} \sum_{i=1}^{n} \left(\frac{x_i - \mu}{\sigma}\right)^{3}
Third standardized moment with sample bias correction

Interpretation

ValueTypeMeaning
< -0.5
Negative SkewLeft tail is longer - more extreme losses than gains
-0.5 to 0.5
SymmetricBalanced distribution of returns
> 0.5
Positive SkewRight tail is longer - more extreme gains than losses

Risk Implication

Negative skewness is concerning for investors because it means the asset has a higher probability of extreme negative returns (crash risk). Most cryptocurrencies exhibit negative skewness during market stress periods.

Kurtosis

Kurtosis measures the "tailedness" of the return distribution - how likely extreme values (outliers) are compared to a normal distribution.

Excess Kurtosis Formula (Fisher)

Excess Kurtosis=(n+1)n(n1)(n2)(n3)i=1n(xiμσ)43(n1)2(n2)(n3)\text{Excess Kurtosis} = \frac{(n+1)\,n}{(n-1)(n-2)(n-3)} \sum_{i=1}^{n} \left(\frac{x_i - \mu}{\sigma}\right)^{4} - \frac{3(n-1)^2}{(n-2)(n-3)}
Fourth standardized moment minus 3 (so normal distribution = 0)

Interpretation

ValueTypeMeaning
< -1
PlatykurticThin tails - fewer extreme events than normal
-1 to 1
MesokurticNormal-like tails
> 1
LeptokurticFat tails - more extreme events than normal

Risk Implication

High kurtosis (leptokurtic) is important for risk management because it means extreme moves happen more often than a normal distribution would predict. Cryptocurrencies typically have high positive kurtosis, meaning "black swan" events are more common than in traditional markets.

Stress Test

Stress testing estimates the potential impact of historical crisis events on an asset, using its beta to project how it would react to similar market shocks. For each historical scenario, we select the relevant crisis window, compute the aggregate crypto market return over that period, and use the cumulative decline as the market shock.

Methodology

For each stress scenario, we first define a historical event window corresponding to a major crypto market disruption. We then retrieve the total crypto market capitalization over that period and compute the daily log returns:

rt=ln ⁣(MtMt1)r_t = \ln\!\left(\frac{M_t}{M_{t-1}}\right)
Where MtM_t is the total crypto market capitalization at time tt

The cumulative market move over the scenario window is obtained by summing the log returns:

Rmarket,log=t=1nrtR_{\text{market,log}} = \sum_{t=1}^{n} r_t

The cumulative market shock is then expressed in standard return terms:

Shockmarket=eRmarket,log1\text{Shock}_{\text{market}} = e^{R_{\text{market,log}}} - 1

To account for differences in asset sensitivity, the market shock is scaled by each asset's historical beta. For stress testing purposes, negative betas are floored at 0:

βi,stress=max(βi,  0)\beta_{i,\text{stress}} = \max(\beta_i,\; 0)
Shocki=βi,stress×Shockmarket\text{Shock}_i = \beta_{i,\text{stress}} \times \text{Shock}_{\text{market}}

The stressed price of each asset is then computed as:

Pi,stress=Pi,0×(1+Shocki)P_{i,\text{stress}} = P_{i,0} \times (1 + \text{Shock}_i)
Where Pi,0P_{i,0} is the current asset price

Historical Scenarios

EventPeriodMarket Shock
COVID-19 CrashFeb-Mar 2020
-50.42%
China Mining BanMay 2021
-25.07%
UST/Luna CrashMay 2022
-4.73%
FTX CollapseNov 2022
-2.64%

Example

Asset: Ethereum (ETH)
Current Price (P_i,0): $2,500
Beta (β_i): 1.2
Scenario: COVID-19 (Shock_market = -50.42%)
β_i_stress = max(1.2, 0) = 1.2
Shock_i = 1.2 × (-50.42%) = -60.50%
P_i_stress = $2,500 × (1 - 0.605) = $987.50

Moving Average (90d)

The 90-day Simple Moving Average (SMA) smooths daily close prices into a single trend line. It is used as a long-term trend filter: a price trading above its 90d MA signals a bullish regime, below it a bearish regime.

Formula

SMAn(t)=1ni=0n1Pti\text{SMA}_n(t) = \frac{1}{n} \sum_{i=0}^{n-1} P_{t-i}
Where PtP_t = OHLC close price at day tt, n=90n = 90 trading days.

The first MA is computed once a crypto has at least 7 daily closes, with the window growing from 7 up to 90 days as history accumulates and then staying capped at 90. The actual window used for each point is persisted alongside the value in crypto_moving_averages.window_days, so a young crypto's early MA can be told apart from a fully-seeded one.

Interpretation

SignalMeaning
Price > MA 90d
Price trades above its long-term trend — bullish regime
Price < MA 90d
Price trades below its long-term trend — bearish regime
Crossover
Price crosses the MA — potential trend change

Caveats

The SMA is a lagging indicator: it reacts to past prices, not future ones, and never spots a turning point in real time. It also gives equal weight to each of the 90 days, so a single old day still influences today's value as much as yesterday's.

RSI (14d)

The Relative Strength Index (Wilder, 1978) is a momentum oscillator bounded between 0 and 100. It compares the magnitude of recent gains to recent losses over a 14-day window and is the standard short-term overbought / oversold indicator.

Formula

For each day, split the daily price change into a gain and a loss component:

Δt=PtPt1,gt=max(Δt,0),lt=max(Δt,0)\Delta_t = P_t - P_{t-1}, \quad g_t = \max(\Delta_t, 0), \quad l_t = \max(-\Delta_t, 0)

Seed the average gain and loss with a 14-day simple average, then apply Wilder's smoothing (exponential, recursion of order 14):

gt=(n1)gt1+gtn,lt=(n1)lt1+ltn\overline{g}_t = \frac{(n-1) \cdot \overline{g}_{t-1} + g_t}{n}, \quad \overline{l}_t = \frac{(n-1) \cdot \overline{l}_{t-1} + l_t}{n}

Compute the relative strength and the RSI:

RSt=gtlt,RSIt=1001001+RSt\text{RS}_t = \frac{\overline{g}_t}{\overline{l}_t}, \quad \text{RSI}_t = 100 - \frac{100}{1 + \text{RS}_t}
Where n=14n = 14 trading days. The first RSI requires 15 daily closes (14 daily changes for the seed + 1 prior price). Edge cases: when both averages are zero (flat price across the window) the RSI defaults to 50; when only lt=0\overline{l}_t = 0 it saturates at 100; when only gt=0\overline{g}_t = 0 it saturates at 0.

Interpretation

RSI RangeZoneMeaning
RSI < 30
Oversold
Recent losses dominate — possible buying opportunity (mean reversion)
30 ≤ RSI ≤ 70
Neutral
Balanced gains and losses — no extreme momentum
RSI > 70
Overbought
Recent gains dominate — possible pullback

Caveats

In a strong trend the RSI can stay above 70 (or below 30) for weeks without a reversal — the "overbought" label does not mean "sell now." The RSI works best in range-bound markets and as a confirmation signal alongside trend-following indicators (e.g. the 90d MA).

Calculation Parameters

ParameterValueDescription
VaR / Beta / Sharpe Window
365 days
Longer window for stable risk estimates
Skew / Kurtosis / SML Window
90 days
Shorter window to capture recent distribution
Moving Average Window
90 days
Long-term trend filter on close prices
RSI Window
14 days
Standard Wilder smoothing window for momentum
Return Type (statistical)
Logarithmic
Volatility, skewness, kurtosis, beta (statistical, 365d), correlation, Sharpe
Return Type (economic)
Simple
VaR, CVaR, SML (uses beta simple, 90d), min/max/mean return
Market Benchmark
CoinRisqLab 80
Index used for Beta/SML calculations
Risk-Free Rate
0%
Simplified assumption for crypto markets
Min. Data Points
7 days
Minimum required for statistical validity
Update Frequency
Daily (2 AM)
All metrics recalculated daily