Kelly-criterium positiegrootte gemeten
Het Kelly-criterium bepaalt de inzetgrootte op basis van uw voorsprong. Zie wat tien jaar dagelijkse aandelenrendementen impliceren voor vol Kelly, drawdown en half Kelly in de
Het Kelly-criterium is een formule voor de inzetgrootte. Voer de winkans, de omvang van een winst en de omvang van een verlies in, en de formule geeft de fractie van het kapitaal die de groei van het vermogen op de lange termijn maximaliseert. John Kelly publiceerde het in 1956 bij Bell Labs als een resultaat uit de informatietheorie, waarna gokkers en handelaren het overnamen. Deze pagina leidt de formule af vanuit de eerste beginselen en meet vervolgens wat deze voorschrijft op basis van tien jaar aan echte dagelijkse aandelenrendementen, waarbij het voorschrift onleefbaar blijkt te zijn.
Wat het Kelly-criterium werkelijk zegt
Neem een herhaalde weddenschap die met kans p een fractie g van de inzet uitkeert en met kans q een fractie l van de inzet kost, waarbij q gelijk is aan één min p. De groei-optimale fractie van het kapitaal om bij elke herhaling in te zetten is:
f* = p / l - q / g
In het klassieke gelijke-geld-geval, waarbij een winst evenveel oplevert als een verlies kost, zijn g en l beide gelijk aan 1 en valt de formule uiteen in f = p - q. Dat verschil is de edge zelf. Een weddenschap die 60% van de tijd wint bij gelijke inzet heeft een edge* van 20 punten, en Kelly zet 20% van het speelkapitaal in.
De afleiding is een enkele stap calculus toegepast op de verwachte logaritme van het vermogen. Het maximaliseren van de gemiddelde log van het vermogen per weddenschap is gelijk aan het maximaliseren van de samengestelde groeivoet over een lange reeks, en de fractie die dit bereikt is de bovenstaande. Twee eigenschappen vloeien hieruit voort. Kelly zet nooit het volledige speelkapitaal in op een weddenschap die alles kan laten verliezen, aangezien de logaritme van nul min oneindig is. En elke vaste fractie anders dan f, lang genoeg herhaald, groeit langzamer samen dan f.
Een muntworp die u zelf kunt narekenen
De cijfers in deze sectie zijn hypothetisch, gekozen om de berekening inzichtelijk te maken. Neem een munt die 60% van de tijd kop geeft en uitbetaalt tegen gelijke inzet, met een startkapitaal van $1.000.
- Zet 20% van het speelkapitaal in bij elke worp. Een winst brengt $1.000 naar $1.200; een verlies brengt het naar $800. Eén winst en één verlies, in willekeurige volgorde, laat $960 over.
- Zet 40% van het speelkapitaal in bij elke worp. Hetzelfde paar van winst gevolgd door verlies gaat van $1.000 naar $1.400 naar $840.
- Zet het volledige speelkapitaal in bij elke worp. Een enkele munt op de rand beëindigt de reeks permanent, ongeacht de edge.
Die 4% retourtarief bij 20% inzet is de prijs van het samenstellen van een volatiele portefeuille, en een 60/40 munt verdient dit vele malen terug over een lange reeks. Bij 40% inzet is het retourtarief 16%, en de munt dekt dit niet langer: de groeivoet bij tweemaal de Kelly-fractie komt ruwweg op nul uit. Voorbij dat punt groeit een weddenschap met een echte, geverifieerde edge helemaal niet meer, wat het nuttigste feit is dat de formule met zich meebrengt.
Wat de formule vraagt voor een dagelijkse aandelenweddenschap
Richt dezelfde formule nu op een markt. Beschouw één handelsdag in één aandeel als één herhaling van de weddenschap: de winkans is het aandeel dagen dat hoger sloot, de winstomvang is de gemiddelde stijging op een dag, en de verliesomvang is de gemiddelde daling op een dag. Tien volledige kalenderjaren aan dagelijkse slotkoersen, 2016 tot en met 2025, voor zes bekende namen:
De exacte SQL achter elk getal
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), window_start) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'KO', 'JNJ', 'MSFT', 'NVDA', 'TSLA')
AND window_start >= '2016-01-01 00:00:00'
AND window_start < '2026-01-01 00:00:00'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, dt
),
steps AS (
SELECT ticker, dt, c,
lagInFrame(c) OVER (PARTITION BY ticker ORDER BY dt
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev
FROM daily
),
rets AS (
SELECT ticker, c / prev - 1 AS ret
FROM steps
WHERE prev > 0 AND c != prev
)
SELECT ticker,
round(100 * countIf(ret > 0) / count(), 1) AS win_rate_pct,
round(100 * avgIf(ret, ret > 0), 2) AS avg_gain_pct,
round(100 * abs(avgIf(ret, ret < 0)), 2) AS avg_loss_pct,
round(countIf(ret > 0) / count() / abs(avgIf(ret, ret < 0))
- countIf(ret < 0) / count() / avgIf(ret, ret > 0), 1) AS full_kelly_x
FROM rets
GROUP BY ticker
HAVING countIf(ret > 0) > 0 AND countIf(ret < 0) > 0
ORDER BY full_kelly_x DESCLees de eerste drie kolommen en de edge ziet er klein uit. Winpercentages clusteren rond een muntworp, en de gemiddelde stijging en de gemiddelde daling liggen qua omvang dicht bij elkaar voor elke naam in het paneel. SPY sloot hoger op 55.3% van zijn sessies, met een winst van 0.71% op een gemiddelde stijging tegenover 0.76% op een gemiddelde daling.
De laatste kolom is waar de problemen beginnen. Die kleine, bijna gebalanceerde invoerwaarden staan in de noemers van de formule, en kleine noemers produceren grote antwoorden. De fractie die de formule teruggeeft voor SPY is 10.1 maal het kapitaal, en de laagste van de 6 namen komt nog steeds uit op 2 maal. Volledig Kelly op een dagelijkse aandelenweddenschap is geen percentage van de rekening. Het is een eis voor hefboomwerking die geen enkele broker verstrekt en die geen enkele rekening overleeft.
De vorm van de afweging
Dat is de theorie. Het volgende paneel is het experiment. Neem de werkelijke dagelijkse rendementen van de S&P 500 tracker over dezelfde tien jaar, schaal elk dagrendement met een vaste inzetgrootte en stel het resultaat samen. Een inzetgrootte van 1,0x is de index zonder hefboom. Een inzetgrootte van 3,0x zet elke dag drie dollar in voor elke dollar kapitaal, dagelijks geherbalanceerd. Elke rij is één volledig tienjarig pad, met het eindvermogen en de diepste piek-tot-dal daling die het onderweg doormaakte.
De exacte SQL achter elk getal
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), window_start) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2016-01-01 00:00:00'
AND window_start < '2026-01-01 00:00:00'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY dt
),
steps AS (
SELECT dt, c,
lagInFrame(c) OVER (ORDER BY dt ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev
FROM daily
),
rets AS (
SELECT dt, c / prev - 1 AS ret
FROM steps
WHERE prev > 0
),
sizes AS (
SELECT arrayJoin([0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0]) AS bet
),
paths AS (
SELECT bet, dt,
exp(sum(log(greatest(1 + bet * ret, 0.0001)))
OVER (PARTITION BY bet ORDER BY dt
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS equity
FROM rets CROSS JOIN sizes
),
peaks AS (
SELECT bet, dt, equity,
max(equity) OVER (PARTITION BY bet ORDER BY dt
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS peak
FROM paths
)
SELECT concat(toString(bet), 'x') AS bet_size,
round(argMax(equity, dt), 2) AS ending_multiple,
round(100 * max(1 - equity / peak), 1) AS max_drawdown_pct
FROM peaks
GROUP BY bet
ORDER BY betBij 0.5x eindigde het pad op 1.92 maal het startkapitaal, met een grootste daling van 18.2% ten opzichte van een eerder hoogtepunt. Bij 5x, dezelfde dagelijkse rendementen en hetzelfde decennium, eindigde het pad op 14.35 maal, met een grootste daling van 94.5%.
De twee kolommen bewegen verschillend, en dat is de hele les van fractioneel Kelly. Het eindvermogen stijgt een tijdje mee met de inzetgrootte, vlakt af en keert dan om wanneer de wrijving van samengestelde volatiliteit de extra blootstelling overtreft. De drawdown-kolom heeft zo'n keerpunt niet. Deze stijgt bij elke stap over de 8 rijen heen, en stijgt sneller dan de vermogenskolom ooit deed. De helft van de groei van de optimale inzet is beschikbaar bij de helft van de optimale inzetgrootte, tegen een kleine fractie van de pijn. Die asymmetrie is het argument om minder dan f* in te zetten, en het is de reden dat de half-Kelly conventie überhaupt bestaat.
De schatting is het zwakke punt, niet de formule
De formule is exact voor een weddenschap waarvan de kansen bekend zijn. In een casino staan de kansen gedrukt. In een markt worden ze geschat op basis van historie, en de schatting wankelt. Hier is dezelfde berekening als in het eerste paneel, uitgevoerd voor elk van de tien kalenderjaren afzonderlijk voor één enkele indextracker.
De exacte SQL achter elk getal
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), window_start) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2016-01-01 00:00:00'
AND window_start < '2026-01-01 00:00:00'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY dt
),
steps AS (
SELECT dt, c,
lagInFrame(c) OVER (ORDER BY dt ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev
FROM daily
),
rets AS (
SELECT dt, c / prev - 1 AS ret
FROM steps
WHERE prev > 0 AND c != prev
)
SELECT toString(toYear(dt)) AS year,
round(100 * countIf(ret > 0) / count(), 1) AS win_rate_pct,
round(100 * avgIf(ret, ret > 0), 2) AS avg_gain_pct,
round(100 * abs(avgIf(ret, ret < 0)), 2) AS avg_loss_pct,
round(countIf(ret > 0) / count() / abs(avgIf(ret, ret < 0))
- countIf(ret < 0) / count() / avgIf(ret, ret > 0), 1) AS full_kelly_x
FROM rets
GROUP BY year
HAVING countIf(ret > 0) > 0 AND countIf(ret < 0) > 0
ORDER BY yearElke rij is een schatting van dezelfde onbekende grootheid, gebaseerd op ongeveer 250 waarnemingen. Jaar 2016 leverde 13.7 op, bij een winpercentage van 53.8%. Jaar 2025 leverde 12.3 op, bij een winpercentage van 57.8%. De grafiek laat zien hoe ver 10 metingen van één getal uit elkaar kunnen liggen wanneer elk is gebaseerd op een enkel jaar.
Die spreiding is belangrijker dan elke verfijning van de formule. Overschat uw edge met een factor twee en de formule geeft ruwweg tweemaal de inzetgrootte terug, wat u op of voorbij het punt plaatst waar groei omslaat in krimp. Onderschat het en u geeft groei op die u had kunnen samenstellen, zonder risico op ondergang. De twee fouten zijn niet symmetrisch, en de goedkope kant van de asymmetrie is de kleine kant. Beoefenaars die Kelly überhaupt gebruiken, hebben de neiging om de helft of een kwart ervan in te zetten en de formule te behandelen als een plafond in plaats van een doelwit.
Waar het model stopt met het beschrijven van een markt
Kelly veronderstelt een weddenschap die u kunt herhalen met vaste, bekende kansen en uitkomsten die onafhankelijk zijn van de ene herhaling tot de volgende. Een markt doorbreekt dat allemaal. Kansen worden geschat en veranderen in de loop van de tijd. Dagelijkse rendementen clusteren: rustige periodes volgen op rustige periodes, en gewelddadige dagen komen in groepen, wat drawdowns verder uitrekt dan een onafhankelijkheidsaanname voorspelt. Posities worden niet aan het einde van elke dag afgewikkeld, gaps overslaan de prijs waarop een weddenschap zou zijn gesloten, en margin calls komen op het schema van de broker in plaats van op het schema van het model.
De formule verdient zijn plaats nog steeds als een grens. Het stelt, in één regel, dat er een inzetgrootte is waarboven meer overtuiging minder vermogen oplevert, en het lokaliseert die grens op basis van grootheden die een handelaar op zijn minst kan proberen te meten. Dat is ook waarom dezelfde logica wijst in de richting van diversificatie: meerdere gedeeltelijk onafhankelijke weddenschappen delen hetzelfde totale risicobudget efficiënter dan één weddenschap, wat de rekenkunde is onder concentratierisico. En voor een belegger die geld toevoegt volgens een schema in plaats van discrete weddenschappen te plaatsen, wordt de positiebepalingsvraag beantwoord door het schema zelf, wat het argument is voor dollar-cost averaging.
FAQ
Wat is de formule van het Kelly-criterium?
Voor een weddenschap die met kans p een fractie g van de inzet uitkeert en met kans q een fractie l verliest, is de groei-optimale fractie van het kapitaal f = p / l - q / g. In het gelijke-geld-geval vereenvoudigt dit tot f = p - q, de edge zelf.
Waarom gebruiken handelaren half Kelly in plaats van volledig Kelly?
De groei ligt dicht bij vlak in de buurt van het optimum, terwijl het risico daarboven blijft stijgen, dus het halveren van de inzet levert een bescheiden hoeveelheid groei op de lange termijn in en verwijdert een groot deel van de drawdown. Schattingsfouten versterken het argument: een verdubbelde inzet door een overschatte edge bevindt zich dicht bij het punt waar de groei stopt.
Werkt het Kelly-criterium voor aandelen?
Het is van toepassing als rekenkunde, maar de aannames van vaste bekende kansen en onafhankelijke uitkomsten gelden niet in markten. Naïef toegepast op dagelijkse aandelenrendementen vraagt het om hefboomwerking die ver boven ligt wat een rekening aankan, zoals het eerste paneel hierboven laat zien.
Wat gebeurt er als u meer inzet dan de Kelly-fractie?
De groeivoet op de lange termijn daalt. Bij ongeveer tweemaal de Kelly-fractie bereikt deze ongeveer nul, en daarboven krimpt een weddenschap met een echte edge het kapitaal in de loop van de tijd, terwijl de drawdowns blijven verdiepen.
Is het Kelly-criterium hetzelfde als het riskeren van 1% of 2% per transactie?
Nee. Een vaste-percentage-regel negeert de kansen volledig en past hetzelfde getal toe op elke opstelling. Kelly schaalt de inzet met de gemeten edge, wat het responsiever maakt wanneer de edge bekend is en kwetsbaarder wanneer de edge wordt geraden.
Elk cijfer hierboven komt uit een opgeslagen query die u kunt openen, bewerken en opnieuw uitvoeren. Vervang de tickers, het venster of het inzetgrootte-raster en meet de afweging zelf op de Strasmore-terminal.