5D Library › Non-Ergodic Wealth Dynamics, the Kelly Criterion and Volatility Drag · 中文

Chapter 3 The Kelly Criterion and Fractional Kelly

From a telephone line to the betting table

In 1956 John Kelly of Bell Laboratories published a paper titled “A New Interpretation of Information Rate”. He imagined a gambler who receives, over a noisy private telephone wire, partial advance information about the results of horse races, and asked: how much of his wealth should he bet on each race? Kelly showed that, when the odds are fair, the maximum long-run growth rate of wealth under optimal betting equals exactly the information transmission rate of the channel (Kelly 1956). Breiman then proved that, under quite general conditions, this strategy in the long run almost surely outperforms any essentially different strategy, and asymptotically minimises the expected time to reach a large wealth goal (Breiman 1961).

The core of the Kelly criterion is the conclusion of Chapter 1: in repeated multiplicative bets, what should be maximised is the expected growth rate of log wealth, not expected wealth.

The formula

A bet is won with probability p, paying b times the stake, and lost with probability q = 1 − p, losing the stake. Staking a fraction f of wealth each time, the long-run growth rate is

G(f)=pln⁡(1+bf)+qln⁡(1−f)G(f) = p\ln(1 + bf) + q\ln(1 – f)

Setting the derivative with respect to f to zero gives the Kelly fraction:

f*=bp−qbf^* = \frac{bp – q}{b}

The numerator bp − q is the expected gain per unit staked (the “edge”); the denominator b is the odds. With no edge, f* = 0: do not bet. For continuous-time investment (Chapter 2) the same derivation gives f* = (μ − r)/σ2, the peak of Chapter 2’s parabola.

Calculation

An even-money bet won 55 % of the time. Growth rates for different fractions, and a simulation of 2,000 sequences of 1,000 bets each.

# The Kelly criterion for a simple bet: win b times the stake with probability p, lose
# the stake with probability q = 1 - p. Staking a fraction f of wealth each time gives
# the long-run growth rate  G(f) = p ln(1 + b f) + q ln(1 - f),
# maximised at  f* = (b p - q) / b.
import math, random, statistics

p, b = 0.55, 1.0                      # an even-money bet won 55 % of the time
q = 1 - p
fstar = (b * p - q) / b
G = lambda f: p * math.log(1 + b * f) + q * math.log(1 - f)
print(f"edge b p - q = {b * p - q:.2f}; Kelly f* = {fstar:.3f}; G(f*) = {G(fstar):.5f} a bet")
print(f"{'fraction':>12} {'f':>6} {'G(f) per bet':>13} {'share of max growth':>20}")
for k in (0.25, 0.5, 1.0, 1.5, 2.0, 2.5):
    f = k * fstar
    print(f"{k:9.2f} x f* {f:6.3f} {G(f):+13.5f} {G(f) / G(fstar):20.0%}")
# Small-edge (continuous) approximation: G(c f*) / G(f*) = c (2 - c). Half Kelly keeps
# 75 % of the growth with half the volatility; twice Kelly gives zero growth.
print("continuous approximation c(2 - c): "
      + ", ".join(f"c = {c}: {c * (2 - c):.0%}" for c in (0.5, 1, 1.5, 2)))

random.seed(11)
def run(f, n=1000):
    w, peak, dd = 1.0, 1.0, 0.0
    for _ in range(n):
        w *= (1 + b * f) if random.random() < p else (1 - f)
        peak = max(peak, w); dd = max(dd, 1 - w / peak)
    return w, dd
