Skip to content
ArthaQuant

Kelly sizing for traders

Published
Updated
Topic
Risk Management
Reading time
6 min read

The Kelly criterion for sizing trades: the formula, why half Kelly keeps 75% of the growth, and how to use it when your edge is only an estimate.

Two traders can run the same strategy with the same signals and end up with completely different results. The difference is position sizing. Bet too small and a real edge compounds slowly. Bet too big and even a winning strategy can go to zero.

The Kelly criterion is the mathematical answer to "how much should I risk?" when the goal is long-run growth. This guide explains the formula, why almost everyone who uses it bets a fraction of it, and how to apply it without fooling yourself.

The idea

John Kelly, an engineer at Bell Labs, published the criterion in 1956. Edward Thorp later applied it to blackjack and then to markets. The idea is to choose the bet size that maximises the expected logarithm of wealth, which is the same as maximising the long-run growth rate of your capital.

Maximising the log has a useful property: it never risks everything, because the log of zero is minus infinity. Kelly sizing is aggressive when the edge is large and cautious when it is small.

The formula for a simple bet

For a bet you win with probability p and lose with probability q = 1 − p, where a win pays b times the amount staked:

f* = p − q / b = (b·p − q) / b

f* is the fraction of current capital to stake.

Worked example. A setup wins 55% of the time, and wins and losses are the same size (b = 1):

f* = 0.55 − 0.45 / 1 = 0.10

Kelly says to risk 10% of capital per trade. If the edge disappears (p = 0.5), f* drops to zero: no edge, no bet. If f* comes out negative, the formula is telling you to take the other side or stay out.

def kelly_fraction(p: float, b: float) -> float:
    """Kelly stake for a bet won with probability p that pays b per unit risked."""
    return p - (1 - p) / b

print(kelly_fraction(0.55, 1.0))  # 0.10
print(kelly_fraction(0.40, 2.0))  # 0.10: lower hit rate, bigger wins

The continuous version for trading

For a strategy with continuous returns, an expected excess return μ and volatility σ (both annualised), the Kelly leverage is approximately:

f* = μ / σ²

and the long-run growth rate at leverage f is approximately:

g(f) = r + f·μ − f²·σ² / 2

where r is the risk-free rate.

Worked example. A strategy earns 8% a year above the risk-free rate with 20% volatility. Kelly leverage is 0.08 / 0.04 = 2×. At that leverage, the excess growth rate is μ² / (2σ²) = 0.0064 / 0.08 = 8% a year, but with 40% annual volatility.

Note that Kelly leverage equals the Sharpe ratio divided by volatility (μ / σ² = (μ / σ) / σ). A higher Sharpe supports more leverage, and that is exactly why overestimating the Sharpe is so dangerous.

Why nobody bets full Kelly

The growth curve g(f) is a parabola, and its shape explains why practitioners scale down:

  • Half Kelly keeps 75% of the maximum growth rate with half the volatility. Plug f = f/2* into the formula: f·μ − f²σ²/2 = μ²/(2σ²) − μ²/(8σ²) = 3μ²/(8σ²), which is three quarters of the maximum.
  • Twice Kelly cuts the growth rate to zero: 2μ²/σ² − 2μ²/σ² = 0. Above that, expected growth turns negative even though every trade has a positive edge.

So the penalty for betting too small is mild, and the penalty for betting too big is severe. Since you never know your true edge, erring small is the rational choice.

The drawdowns are brutal

Under idealised continuous Kelly betting, the probability that your capital ever falls to a fraction x of its starting value is x itself. There is a 50% chance of halving at some point, and a 20% chance of losing 80%. With fractional Kelly at a fraction c, that probability becomes x raised to the power (2/c − 1). At half Kelly the chance of ever halving drops to 0.5³ = 12.5%.

def prob_ever_falls_to(x: float, kelly_multiple: float = 1.0) -> float:
    """Chance that wealth ever drops to fraction x of its start (idealised continuous model)."""
    return x ** (2 / kelly_multiple - 1)

for c in (1.0, 0.5, 0.25):
    print(c, round(prob_ever_falls_to(0.5, c), 3))
# 1.0 0.5   0.5 0.125   0.25 0.008

Few traders, and almost no clients, can sit through a 50% drawdown without changing the system. A sizing rule you abandon mid-drawdown is worse than a smaller one you keep.

Your inputs are estimates

Kelly assumes you know p and b, or μ and σ. You do not. You have estimates from a backtest, and the expected return is the least reliable of them. Our guide to the Sharpe ratio shows that three years of data can leave an annual Sharpe of 1.0 anywhere between about 0 and 2.

Because the penalty for overestimating is so much larger than the penalty for underestimating, sensible practice is to:

  1. Shrink the edge estimate before using it. Use out-of-sample results, not in-sample ones, and reduce them further if the strategy was chosen from many variants.
  2. Use a fraction of Kelly. A quarter to a half of the computed value is common.
  3. Cap the size of any single position however attractive Kelly says it is.
  4. Recompute as evidence accumulates, so position size follows the edge you actually observe live.

Several strategies at once

With several strategies or assets, the continuous Kelly solution becomes a vector: f = Σ⁻¹ μ, where Σ is the covariance matrix of returns. It sizes up uncorrelated sources of return and sizes down ones that move together. It is also extremely sensitive to estimation error in μ and Σ, so in practice it is applied with heavy shrinkage, or replaced by simpler rules such as risk parity with a fractional-Kelly overall leverage.

Practical rules that follow from Kelly

Even if you never compute f* exactly, the mathematics behind it supports a few habits:

  • Size by risk, not by conviction. Stake size should follow estimated edge and volatility, not how confident a trade feels.
  • Never risk ruin. Any strategy that can lose everything on one trade has a long-run growth rate of minus infinity.
  • Reduce size after the edge weakens, not just after losses. A drawdown is information about the edge as well as about luck.
  • Cap leverage at a level where an extreme day cannot end the account.

Summary

The Kelly criterion shows how to size bets for maximum long-run growth: f = p − q/b* for simple bets and f = μ/σ²* for continuous returns. Its practical lesson is asymmetry. Betting too little costs some growth, while betting too much destroys it. Because every input is an estimate, most practitioners bet a fraction of Kelly and cap their exposure, giving up a little growth for much smaller drawdowns.

This article is for education only and is not investment advice.

Read next

All writing