Sitemap
Filippos Tzimopoulos

Filippos Tzimopoulos

Passionate about data, algo trading, and exploring market trends, I share insights backed by Python and real-world analysis. My blog https://www.filthegreek.com

Kelly Criterion for Traders: How Much Should You Risk Per Trade?

On a real 7,003-trade BTC-USD log, the growth-optimal bet makes a median 13x year and draws down 50% or more in every single path. The bet I would actually sit through is about a quarter of it.

11 min readNov 1, 2026

--

Press enter or click to view image in full size

In my last article, I risked a fixed 1% of starting capital on every trade, added it up rather than compounded it, and never asked whether 1% was the right number. I stated that assumption up front, but it left one of the most important trading decisions unexamined. The same trades can compound steadily or wreck an account, depending on one number: how much you bet each time.

The Kelly criterion is the textbook answer. It gives the bet size that maximizes long-run growth, and you have probably seen “Kelly Criterion” as an unexplained line in a backtest printout. This article rebuilds it from scratch on a real trade log, and then does the part the textbook skips: asks what the growth-optimal bet actually feels like to hold.

In a nutshell:

  • Learn Kelly from a coin flip, then compute it on 7,003 real BTC-USD trades.
  • Compound one year of trades at fractions of Kelly and watch growth and drawdown pull apart.
  • See how wrong a Kelly number can be when it comes from a small sample.
  • Find the practical rule: size to the drawdown you can survive, with Kelly as the ceiling.

In this article, I will be using the EODHD APIs. Join EODHD through my affiliate link for a 10% discount. Your signup also supports my work and helps fund the creation of new content.🙏🏻

The trade log, in brief

The raw material is the same strategy as last time, and its only job is to produce an honest trade log: BTC-USD 1-hour bars from 2021–09–29 to 2026–09–29, a 50/200 EMA crossover for entries, and a stop at 1.0x ATR(14) with a target at 2.0x ATR(14). Every trade ends at exactly -1R or +2R, where R is the amount you risk. A stop-out loses 1R and a target hit wins 2R. The stop is the price where you give up and take the loss, and the target is the price where you take your profit.

Rebuilding it from the EODHD feed gives 7,003 trades: 4,468 stop-outs (64%) and 2,535 target hits (36%), the same counts as last time. That structure leaves only two numbers to feed Kelly, the win rate and the payoff.

Kelly from a coin flip

Start with a coin that lands heads 60% of the time, paying even money. You can put in as much of your account as you like each flip. Bet everything and you eventually lose it all. Bet nothing and you earn nothing. Somewhere in between is the bet that grows the account fastest.

That bet is f* = p — q/b, where p is the chance of winning, q = 1 — p is the chance of losing, and b is how many times your stake you win. For the coin, that is 0.60–0.40/1 = 20% of the account per flip.

Press enter or click to view image in full size

As you can see, the curve is a hill, not a ramp. Growth peaks at 20%, falls away on both sides, and crosses zero at about 39%, roughly twice the Kelly bet. Past that point you are betting into a shrinking account even though every flip has positive expected value.

Why a hill? Because losses hurt more than equal wins help. Lose 50% of your account and you need a 100% gain just to get back to even, so the bigger the bets, the more the losing flips drag the compounding down. Kelly is the sweet spot between leaving growth on the table and being eaten by that drag.

Kelly on the real trade log

Same formula, real inputs. The win rate is 36.2% and the payoff is 2:1, so f* = 0.362–0.638/2 = 4.3% of equity per trade. Because every trade is exactly -1R or +2R, the formula is exact here. I checked it by brute force: searching for the bet that maximizes average growth over the 7,003 realized trades lands on the same 4.30%.

That also tells you where last time’s fixed 1% sat: at 0.23 times Kelly, roughly a quarter of the growth-optimal bet. Hold on to that number, because it turns out to matter.

What does “1x Kelly” mean?

Kelly is not a new unit like dollars or percent. It is a yardstick for your bet size. The Kelly fraction is the bet the formula gives you, here 4.3% of your account risked per trade, and that bet is called 1x Kelly (or full Kelly). Everything else is a multiple of it: half Kelly is half that bet, and 2x Kelly is double it.

“Risked” means what you lose if the trade goes wrong and hits its stop. On a $10,000 account, 1x Kelly risks about $430 per trade. If the stop is hit you lose $430, and if the trade reaches its profit target you win twice that, about $860. The fixed 1% from last time risks $100 (a win is $200), and 2x Kelly risks about $860 (a win is $1,720). Bigger multiples are not smarter bets, just bigger ones.

