Bankroll Management with Keeks: Fractional Kelly

In our previous post on the Kelly Criterion, we explored the mathematically optimal strategy for maximizing long-term bankroll growth. Today, we’ll look at a popular variation: Fractional Kelly, which trades some theoretical growth for reduced volatility and better sleep at night.

What is Fractional Kelly?

Fractional Kelly is exactly what it sounds like: you calculate the standard Kelly bet size and then bet a fraction of that amount. For example, “Half Kelly” means betting 50% of what the full Kelly Criterion recommends.

The formula is simple:

Fractional Kelly bet = f * (Kelly bet)

Where f is the fraction you choose (commonly 0.5, 0.33, or 0.25).

Why Use Fractional Kelly?

While full Kelly is mathematically optimal for maximizing long-term growth, it comes with significant drawbacks:

  1. High volatility: Full Kelly can lead to substantial drawdowns
  2. Sensitivity to errors: If your probability estimates are off, Kelly can recommend too large a bet
  3. Psychological stress: The swings can be difficult to handle emotionally

Fractional Kelly addresses these issues by sacrificing some theoretical growth rate for much lower volatility and risk.

Bankroll Comparison

As you can see in the chart above, Full Kelly provides the highest potential growth but with significant volatility. Half Kelly and Quarter Kelly offer smoother growth curves with less dramatic drawdowns.

The Math Behind Fractional Kelly

The expected growth rate of your bankroll using a fraction f of the Kelly bet can be approximated as:

G(f) ≈ r + f*K - f²*K/2

Where:

  • r is the risk-free rate
  • K is the Kelly edge

This approximation reveals something fascinating: using Half Kelly (f=0.5) gives you about 75% of the optimal growth rate while reducing variance by 50%. Using Quarter Kelly (f=0.25) gives you about 44% of the optimal growth rate while reducing variance by 75%. The exact relationship is more complex, but this captures the key insight: you sacrifice relatively little growth for a significant reduction in volatility.

Growth Rate vs Fraction

The graph above shows how the growth rate changes with different fractions of Kelly. Notice that the growth rate peaks at f=1.0 (Full Kelly) and then decreases as you bet more than the Kelly recommendation.

Implementing Fractional Kelly with Keeks

The keeks library makes it easy to compare different Kelly fractions. Let’s set up our strategies and run a simulation:

from keeks.bankroll import BankRoll
from keeks.binary_strategies.kelly import KellyCriterion
from keeks.binary_strategies.fractional_kelly import FractionalKellyCriterion
from keeks.simulators.repeated_binary import RepeatedBinarySimulator

# Simulation parameters
PAYOFF = 1.0      # Win $1 for every $1 risked
LOSS = 1.0        # Lose $1 for every $1 risked
PROBABILITY = 0.55  # 55% win rate
TRIALS = 500

# Create our strategies
strategies = {
    'Full Kelly': KellyCriterion(payoff=PAYOFF, loss=LOSS, transaction_cost=0),
    '75% Kelly': FractionalKellyCriterion(payoff=PAYOFF, loss=LOSS, transaction_cost=0, fraction=0.75),
    '50% Kelly': FractionalKellyCriterion(payoff=PAYOFF, loss=LOSS, transaction_cost=0, fraction=0.5),
    '25% Kelly': FractionalKellyCriterion(payoff=PAYOFF, loss=LOSS, transaction_cost=0, fraction=0.25),
}

# Create the simulator
simulator = RepeatedBinarySimulator(
    payoff=PAYOFF,
    loss=LOSS,
    transaction_costs=0,
    probability=PROBABILITY,
    trials=TRIALS
)

# Run simulations for each strategy
for name, strategy in strategies.items():
    bankroll = BankRoll(initial_funds=1000.0, max_draw_down=0.5)
    simulator.evaluate_strategy(strategy, bankroll)

    print(f"{name}:")
    print(f"  Final bankroll: ${bankroll.total_funds:.2f}")
    print(f"  Peak bankroll: ${max(bankroll.history):.2f}")

Final Bankroll Distribution

The distribution of final bankrolls shows that Full Kelly has the widest spread of outcomes, while more conservative fractions have narrower distributions centered around lower values.

Risk-Adjusted Performance

When evaluating different Kelly fractions, it’s important to consider risk-adjusted metrics like Sharpe ratio, maximum drawdown, and risk of ruin:

Risk Metrics

As you can see, more conservative Kelly fractions often have better risk-adjusted performance metrics, even though their absolute returns may be lower.

Adaptive Fractional Kelly

One advanced approach is to adjust your Kelly fraction based on your current bankroll or market conditions:

Adaptive Kelly

This adaptive approach can help you be more aggressive when your bankroll is healthy and more conservative when you’ve experienced drawdowns.

Practical Recommendations

Based on both theory and empirical evidence, here are some practical recommendations for using Fractional Kelly:

  1. For most individual investors/bettors: Use 25% to 50% Kelly. This provides a good balance between growth and risk.

  2. For professional money managers: Many use 10% to 20% Kelly to ensure client funds are managed conservatively.

  3. For aggressive traders with high risk tolerance: 50% to 75% Kelly might be appropriate, but never exceed full Kelly.

  4. When uncertainty is high: Reduce your Kelly fraction further to account for potential errors in your probability estimates.

  5. When your bankroll is small: Consider using a more conservative fraction until your bankroll grows.

Implementing Fractional Kelly for Sports Betting

Here’s a practical example for sports betting using keeks:

from keeks.bankroll import BankRoll
from keeks.binary_strategies.fractional_kelly import FractionalKellyCriterion

# Standard -110 odds: risk $110 to win $100
PAYOFF = 100 / 110  # ~0.91
LOSS = 1.0

# Your estimated probability and bankroll
win_probability = 0.55
bankroll = BankRoll(initial_funds=10000.0, max_draw_down=0.3)

# Calculate bet sizes for different Kelly fractions
fractions = [0.25, 0.5, 0.75, 1.0]

for f in fractions:
    strategy = FractionalKellyCriterion(
        payoff=PAYOFF,
        loss=LOSS,
        transaction_cost=0,
        fraction=f
    )
    bet_size = strategy.evaluate(win_probability, bankroll.total_funds)
    print(f"{int(f*100)}% Kelly: ${bet_size:.2f}")

Conclusion

Fractional Kelly represents a practical compromise between mathematical optimality and real-world constraints. By sacrificing some theoretical growth, you gain significant benefits in terms of reduced volatility, lower drawdowns, and better psychological comfort.

The choice of which fraction to use depends on your specific circumstances, risk tolerance, and confidence in your probability estimates. For most people, Half Kelly or Quarter Kelly provides an excellent balance between growth and risk management.

In our next post, we’ll explore another variation: Drawdown-Adjusted Kelly, which dynamically adjusts your bet sizing based on recent performance.