Risk Management Interactive
Stress Testing
Model worst-case scenarios and extreme events. Essential for business continuity, reserve planning, and understanding tail risks.
๐ช Stress Testing Questions
๐
Event Risk
"What if every NFL favorite loses this Sunday?"
๐ฏ
Sharp Attack
"What if a syndicate targets our mispriced lines?"
๐
Correlation
"What if all same-game parlays hit simultaneously?"
Portfolio Settings
100000 2000000
2 15
Scenario Parameters
5 40
10 60
10 50
โ ๏ธ Summary
Expected Daily P&L +$40,000
Worst Case Loss $-260,000
Loss Multiple 6.5x expected
Scenario Analysis
Base Case
Normal operation
+$40,000
+8.0% margin
Upset Heavy Slate
Multiple favorites lose across all games
$-60,000
-12.0% margin
Correlated Losses
Same-game parlays all hit (QB + WR stacks)
$-96,000
-32.0% margin
Sharp Syndicate Attack
Coordinated sharp money exploits mispriced lines
$-25,500
-17.0% margin
Black Swan Event
Star player injury mid-game, mass cancelations
$-42,000
-42.0% margin
Maximum Adversarial
Perfect storm: upsets + correlations + sharps
$-260,000
-52.0% margin
90-Day P&L Simulation with Stress Events
Simulation includes 5% daily probability of stress event. Stress days show significant drawdowns.
๐ก๏ธ Risk Mitigation Strategies
Exposure Limits
- โ Cap single-event exposure (e.g., 5% of daily)
- โ Limit correlated parlay combinations
- โ Set per-player prop maximums
Dynamic Adjustments
- โ Move lines to balance exposure
- โ Reduce payouts on heavy action
- โ Suspend betting on suspicious patterns
Reserve Management
- โ Maintain cash reserves = 2-3x worst case
- โ Reinsurance for catastrophic events
- โ Circuit breakers for extreme losses
๐ Stress Testing Framework
1
Identify Risks
Brainstorm worst cases
2
Quantify Impact
Calculate $ exposure
3
Probability
Estimate likelihood
4
Mitigate
Implement controls
R Code Equivalent
# Stress testing framework
run_stress_test <- function(portfolio, scenarios) {
results <- lapply(scenarios, function(scenario) {
# Apply scenario to portfolio
stressed_pnl <- portfolio$exposure * (portfolio$hold_rate - scenario$shock) / 100
list(
scenario = scenario$name,
pnl = stressed_pnl,
loss_multiple = stressed_pnl / portfolio$expected_pnl
)
})
return(do.call(rbind, lapply(results, as.data.frame)))
}
# Define scenarios
scenarios <- list(
list(name = "Base Case", shock = 0),
list(name = "Upset Heavy", shock = 20),
list(name = "Correlated Losses", shock = 40),
list(name = "Sharp Attack", shock = 25),
list(name = "Black Swan", shock = 50)
)
# Run analysis
portfolio <- list(exposure = 500000, hold_rate = 8,
expected_pnl = 500000 * 8 / 100)
stress_results <- run_stress_test(portfolio, scenarios)
print(stress_results)โ Key Takeaways
- โข Stress tests answer "what if worst case happens?"
- โข Model correlationโindependent bets rarely all lose
- โข Reserve = 2-3x worst case scenario loss
- โข Combine historical and hypothetical scenarios
- โข Update scenarios as business evolves
- โข Test mitigations before crisis hits