Percentages are what you actually trade, and multiples are how you compare. Take a made-up strategy that wins 55% of the time at even money. Its Kelly fraction is 10% of equity, so half Kelly is a 5% bet, against 2.15% for our BTC log. The percentages look nothing alike, but the picture is the same: half Kelly keeps about three quarters of the best growth, and 2x Kelly keeps almost none. In multiples, every strategy with a small to moderate edge shares that growth curve.

Let’s code: one year at every bet size

Now the part a textbook cannot do for you: what each bet size is like to live through. Every trade multiplies the account by 1 + f x R, so the account compounds. A drawdown is how far the account has fallen from its highest point so far, so a 50% drawdown means half the peak value is gone.

I use one year of trading, about 1,400 trades, which is this log’s pace. I bootstrap 10,000 such years: each one draws 1,400 trades at random from the real log, with replacement. Every bet size runs on the same 10,000 years, so differences between rows come from sizing alone, not luck. I stop at one year because five years of compounding at full Kelly would turn $1 into roughly $350,000, which no real edge supports.

def equity_paths(r_matrix, f):
"""Equity multiples (start = 1.0) when a fraction f of current equity is risked per trade."""
return np.exp(np.cumsum(np.log1p(f * r_matrix), axis=1))

def max_drawdown_pct(equity):
"""Largest peak-to-trough decline, as a fraction of the peak. Peak anchored at 1.0."""
ones = np.ones((equity.shape[0], 1))
peak = np.maximum.accumulate(np.concatenate([ones, equity], axis=1), axis=1)[:, 1:]
return (1.0 - equity / peak).max(axis=1)
paths_r = r[rng.integers(0, len(r), size=(10_000, 1_400))]

Here are the results for last time’s fixed 1%, then 0.25x to 2x Kelly:

Press enter or click to view image in full size

These are percentages of a compounding account, so do not compare them with the 38% from the last article, which added up fixed 1% bets. Compare through the fixed 1% row, which is the same bet. To read the columns on a $10,000 account:

  • Median year: half the simulated years did better and half worse. At 1x Kelly, 13.19x means about $131,900.
  • 5th percentile: the bad-luck year, which one in 20 years does worse than. At 1x Kelly, 0.30x means about $3,000.
  • 95th pct max drawdown: the worst fall from a peak, from the unlucky end. In 19 years out of 20 it was smaller than this. At 1x Kelly, 97% means $100,000 falling to about $3,000.
  • P(drawdown 50%+): the share of years where the account lost at least half its value at some point, even if it recovered.

A hundred of those years at three bet sizes show what the columns feel like:

Press enter or click to view image in full size

As you will notice, the three panels share one log scale, and the fan simply widens as the bet grows. At 1% the cloud stays tight around a 2.9x median. At full Kelly it spans from 0.3x at the 5th percentile to about 585x at the 95th, and that fat right tail is what the median hides.

The number this article exists for

Look at the 1x Kelly row again. The median year is the best in the table at 13.2x. It is also a bet where the 95th-percentile drawdown is 97%, a drawdown of 50% or more happens in every single year, and one year in four sees 90% or more of the account disappear at some point. About one year in seven ends below where it started.

Get Filippos Tzimopoulos’s stories in your inbox

Join Medium for free to get updates from this writer.

Back off to half Kelly and it is better but still brutal: a 77% drawdown at the 95th percentile, and a two-in-three chance of falling 50% or more at some point.

The growth-optimal bet is the one you cannot sit through. Kelly maximizes the rate your money compounds in the long run, and it does not care whether you survive the ride emotionally, financially, or in terms of margin calls.

Wrong both ways

Here is some consolation, and a warning. This is growth as a share of the maximum, as you move away from Kelly, where 75% means the account compounds at three-quarters of the best possible pace:

Press enter or click to view image in full size
Press enter or click to view image in full size

Underbetting is cheap. Half Kelly keeps 75% of the growth and quarter Kelly keeps 44%, while taking the 95th-percentile drawdown from 97% down to 77%. Overbetting is ruinous: 1.5x Kelly still keeps 76%, but 2x keeps 4%, growth hits zero at 2.02x Kelly, and past it the account shrinks on average, even with a strategy that wins money on every trade it takes.

Here is the warning. Everything above treats 4.30% as known, but in real life Kelly’s inputs are estimates. It is like judging a coin from a handful of flips: the fewer you see, the less you know. I drew random samples of n trades from the same log, estimated the win rate from each, and recomputed f* across 4,000 draws:

Press enter or click to view image in full size

