Value at Risk (VaR)
Quantify maximum expected loss at a given confidence level. Critical for setting daily exposure limits and worst-case scenario planning.
๐ VaR Formula
Parametric VaR
- P = Portfolio value
- ฯ = Daily volatility
- Z = Z-score for confidence level
- t = Time period (days)
Interpretation
"At 95% confidence, we will not lose more than $4,113 over 1 day."
Or equivalently: There's a 5% chance we lose more than this.
Portfolio Settings
Confidence Level
โ ๏ธ Risk Metrics
Average loss when VaR is exceeded (tail risk)
Loss Distribution
VaR by Time Horizon
VaR scales with the square root of time. A 1-day VaR ร โ10 โ 10-day VaR.
๐ Sports Betting VaR
Daily Exposure Limits
Set maximum daily liability based on bankroll VaR. If bankroll is $100K and 99% VaR is $10K, limit daily exposure accordingly.
Event Concentration
Calculate VaR for single events (Super Bowl, UFC fight). Concentrated bets have higher VaR than diversified exposure.
Reserve Requirements
Use VaR to determine cash reserves needed to cover worst-case payouts. CVaR gives buffer for extreme scenarios.
๐ VaR vs Expected Shortfall (CVaR)
Value at Risk (VaR)
- โข The loss threshold at X% confidence
- โข Easy to calculate and communicate
- โข Ignores severity of tail losses
- โข Not subadditive (diversification can increase VaR)
Expected Shortfall (CVaR)
- โข Average loss when VaR is exceeded
- โข Captures tail risk severity
- โข Coherent risk measure (respects diversification)
- โข Required by Basel III for market risk
R Code Equivalent
# Parametric VaR calculation
calculate_var <- function(portfolio_value, daily_vol, confidence, days) {
z_score <- qnorm(confidence)
var <- portfolio_value * daily_vol * z_score * sqrt(days)
return(var)
}
# Monte Carlo VaR
monte_carlo_var <- function(portfolio_value, daily_vol, days, n_sims = 10000, confidence = 0.95) {
simulate_loss <- function() {
returns <- rnorm(days, mean = 0, sd = daily_vol)
final_value <- portfolio_value * prod(1 + returns)
return(portfolio_value - final_value)
}
losses <- replicate(n_sims, simulate_loss())
var <- quantile(losses, confidence)
cvar <- mean(losses[losses > var])
return(list(var = var, cvar = cvar))
}
# Example
result <- monte_carlo_var(100000, 0.025, 1)
cat(sprintf("95%% VaR: $%.0f\n", result$var))
cat(sprintf("CVaR: $%.0f\n", result$cvar))โ Key Takeaways
- โข VaR answers: "What's my worst X% loss?"
- โข VaR scales with โtime (not linearly)
- โข 99% VaR โ 1.4ร the 95% VaR
- โข CVaR captures tail severity (use for reserves)
- โข Monte Carlo handles non-normal distributions
- โข Set exposure limits based on VaR, not just $ amount