Quantitative Methods & RiskPosition Sizing & Capital Allocation
The Kelly Criterion (and Why Full Kelly Is Violent)
The mathematically optimal bet size — and its sharp edges
Given a known edge, is there a single 'best' fraction of capital to bet? John Kelly answered yes in 1956: the fraction that maximizes the long-run growth rate of wealth — equivalently, the expected logarithm of wealth. The Kelly criterion is genuinely optimal for compounding, and it is also genuinely dangerous in practice, because it assumes you know your edge exactly (you don't) and it produces a wild, stomach-churning equity curve.
Kelly fraction (simple win/loss form)
f* = W − (1 − W) / b = (b·W − (1 − W)) / b
Kelly criterion
The bet fraction f* that maximizes the expected logarithm of wealth, and hence the long-run geometric growth rate. Betting more than f* lowers growth AND raises risk — it is strictly worse. Betting f* itself produces the fastest compounding but an extremely volatile equity path.
Full Kelly is brutal — expect ~50% drawdowns
At the full Kelly fraction, deep drawdowns are not a risk, they are a certainty: a full-Kelly bettor will, with high probability, at some point see the account cut roughly in half before recovering. Worse, Kelly assumes your estimated edge is exact. If you OVER-estimate your edge — which everyone does, because backtests overfit — you are effectively betting ABOVE full Kelly, where growth turns negative and ruin becomes likely. Almost nobody trades full Kelly.
Why over-betting Kelly is asymmetric
Growth rate g(f) is a concave curve peaking at f*
Betting 0.50× the Kelly fraction captures about 75% of the maximum long-run growth rate, while volatility scales roughly linearly with the fraction. You are at or under full Kelly. Fractional Kelly sacrifices a little growth for a large reduction in drawdown.
1def kelly_fraction(win_prob, reward_to_risk):2 """Growth-optimal fraction. Negative => no edge, bet nothing."""3 b = reward_to_risk4 f = win_prob - (1 - win_prob) / b5 return max(f, 0.0)67full = kelly_fraction(0.55, 1.0) # 0.10 -> 10% at full Kelly8half = full * 0.5 # 0.05 -> half-Kelly, far smoother9print(f"full Kelly = {full:.0%}, half Kelly = {half:.0%}")10# In practice traders use 1/4 to 1/2 Kelly because the true edge is11# never known exactly and over-betting is punished asymmetrically.
Knowledge check
A bet wins 60% of the time at even money (1:1). What is the full Kelly fraction, and what would a cautious trader more likely use?