Skip to content
Learn
Sign up

Quantitative Methods & RiskRisk Measures: Volatility, Drawdown, VaR & CVaR

Value at Risk, Three Ways

14 min read

The single number every desk reports

Value at Risk — VaR — answers a question every risk committee asks: 'How much could we lose, on a bad day, with X% confidence?' It is a single quantile of the loss distribution over a horizon. The 95% one-day VaR is the loss that is exceeded only 5% of the time. It is genuinely useful as a summary and genuinely dangerous if you forget what it leaves out — which is the entire tail beyond the threshold.

Value at Risk (VaR)

Term

The loss level that will not be exceeded over a given horizon with a given confidence. A 1-day 99% VaR of $1M means: on 99% of days the loss is no worse than $1M; on the remaining 1% it is worse — possibly far worse. VaR is a threshold, not a worst case.

Formula

Parametric (variance-covariance) VaR

VaR(α) = V · σ · z_α · √Δt

Closed-form

Assumes a distribution (usually normal) and reads off the quantile. Fast and transparent but underestimates tail risk badly whenever returns are fat-tailed — which is almost always.

Historical VaR in four steps

  1. 1

    Collect P&L

    Gather the portfolio's daily P&L (or returns scaled to current value) over a lookback window — say the last 500 trading days.

  2. 2

    Sort

    Order the daily P&L from worst loss to best gain.

  3. 3

    Find the percentile

    For 95% VaR, locate the 5th-percentile loss — the value 5% of days fell below. With 500 days, that is the 25th-worst day.

  4. 4

    Report as a positive loss

    Quote VaR as a positive number: 'the 1-day 95% VaR is $480k.' Re-estimate as the window rolls forward.

historical_var.py
python
1import numpy as np
2
3def historical_var(pnl, confidence=0.95):
4 """Returns VaR as a POSITIVE loss number."""
5 pnl = np.asarray(pnl, dtype=float)
6 q = np.percentile(pnl, (1 - confidence) * 100)
7 return -min(q, 0.0)
8
9# 95% VaR = the 5th percentile of the P&L distribution
10var95 = historical_var(daily_pnl, 0.95)
11print(f"1-day 95% historical VaR = ${var95:,.0f}")
Historical VaR makes no normality assumption — its weakness is entirely the lookback window. A quiet 500-day window produces a comfortable, and dangerously low, VaR.
Heads up

VaR's three traps

First, it is silent beyond the threshold — a 95% VaR of $1M cannot distinguish 'lose $1M to $2M' from 'lose $1M to $50M.' Second, it is not sub-additive in general: the VaR of a combined portfolio can exceed the sum of the parts' VaRs, which is mathematically perverse for a risk measure. Third, it can be gamed — a desk can lower reported VaR while loading up on far-tail risk that only bites past the confidence level.

Knowledge check

A portfolio has a 1-day 95% VaR of $500k. Which statement is correct?