The Kelly Criterion for Position Sizing: Maximize Growth Without Ruin
The Kelly criterion sizes positions to maximize the expected logarithm of wealth, which is the long-run compound growth rate. The mathematics is clean and the optimality is real — but it holds only when you know the edge exactly, and in trading you estimate it from noisy data. The central practical fact about the Kelly criterion is therefore not the formula but the asymmetry: plugging an overestimated edge into full Kelly is far more destructive than underbetting, and parameter uncertainty alone justifies betting a fraction of the theoretical optimum. This post derives Kelly, quantifies how estimation error degrades it, gives the drawdown distribution it implies, and covers the multivariate and fat-tailed corrections.
Why log-wealth, not expected value
Trading is multiplicative: each trade scales the capital available for the next, so terminal wealth is a product of gross returns, and the quantity that obeys a law of large numbers is the average log return. Maximizing expected log wealth maximizes the almost-sure long-run growth rate (Kelly 1956; Breiman 1961). It also has a built-in ruin avoidance: log(0) is negative infinity, so a log-utility maximizer never stakes the whole bankroll. Kelly is the most aggressive sizing that still keeps you in the game given perfect knowledge of the distribution.
The formulas
For a discrete bet with win probability p, loss probability q = 1 - p, and payoff ratio b (win size / loss size):
f* = (b*p - q) / b
For a continuous return stream with per-period mean mu and variance sigma^2, the optimal leverage is approximately:
f* = mu / sigma^2
and the resulting maximum growth rate is approximately SR^2 / 2 per unit time, where SR is the Sharpe ratio. This last identity is worth internalizing: a strategy with Sharpe 1.0 has a full-Kelly growth ceiling of about 0.5 (50% log-growth) per year — accompanied by volatility almost nobody can hold. Growth scales with the square of Sharpe, which is why edge quality matters far more than leverage.
The growth curve and the asymmetry of overbetting
The expected log growth as a function of bet fraction f for the discrete case is:
g(f) = p*ln(1 + b*f) + q*ln(1 - f)
This is a concave curve peaking at f and crossing zero again at a fraction beyond which growth turns negative despite a positive edge*. Two quantitative facts drive all practical Kelly usage:
- *Betting at half of
fretains about 75% of the maximum growth** while roughly
halving volatility. (Near the peak, growth is locally quadratic, so a fractional multiplier lambda of full Kelly keeps a fraction lambda*(2 - lambda) of peak growth: at lambda = 0.5 that is 0.75.)
- *Betting at double
fdrops growth back to zero.** You take maximal risk for no
reward.
Since your edge estimate is noisy and could be too high, the cost structure is deeply asymmetric: underbetting costs a little growth, overbetting can cross into negative growth and ruin. This asymmetry, not squeamishness, is why professionals fractional- Kelly.
Estimation error is the real problem
Full Kelly assumes mu and sigma^2 (or p and b) are known. They are estimated, and f = mu/sigma^2 is acutely sensitive to both — especially sigma^2 in the denominator and mu, which is the hardest moment to estimate. The standard error of a mean return is sigma/sqrt(T), so the relative error in your mu estimate is roughly 1/(SRsqrt(T)). For a Sharpe-1 strategy over one year, that relative error is about 100% — meaning your point estimate of f could easily be double the truth, and betting that estimate at full Kelly is exactly the double-f zero-growth disaster above.
A Bayesian treatment makes this precise: integrating over the posterior uncertainty in mu shrinks the optimal fraction below the plug-in value. The practical shortcut that approximates this shrinkage is fractional Kelly. The noisier your edge estimate (short sample, unstable regime, alternative data), the smaller the fraction.
| Fraction of full Kelly | Approx. % of peak growth | Relative volatility | When to use |
|---|---|---|---|
| 1.0 (full) | 100% | 1.0 | Never, in practice |
| 0.5 (half) | ~75% | ~0.5 | Stable, well-estimated edge |
| 0.25 (quarter) | ~44% | ~0.25 | Noisy edge, fat tails |
| 0.1 | ~19% | ~0.1 | Highly uncertain / new strategy |
The drawdown distribution Kelly implies
A result that should temper any enthusiasm for full Kelly: in the idealized continuous (GBM) model, betting a fraction lambda of full Kelly, the probability that wealth ever falls to a fraction x of a prior peak is approximately:
P(ever draw down to fraction x) ≈ x^((2 - lambda) / lambda)
At full Kelly (lambda = 1) this is just x: a 50% chance of a 50% drawdown at some point, a 20% chance of an 80% drawdown. At half Kelly (lambda = 0.5) it is x^3: the chance of ever halving is 0.5^3 = 12.5%. Fractional Kelly does not merely reduce volatility linearly — it cuts the probability of deep drawdowns superlinearly, which is the real reason it dominates full Kelly for anyone with finite risk tolerance.
Computing Kelly with safeguards in Python
import numpy as np
import pandas as pd
def kelly_from_returns(returns: pd.Series, periods=252, fraction=0.5,
lev_cap=2.0, shrink=True):
"""Fractional, estimation-aware Kelly leverage from a return series."""
r = returns.dropna().to_numpy()
T = r.size
mu = r.mean() * periods
var = r.var(ddof=1) * periods
sharpe = mu / np.sqrt(var)
full = mu / var
# James-Stein-style shrinkage of the edge toward zero to reflect that
# the mean is estimated with relative error ~ 1/(SR*sqrt(T)).
if shrink and sharpe != 0:
rel_err = 1.0 / (abs(sharpe) * np.sqrt(T))
shrink_factor = 1.0 / (1.0 + rel_err**2)
full *= shrink_factor
target = fraction * full
return float(np.clip(target, -lev_cap, lev_cap)), full, sharpe
def kelly_growth(f, p, b):
return p*np.log(1 + b*f) + (1-p)*np.log(1 - f)
The shrinkage term is the important addition over a naive mu/sigma^2: it automatically pulls leverage toward zero when the edge is poorly estimated, and the hard lev_cap protects against the case where a too-low volatility estimate makes the formula spit out an absurd 8x.
Multiple correlated positions
The single-bet formula assumes one position at a time. For a vector of correlated assets, the Kelly weights are approximately:
f* = inverse(Sigma) @ mu
where mu is the vector of expected excess returns and Sigma the covariance matrix — the same mathematics as mean-variance optimization. Positive correlation between holdings reduces the total size you should take, because correlated bets are one larger bet in disguise. Kelly-sizing each position independently and ignoring Sigma is a classic route to accidental gross over-betting, and Sigma is itself estimated with error, compounding the problem — which is why covariance shrinkage and risk-parity-style robustness are common in practice.
Honest limitations
- Fat tails break the log-normal premise. Kelly's continuous form assumes
approximately Gaussian returns; real tails mean realized variance exceeds your estimate and full Kelly is effectively over-betting even if your point estimates are right. Discount further for left-tailed strategies.
- Non-stationary edges. A
pof 0.55 in backtest may be 0.51 live; Kelly assumes a
constant, known edge.
- Transaction costs and capacity. High-turnover Kelly sizing ignores
transaction costs and market impact, which both cap the usable fraction.
- Utility mismatch. Log utility is a specific risk preference. If your real
constraint is a drawdown limit or a fixed horizon, size to that constraint directly rather than to growth-optimality.
A worked compounding example
Take the discrete edge p = 0.55, b = 1, giving full Kelly f* = (0.55 - 0.45)/1 = 0.10. The expected log growth per trade at full Kelly is:
g(0.10) = 0.55*ln(1.10) + 0.45*ln(0.90)
≈ 0.55*0.0953 + 0.45*(-0.1054)
≈ 0.00497 per trade
Over 200 independent trades that compounds to roughly exp(0.00497 200) ≈ 2.7x. Now compare bet sizes on the same edge: at half Kelly (f = 0.05), per-trade growth is about 0.00373 — roughly 75% of the full-Kelly rate, exactly as the quadratic approximation predicts — but with about half the volatility and, from the drawdown formula above, an order-of-magnitude lower probability of a deep drawdown. At f = 0.25 (2.5x full Kelly) the per-trade growth turns negative: despite a genuine 55% edge, the clustering of losing trades drives compounded wealth down over time. This U-shaped relationship between bet size and growth — rising to the Kelly peak, then collapsing past it — is the entire practical argument for staying on the conservative side of f.
Putting it together
A defensible Kelly workflow: estimate the edge from a robust backtest and be explicit about how noisy that estimate is; apply a fractional multiplier (0.25-0.5) that reflects the noise; size the portfolio with the covariance matrix rather than each trade in isolation; impose a hard leverage cap independent of the formula; tie the fraction to a drawdown budget using Monte Carlo stress tests and the drawdown formula above; and combine with risk-of-ruin analysis and volatility targeting to keep realized risk stable across regimes. Scale down further in live trading until results confirm the backtested edge.
Conclusion
The Kelly criterion answers position sizing optimally — but only for a known edge, and you never have one. Its honest application is fractional Kelly, justified not by timidity but by the mathematics of estimation error and the superlinear reduction in deep-drawdown probability. Full Kelly is a knife-edge that punishes the slightest overestimate; half or quarter Kelly keeps most of the growth with a fraction of the pain. Shrink the edge for estimation noise, size the whole correlated book together, cap leverage hard, and integrate it with drawdown limits and risk management so a real edge becomes long-run growth rather than an eventual blowup.
