Bad Beat Generator

Correlated vs. Independent Variance — a bankroll simulator grounded in extreme-value number theory.
arXiv:2608.09906
"On the β=2 Partition function for Dirichlet L-functions in the q-aspect" (C. Atherfold). The paper studies how large a Dirichlet L-function can get as you scan across many characters mod a large prime q — its extreme values. It shows that for a large share of characters, the maximum stays close to log(q) (up to a log-log correction), matching the prediction for fields with log-correlated structure — the same universality class as branching random walks and the Gaussian free field, and the mechanism behind Fyodorov–Hiary–Keating-type extreme-value statistics for L-functions and the zeta function.

The plain-English point: when the underlying randomness is log-correlated instead of independent, extremes aren't just bigger on average — they cluster. This demo turns that into a bankroll story: two variance engines with the identical mean and per-step variance, one i.i.d., one log-correlated (built as a branching random walk). Watch what happens to the drawdowns.
How the log-correlated engine is built (branching random walk)
Build a binary tree of depth D = ⌈log₂(steps)⌉. Every node gets an independent N(0, σ²/D) increment. Each session's noise = the sum of increments along its root→leaf path, so every step still has mean μ and variance σ² — identical to the i.i.d. model. But two steps that share an ancestor up to level ℓ have covariance ≈ (ℓ/D)·σ², so nearby steps move together and the correlation only decays logarithmically with distance. That's the discrete toy model of a log-correlated field — running max of the path sum scales like D·(something) − (3/2)log D, not √D like an i.i.d. Gaussian max — which is the same scaling family (log of the range, not √log) behind the paper's log(q) bound.
Tree depth D=9 ·

Independent (i.i.d.) noise

Each step's win/loss is drawn independently. Same mean & variance as the model on the right.

Log-correlated noise (branching random walk)

Same per-step mean & variance — but steps share correlated ancestry, so streaks build and compound.

Worst drawdown per run — distribution across all Monte Carlo runs

i.i.d. drawdowns log-correlated drawdowns dashed line = mean of each distribution
i.i.d. mean drawdown
$0
correlated mean drawdown
$0
i.i.d. worst drawdown
$0
correlated worst drawdown
$0
worst-case blowup ratio
1.0×
Set your parameters and hit Re-roll & Simulate. Both engines share the exact same average edge and volatility — only the correlation structure differs. Your downswing wasn't impossible. Your variance model just assumed independence it shouldn't have.