01 — Risk Measures

Value at Risk (VaR)#

Quantile LossStatistical1 min read
◆ The PatternMaximum expected loss at a chosen confidence level over a given horizon

VaR answers one question: "What is the worst loss I should expect on a normal day?" Three methods dominate — parametric (variance-covariance), historical simulation, and Monte Carlo. Parametric VaR assumes normally distributed returns:

VaRα = μ − zα · σ
zα is the inverse-normal quantile (e.g. 1.645 for 95 %). Historical simulation makes no distributional assumption — it ranks past P&L and reads the quantile directly.
// Interactive — confidence level vs. VaR threshold
Confidence %
MethodAssumptionStrength
ParametricNormal returnsFastest to compute
HistoricalNone (empirical)Captures fat tails
Monte CarloModel-dependentFlexible payoff profiles
Limitation. VaR says nothing about the magnitude of losses beyond the threshold — Expected Shortfall fills that gap.
Pattern bridge: Confidence intervals and quantiles are foundational in The Toolkit — Confidence Intervals.
Experiment — your portfolio's VaR
Adjust sliders to calculate your portfolio's Value at Risk.
Performance in practice
  • Under the 1996 Basel Market Risk Amendment, market-risk capital was based on 99% 10-day VaR times a multiplier of at least 3. Basel III’s FRTB replaces it with 97.5% Expected Shortfall
  • In 2008 many banks saw far more days with losses beyond VaR than their models allowed — normal assumptions and calm-period data understated the tails
  • J.P. Morgan’s RiskMetrics (1994) popularised VaR, modelling returns as conditionally normal with EWMA volatility (λ = 0.94)
  • Modern practice: run all three methods and report the worst case. If they disagree significantly, your risk model has a blind spot
When to use this
✓ Use when: Setting position sizes. Regulatory reporting (Basel III). Communicating risk to non-technical stakeholders. Comparing risk across different portfolios or strategies.
✗ Skip when: You need to understand tail risk severity (use Expected Shortfall). Illiquid positions where you can't exit at market price. Options/derivatives with non-linear payoffs (use Monte Carlo or stress tests instead).
Quick start — copy to notebook
pip install numpy pandas yfinance scipy
# ────────────────────────────────────────
import numpy as np, pandas as pd, yfinance as yf
from scipy.stats import norm

prices = yf.download('SPY', period='2y')['Close']
returns = prices.pct_change().dropna()

# Parametric VaR (95%, 1-day)
mu, sigma = returns.mean(), returns.std()
var_95 = -(mu + norm.ppf(0.05) * sigma)
print(f"Parametric VaR (95%): {var_95:.2%}")

# Historical VaR
var_hist = -np.percentile(returns, 5)
print(f"Historical VaR (95%): {var_hist:.2%}")

# Dollar VaR for $100K portfolio
portfolio = 100_000
print(f"1-day dollar VaR: ${portfolio * var_95:,.0f}")
Worked example

Twenty daily returns on a 1,000,000 portfolio. Historical 95% VaR reads the 5% quantile straight off the data: 28,400. Parametric VaR assumes a normal distribution with the same mean and standard deviation: 23,512. The two worst days (−3.6% and −2.8%) drive the gap — the normal curve says such days are rarer than the data does.

Where it misleads
  • With 20 days the 5% quantile sits between the two worst observations; one more bad day moves it a lot. Historical VaR needs hundreds of days to be stable.
  • VaR says nothing about how bad the bad days are beyond the cutoff, and it is not sub-additive: two portfolios’ VaR can add up to less than the VaR of the two combined (Artzner et al. 1999).
  • A calm sample gives a small VaR just before volatility returns; the number is backward-looking.
In code
r = pd.Series([0.4, -1.2, 0.8, 0.1, -0.6, 1.5, -2.8, 0.3, 0.9, -0.4,
               0.2, -1.7, 0.6, 1.1, -0.9, 0.5, -3.6, 0.7, 0.0, -0.3]) / 100   # 20 daily returns, made up
value = 1_000_000
historical = -np.quantile(r, 0.05) * value                 # read the 5% quantile off the data
parametric = -(r.mean() - 1.645 * r.std()) * value         # assume a normal distribution
Python, in your browser — edit the code and run it again

Assumes import numpy as np and import pandas as pd. Each snippet carries its own example numbers; the comments say which are made up or simulated.

Sources
  • Value at Risk: The New Benchmark for Managing Financial Risk, P. Jorion, McGraw-Hill, 3rd ed. 2007
  • J.P. Morgan/Reuters, RiskMetrics — Technical Document, 4th ed., 1996
  • P. Artzner, F. Delbaen, J.-M. Eber & D. Heath, “Coherent Measures of Risk”, Mathematical Finance 9(3), 1999

Last reviewed October 2026 · How this site checks its content · Report a mistake

Check yourself

1. A portfolio’s 1-day 99% VaR is $1 million. What does that mean?

Show answer

C. VaR is a threshold, not a worst case. Expected shortfall measures what lies beyond it.

2. VaR is not subadditive. What does that mean in practice?

Show answer

A. This is one reason Artzner et al. (1999) did not count VaR among “coherent” risk measures.

3. What happens if you compute VaR assuming normal returns when real returns are fat-tailed?

Show answer

B. Fat tails put more probability on large moves than the normal curve does, especially at high confidence levels.

Linked from 3
Open in the full reader, with the topic sidebar