De Kelly Criterion formule programmeren in Python
Je zit achter je scherm, je hebt een backtest die loopt en je ziet winst. Maar hoeveel risico neem je eigenlijk?
De Kelly Criterion is een formule die precies die vraag beantwoordt. Het vertelt je welk deel van je kapitaal je in moet zetten op een trade, gebaseerd op je verwachte winst en verlies.
In de wereld van algoritmische trading bots is dit het verschil tussen een bot die langzaam sputtert en een bot die compound interest gebruikt als een raket. Stel je voor: je hebt een Python script dat handelt via de API van Interactive Brokers of Alpaca. Je backtest laat een positieve expectancy zien.
Zonder Kelly Criterion riskeer je te veel op één trade en raak je snel je account kwijt. Met Kelly bepaal je de optimale grootte van je positie, zodat je account groeit zonder onnodige klappen. Het is de basis voor elk risicomanagement systeem in Python.
Wat is de Kelly Criterion eigenlijk?
De Kelly Criterion is een formule die berekent welk percentage van je kapitaal je moet inzetten bij elke trade om je vermogen op de lange termijn maximaal te laten groeien.
De formule ziet er zo uit: f = (bp - q) / b, waarbij f het deel van je kapitaal is, b de odds (hoeveel je wint per euro ingezet), p de kans op winst en q de kans op verlies (q = 1 - p). Stel je hebt een strategie die 60% van de trades wint. Je wint €2 per gewonnen trade en verliest €1 per verloren trade. Dan is b = 2, p = 0.6 en q = 0.4.
De Kelly formule geeft dan f = (2 * 0.6 - 0.4) / 2 = 0.4. Je moet dus 40% van je kapitaal inzetten.
Dat klinkt hoog, maar het is de optimale groei op de lange termijn.
In de praktijk gebruiken traders vaak een halve Kelly (20%) om volatiliteit te beperken.
Waarom is dit crucial voor je Python trading bot?
Je backtest laat misschien een mooi equity curve zien, maar zonder position sizing gaat het mis.
Als je bot willekeurig €100 per trade inzet, kan een reeks verliezen je account vernietigen. Met Kelly bepaal je dynamisch hoeveel je inzet, afhankelijk van je kapitaal en de verwachte return.
Dit is vooral belangrijk bij hoge frequentie trading of wanneer je meerdere strategieën combineert. Stel je gebruikt een Python bot die handelt op Binance Futures met 10x hefboom. Zonder Kelly zet je misschien €1000 in op één trade, wat neerkomt op €10.000 exposure. Als de markt tegen je ingaat, verlies je snel je margin.
Met Kelly bereken je dat je bijvoorbeeld maar €200 moet inzetten (2% van je kapitaal) om de groei te optimaliseren.
Dit vermindert het risico op een margin call en houdt je bot langer in de lucht.
De kern van de Kelly formule programmeren in Python
Om de Kelly Criterion te programmeren, begin je met een eenvoudige functie die de inputs neemt: winstpercentage, winst per trade en verlies per trade. Wil je meer leren over Python in algoritmische trading? Hier is een basisvoorbeeld in Python:
def kelly_criterion(win_prob, win_amount, loss_amount):
q = 1 - win_prob
b = win_amount / loss_amount
kelly_fraction = (win_prob * b - q) / b
return max(0, kelly_fraction) # Negatieve Kelly betekent niet handelen
Deze functie retourneert het optimale deel van je kapitaal om in te zetten.
Als je win_prob 0.6 is, win_amount €2 en loss_amount €1, krijg je 0.4 terug. In een trading bot koppel je dit aan je portefeuille.
Bijvoorbeeld: inzet = kelly_fraction * je huidige kapitaal. Als je kapitaal €10.000 is, zet je €4.000 in op de volgende trade. Voor een meer robuuste implementatie voeg je error handling toe en pas je toe op historische data.
Gebruik libraries zoals pandas voor data-analyse en numpy voor berekeningen. Vermijd trage loops in Pandas voor je backtest resultaten, zoals die van Backtrader of Zipline.
Integreer dit met je broker API, bijvoorbeeld via de Interactive Brokers TWS API, om automatisch positie sizes te sturen.
Varianten en modellen voor praktisch gebruik
De standaard Kelly formule gaat uit van een binomiale verdeling, maar in de echte markt heb je te maken met continu prijsbewegingen en variabele volatiliteit.
Daarom zijn er varianten zoals de Half-Kelly (f/2) om risico te verlagen. Een andere aanpak is de Fractional Kelly, waarbij je een factor tussen 0 en 1 toepast, zoals 0.25 voor conservatief beheer. Voor een bot die handelt op indices zoals de S&P 500 via een broker als DEGIRO, kun je de Kelly fraction aanpassen op basis van implied volatility uit optieprijzen. Een geavanceerd model is de Continuous Kelly, voor strategieën die constant rebalancen, zoals in crypto trading bots.
Hier gebruik je de log-return formule in plaats van discrete trades. Voorbeeld: in Python met numpy, bereken je de verwachte log-return uit je historische data en pas je de Kelly formule toe op de resulterende odds.
Prijzen voor data feeds liggen rond €50-€100 per maand voor kwalitatieve API's zoals die van Polygon.io.
Voor risicomanagement combineer je Kelly met andere technieken, zoals stop-losses of volatility targeting. Stel je bot handelt op valutaparen via de OANDA API; je kunt de Kelly fraction verlagen als de ATR (Average True Range) boven een drempel komt, bijvoorbeeld 0.5% van de prijs. Dit voorkomt dat je te veel inzet tijdens stijgende volatiliteit, wat essentieel is voor algoritmische bots die 24/7 draaien.
Praktische tips voor implementatie in je trading setup
Begin klein: test je Kelly-implementatie eerst op een paper trading account bij een broker zoals Interactive Brokers. Gebruik een Python script met de IB-insync library om live data te streamen en je Kelly-berekeningen uit te voeren.
Zet je initiële kapitaal op €10.000 en loop een backtest van 1.000 trades om de optimalisatie te zien.
Je zult merken dat de equity curve stabieler groeit dan bij fixed sizing. Pas op voor over-optimisatie: de Kelly formule is gevoelig voor nauwkeurige winstpercentages. Als je backtest een winstpercentage van 55% laat zien, maar de werkelijkheid is 50%, zul je te agressief inzetten.
Gebruik Monte Carlo-simulaties in Python om de robuustheid te testen. Wanneer je gewogen voortschrijdende gemiddelden berekent met Pandas, voeg dan ook een veiligheidsmarge toe, zoals een maximale inzet van 10% van je kapitaal, om zwarte zwaan events te voorkomen.
Integreer met je risicomanagement dashboard. Gebruik libraries zoals Matplotlib voor visualisatie van je Kelly-fraction over tijd. Voor een complete setup, combineer dit met een bot die via API trades uitvoert op platforms zoals MetaTrader 5 of cTrader. De kosten voor zo'n bot lopen uiteen van €0 tot €500 per maand voor premium scripts, maar de winst op de lange termijn door optimaal position sizing is onbetaalbaar. Houd je code modular: scheiden van data fetching, berekening en order execution voor maintainability.