print(f"\n2,000 sequences of 1,000 bets each")
print(f"{'fraction':>10} {'median final':>13} {'10th pct':>10} {'median max drawdown':>20}")
for k in (0.5, 1.0, 2.0):
    res = [run(k * fstar) for _ in range(2000)]
    fin = sorted(w for w, _ in res)
    dd = statistics.median(d for _, d in res)
    med, p10 = statistics.median(fin), fin[len(fin) // 10]
    print(f"{k:7.1f} f* {med:13.1f} {p10:10.2f} {dd:20.0%}")
# edge b p - q = 0.10; Kelly f* = 0.100; G(f*) = 0.00501 a bet
#     fraction      f  G(f) per bet  share of max growth
#      0.25 x f*  0.025      +0.00219                  44%
#      0.50 x f*  0.050      +0.00375                  75%
#      1.00 x f*  0.100      +0.00501                 100%
#      1.50 x f*  0.150      +0.00374                  75%
#      2.00 x f*  0.200      -0.00014                  -3%
#      2.50 x f*  0.250      -0.00673                -134%
# continuous approximation c(2 - c): c = 0.5: 75%, c = 1: 100%, c = 1.5: 75%, c = 2: 0%
#
# 2,000 sequences of 1,000 bets each
#   fraction  median final   10th pct  median max drawdown
#     0.5 f*          47.1       6.37                  61%
#     1.0 f*         122.4       2.70                  90%
#     2.0 f*           0.9       0.00                 100%

Some results worth remembering:

  • Half Kelly (staking f*/2) keeps about 75 % of the long-run growth with half the volatility of full Kelly. In the small-edge continuous approximation, staking c times the Kelly fraction yields c(2 − c) times the maximum growth.
  • Twice Kelly gives roughly zero growth (slightly negative in this discrete example): twice the risk of full Kelly with no excess growth at all.
  • Full Kelly paths are extremely bumpy: over 1,000 bets the median largest drawdown is about 90 %. The Kelly criterion maximises long-run growth and cares nothing for the pain along the way.

The parameters are estimates

The formula assumes p and b, or μ and σ, are known. In reality they are estimated from finite data, and the expected return is the hardest parameter of all to estimate: Merton pointed out that greater precision in estimating expected returns needs a longer time span, not more frequent sampling (Merton 1980); Chopra and Ziemba found that in portfolio optimisation errors in estimated expected returns cost far more than errors in variances and covariances (Chopra and Ziemba 1993).

Suppose the true excess return is m, the investor estimates it from T years of data with standard error σ/√T, and then stakes c times the Kelly fraction implied by the estimate. The expected excess growth rate can be computed exactly:

E[g]=cm2−12c2(m2+s2)σ2,s=σ/TE[g] = \frac{c\,m^2 – \tfrac{1}{2}c^2(m^2 + s^2)}{\sigma^2},\quad s = \sigma/\sqrt{T}

It is maximised at c* = m2/(m2 + s2) < 1: the less precise the estimate, the less one should bet.

Calculation

True excess return 4 %, volatility 18 % (illustrative). The expected excess growth of different multiples of Kelly when the edge is estimated from 5 to 100 years of data; then, in the continuous model, the probability that wealth ever falls to x times its starting value.

# Kelly with an estimated edge. The investor does not know the excess return m = mu - r;
# she estimates it from T years of data, m_hat ~ Normal(m, s^2), s = sigma / sqrt(T),
# and invests the fraction f = c * m_hat / sigma^2 (c = 1: full Kelly on the estimate).
# Expected excess growth a year:
#   E[f m - f^2 sigma^2 / 2] = (c m^2 - c^2 (m^2 + s^2) / 2) / sigma^2,
# maximised at c* = m^2 / (m^2 + s^2) < 1.
import math, random

m, sigma = 0.04, 0.18                # illustrative: excess return 4 %, volatility 18 %
best = m ** 2 / (2 * sigma ** 2)
print(f"true Kelly fraction m/sigma^2 = {m / sigma ** 2:.2f}; best excess growth {best:.4f}")
print("expected excess growth as a share of the best, for multiples c of Kelly")
print(f"{'years of data':>14} {'s.e. of m':>10} {'c*':>5}"
      + "".join(f"{'c = ' + str(c):>9}" for c in (0.25, 0.5, 1.0, 2.0)))
for T in (5, 10, 20, 50, 100):
    s = sigma / math.sqrt(T)
    eg = lambda c: (c * m ** 2 - c ** 2 * (m ** 2 + s ** 2) / 2) / sigma ** 2
    cstar = m ** 2 / (m ** 2 + s ** 2)
    print(f"{T:14d} {s:10.3f} {cstar:5.2f}"
          + "".join(f"{eg(c) / best:9.0%}" for c in (0.25, 0.5, 1.0, 2.0)))
# Check one row by simulation.
random.seed(5)
T = 20; s = sigma / math.sqrt(T)
sims = [random.gauss(m, s) for _ in range(200_000)]
for c in (0.5, 1.0):
    fs = [c * x / sigma ** 2 for x in sims]
    val = sum(f * m - f * f * sigma ** 2 / 2 for f in fs) / len(fs)
    print(f"simulation, {T} years of data, c = {c}: {val / best:.0%} of best")
# Drawdowns. In the continuous model, investing c times the (true) Kelly fraction, the
# probability that wealth (relative to the risk-free asset) EVER falls to a fraction x of
# its starting value is x^(2/c - 1).
print("\nprobability of ever falling to a fraction x of the start")
print(f"{'c':>6}" + "".join(f"{'x = ' + str(x):>10}" for x in (0.8, 0.5, 0.2)))
for c in (0.25, 0.5, 1.0, 1.5):
    print(f"{c:6.2f}" + "".join(f"{x ** (2 / c - 1):10.1%}" for x in (0.8, 0.5, 0.2)))
# true Kelly fraction m/sigma^2 = 1.23; best excess growth 0.0247
# expected excess growth as a share of the best, for multiples c of Kelly
#  years of data  s.e. of m    c* c = 0.25  c = 0.5  c = 1.0  c = 2.0
#              5      0.080  0.20      18%     -26%    -305%   -1620%
#             10      0.057  0.33      31%      24%    -102%    -810%
#             20      0.040  0.50      37%      50%      -1%    -405%
#             50      0.025  0.71      41%      65%      60%    -162%
#            100      0.018  0.83      42%      70%      80%     -81%
# simulation, 20 years of data, c = 0.5: 50% of best
# simulation, 20 years of data, c = 1.0: -1% of best
#
# probability of ever falling to a fraction x of the start
#      c   x = 0.8   x = 0.5   x = 0.2
#   0.25     21.0%      0.8%      0.0%
#   0.50     51.2%     12.5%      0.8%
#   1.00     80.0%     50.0%     20.0%
#   1.50     92.8%     79.4%     58.5%

The table’s message is direct. With these parameters, even with 20 years of data, full Kelly on the estimate has an expected excess growth close to zero, while half Kelly keeps half the maximum; with only 5 to 10 years of data, the expected result of full Kelly is far worse than taking no risk at all. The negative numbers are not misprints: estimation error makes the stake sometimes too large and sometimes in the wrong direction, and the quadratic penalty outweighs the linear gain.

Evidence

Drawdowns. In the continuous model, staking c times the Kelly fraction, the probability that wealth (relative to the risk-free asset) ever falls to x times its starting value is x2/c−1. Under full Kelly the probability of ever being halved is 50 %, and of ever falling to a fifth of the start 20 %; under half Kelly these probabilities are 12.5 % and 0.8 %. Thorp, and MacLean, Thorp and Ziemba, discuss these “bad properties” of full Kelly and give them as the main reason for using fractional Kelly in practice (Thorp 2006; MacLean et al. 2011).

Evidence

Kelly and the stock market. Rotando and Thorp applied the Kelly criterion to a stock index and discussed the practical problems of using it in real markets (Rotando and Thorp 1992). As shown above, the estimated optimal leverage is very sensitive to the assumed expected return; Chapter 6 shows that fat tails in the return distribution lower it further. Samuelson, from theory, opposed making the maximisation of log wealth everyone’s goal: a person more risk-averse than the logarithm should choose a strategy more conservative than Kelly even over a very long horizon (Samuelson 1979). Seen this way, fractional Kelly is not only a correction for parameter error but also a respect for differing attitudes to risk.

Hypothesis · not established

The “Kelly multiple = confidence” hypothesis (not yet established). When parameters are uncertain, the Kelly multiple c a person ought to bet is roughly the “signal share” of his estimate, m2/(m2 + s2); people generally overestimate that share (overconfidence), so the multiples they actually bet are systematically above c. If, in an experiment, participants told the precision of their estimates choose multiples that do not vary with that precision, or that are on average below c, the hypothesis is weakened.

Summary

The Kelly criterion gives the betting fraction that maximises long-run growth, f* = (bp − q)/b, or (μ − r)/σ2 in continuous form. Half Kelly keeps about three-quarters of the growth with half the volatility; twice Kelly has zero excess growth. Full Kelly’s drawdowns are very deep: the probability of ever being halved is 50 %. More important still, the expected return can be estimated only roughly; betting full Kelly on the estimate can have an expected result worse than taking no risk, and the best multiple falls as the precision of the estimate falls. The next chapter discusses another limit: when there is rigid spending that must be paid every month, “zero” is not merely a mathematical limit but an absorbing barrier.

References

Breiman, Leo. 1961. “Optimal Gambling Systems for Favorable Games.” Proceedings of the Fourth Berkeley Symposium on Mathematical Statistics and Probability 1: 65–78.
Chopra, Vijay K., and William T. Ziemba. 1993. “The Effect of Errors in Means, Variances, and Covariances on Optimal Portfolio Choice.” Journal of Portfolio Management 19 (2): 6–11.
Kelly, Jr., John L. 1956. “A New Interpretation of Information Rate.” Bell System Technical Journal 35 (4): 917–26.
MacLean, Leonard C., Edward O. Thorp, and William T. Ziemba, eds. 2011. The Kelly Capital Growth Investment Criterion: Theory and Practice. World Scientific.
Merton, Robert C. 1980. “On Estimating the Expected Return on the Market: An Exploratory Investigation.” Journal of Financial Economics 8 (4): 323–61.
Rotando, Louis M., and Edward O. Thorp. 1992. “The Kelly Criterion and the Stock Market.” American Mathematical Monthly 99 (10): 922–31.
Samuelson, Paul A. 1979. “Why We Should Not Make Mean Log of Wealth Big Though Years to Act Are Long.” Journal of Banking and Finance 3 (4): 305–7.
Thorp, Edward O. 2006. “The Kelly Criterion in Blackjack, Sports Betting, and the Stock Market.” In Handbook of Asset and Liability Management, Volume 1, edited by Stavros A. Zenios and William T. Ziemba. Elsevier.

Fan, Y. (2026). Non-Ergodic Wealth Dynamics, the Kelly Criterion and Volatility Drag: From Itô's Lemma on Geometric Brownian Motion and Ruin Barriers to Barbell Portfolios, Read Beside the Shiji's 'Biographies of the Money-Makers' [非遍历性财富动力学、凯利准则与波动率税] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23754709 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).