From 40 trades, a perfectly normal backtest sample, the estimate runs from -12.5% (a negative number just means “do not take this trade”) to +21%, and 39% of the time it says not to trade at all. Even from all 7,003 it spans 2.8% to 5.7%, a 2x range. And this is the optimistic version, because it only resamples the same log, so a real out-of-sample shortfall would sit on top of it.

Sizing to a drawdown budget

So if Kelly is a ceiling and the estimate is noisy, what do you bet? The rule I would use: pick the drawdown you can sit through, then find the largest bet whose 95th-percentile one-year drawdown stays inside it. If a 30% fall would make you quit, 30% is your budget, and the bet has to be small enough that even a bad-luck year (one in 20) stays inside it. This ties back to the last article’s advice to size against the 95th-percentile drawdown, not the single drawdown the backtest happened to show.

I ran a fine grid of bet sizes on the same 10,000 years, traced the 95th-percentile drawdown curve, and read each budget off it:

Press enter or click to view image in full size
  • 20% budget: a bet of 0.37% of equity, which is 0.09x Kelly. It keeps 17% of the maximum growth, for a median year of 1.5x.
  • 30% budget: 0.59% of equity, 0.14x Kelly. It keeps 26% of the growth, for a median year of 1.9x.
  • 50% budget: 1.11% of equity, 0.26x Kelly. It keeps 45% of the growth, for a median year of 3.2x.

Even a generous 50% budget puts you at about a quarter of Kelly, and a 20% budget under a tenth. That is the finding the whole piece exists for. And notice where my fixed 1% from the last article lands: almost exactly on the 50% budget. I chose it as a round number, and it turned out to be a sensible one, but now I know what it was sensible for.

What this doesn’t do

The bet sizes above are only as good as the edge underneath them, and that is where I would be most careful.

  • The edge is thin once costs are priced in. Expectancy is only +0.086R per trade, and 1R is a median of just 0.56% of the entry price. A round-trip cost of 0.05% of price is already 0.10R per trade, which turns expectancy negative (-0.016R) and Kelly to zero. At 0.10% it is -0.118R.
  • A small drop in win rate wrecks overbetting. If the true win rate is 34% instead of 36.2%, the expected year at full backtest Kelly falls from about 13x to 0.26x, while a fixed 1% still returns 1.15x.
  • f* is in-sample. I computed Kelly on the same trades that generated the paths, so it carries all the optimism of a backtest. The “too clean” caveat from the last article (profitable every year, a median 2-hour hold) applies in full, and this article adds two things that one left out: no trading costs are modelled, and 1,400 trades a year is this log’s pace, not a real-world one.
  • Simplifications. Stops fill at exactly -1R, with no slippage or gap-through. Only one position is open at a time. Trades are treated as exchangeable, which I checked: a win follows a win 35.5% of the time and follows a loss 36.6%, and a block bootstrap gives nearly the same drawdowns as the plain one.

Final thoughts

What I would take away from this one:

  • Kelly is a ceiling, not a target. On this log it is 4.3% of equity per trade, and the account that follows it makes a 13x median year with a 97% drawdown at the 95th percentile.
  • Underbetting is cheap and overbetting is ruinous. Half Kelly keeps 75% of the growth. Double Kelly keeps about none.
  • Size to the drawdown you can survive. A 20% to 50% budget put the bet at 0.09x to 0.26x Kelly.
  • Do not trust a Kelly fraction from a small sample. From 40 trades it ranged from -12.5% to +21%, and the real edge may be thinner still after costs.

The actionable version: pick the drawdown you can honestly sit through, find the bet that fits it on a resampled year of your own trades, and treat Kelly as the line you do not cross, not the number you aim for.

Thank you for reading. I hope you enjoyed it. If you did, add ➕ it to your lists for future reference.

Come along on my data-driven investing journey! Follow me on Medium, Twitter (currently known as X), Bluesky (I am moving to the new Twitter) and Github. I’m all about simplicity and growth through coding, writing, and trying to understand data. 👍

This article may contain affiliate links. If you click and make a purchase, I may earn a commission at no additional cost to you. Thank you for being so supportive! 🫶🏻

You can also buy me a book 📖 to motivate me 🥸

Disclaimer: While we explore the exciting world of investing in this article, it’s crucial to note that the information provided is for educational purposes only. I’m not a financial advisor, and the content here doesn’t constitute financial advice. Always do your research and consider consulting with a professional before making any investment decisions.

--

--

Filippos Tzimopoulos

Written by Filippos Tzimopoulos

Passionate about data, algo trading, and exploring market trends, I share insights backed by Python and real-world analysis. My blog https://www.filthegreek.com