criterio di Kelly dimensionamento posizione
Il criterio di Kelly calcola la puntata in base al vantaggio. Dieci anni di rendimenti azionari giornalieri mostrano cosa implicano Kelly pieno, drawdown e metà Kelly nella pratica.
Il criterio di Kelly è una formula per determinare la dimensione della scommessa. Inserisci la probabilità di vincita, l'entità di una vincita e l'entità di una perdita, e la formula restituisce la frazione di capitale che massimizza il tasso di crescita a lungo termine della ricchezza. John Kelly la pubblicò ai Bell Labs nel 1956 come risultato della teoria dell'informazione, e in seguito fu adottata da giocatori d'azzardo e trader. Questa pagina illustra la formula partendo dai principi fondamentali, per poi misurarne le prescrizioni su dieci anni di rendimenti azionari giornalieri reali, dove la prescrizione si rivela insostenibile.
Cosa dice realmente il criterio di Kelly
Prendi una scommessa ripetuta che vince una frazione g dell'importo puntato con probabilità p, e perde una frazione l dell'importo puntato con probabilità q, dove q è uno meno p. La frazione di capitale ottimale per la crescita da impegnare ad ogni ripetizione è:
f* = p / l - q / g
Nel classico caso di gioco a somma zero, dove una vincita paga quanto costa una perdita, g e l sono entrambi uguali a 1 e la formula si riduce a f* = p - q. Questa differenza è il margine stesso. Una scommessa che vince il 60% delle volte a somma zero ha un margine di 20 punti, e Kelly suggerisce di puntare il 20% del bankroll.
La derivazione è un singolo passaggio di calcolo applicato al logaritmo atteso della ricchezza. Massimizzare il logaritmo medio della ricchezza per scommessa equivale a massimizzare il tasso di crescita composto su una lunga sequenza, e la frazione che lo raggiunge è quella sopra. Da ciò derivano due proprietà. Kelly non punta mai l'intero bankroll su una scommessa che può far perdere tutto, poiché il logaritmo di zero è infinito negativo. E qualsiasi frazione fissa diversa da f, ripetuta abbastanza a lungo, si compone più lentamente di f.
Un lancio di moneta che puoi verificare a mano
Le cifre in questa sezione sono ipotetiche, scelte per rendere visibile l'aritmetica. Prendi una moneta che esce testa il 60% delle volte e paga a somma zero, con un bankroll iniziale di $1.000.
- Punta il 20% del bankroll ad ogni lancio. Una vincita porta $1.000 a $1.200; una perdita lo porta a $800. Una vincita e una perdita, in qualsiasi ordine, lasciano $960.
- Punta il 40% del bankroll ad ogni lancio. La stessa coppia vincita-perdita porta $1.000 a $1.400 a $840.
- Punta l'intero bankroll ad ogni lancio. Una singola croce termina la sequenza in modo permanente, qualunque fosse il margine.
Quel costo di andata e ritorno del 4% con una puntata del 20% è il prezzo della composizione di un bankroll volatile, e una moneta 60/40 lo copre molte volte in una lunga sequenza. Con una puntata del 40%, il costo di andata e ritorno è del 16%, e la moneta non lo copre più: il tasso di crescita al doppio della frazione di Kelly si attesta approssimativamente a zero. Oltre questo punto, una scommessa con un margine reale e verificato non fa crescere nulla, che è il singolo fatto più utile che la formula porta con sé.
Cosa chiede la formula per una scommessa azionaria giornaliera
Ora punta la stessa formula su un mercato. Considera un giorno di trading in un'azione come una ripetizione della scommessa: la probabilità di vincita è la quota di giorni che sono chiusi in rialzo, l'entità della vincita è il movimento medio dei giorni in rialzo, e l'entità della perdita è il movimento medio dei giorni in ribasso. Dieci anni solari completi di chiusure giornaliere, dal 2016 al 2025, su sei nomi noti:
L'esatto SQL dietro ogni numero
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 DESCLeggi le prime tre colonne e il margine sembra minuscolo. I tassi di vincita si aggirano vicino al lancio di una moneta, e il giorno medio in rialzo e il giorno medio in ribasso sono simili in dimensione per ogni nome nel pannello. SPY ha chiuso in rialzo nel 55.3% delle sue sessioni, guadagnando 0.71% in un giorno medio in rialzo contro 0.76% in un giorno medio in ribasso.
L'ultima colonna è dove iniziano i problemi. Quegli input piccoli e quasi bilanciati si trovano ai denominatori della formula, e denominatori piccoli producono risposte grandi. La frazione che la formula restituisce per SPY è 10.1 volte il capitale, e il più basso tra i 6 nomi si attesta comunque a 2 volte. Il Kelly completo su una scommessa azionaria giornaliera non è una percentuale del conto. È una richiesta di leva finanziaria che nessun broker concede e nessun conto sopravvive.
La forma del compromesso
Questa è la teoria. Il pannello successivo è l'esperimento. Prendi i rendimenti giornalieri effettivi del tracker S&P 500 negli stessi dieci anni, scala il rendimento di ogni giorno per una dimensione fissa della scommessa, e componi il risultato. Una dimensione della scommessa di 1,0x è l'indice senza leva. Una dimensione di 3,0x impegna tre dollari per ogni dollaro di capitale, ogni giorno, ribilanciato quotidianamente. Ogni riga è un percorso completo di dieci anni, con la sua ricchezza finale e il calo più profondo da picco a minimo subito lungo il percorso.
L'esatto SQL dietro ogni numero
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 betA 0.5x il percorso è terminato a 1.92 volte il capitale iniziale, con un calo peggiore del 18.2% da un massimo precedente. A 5x, con gli stessi rendimenti giornalieri e lo stesso decennio, il percorso è terminato a 14.35 volte, con un calo peggiore del 94.5%.
Le due colonne si muovono in modo diverso, e questa è l'intera lezione del Kelly frazionario. La ricchezza finale aumenta con la dimensione della scommessa per un po', si appiattisce, e poi scende quando il trascinamento della volatilità composta supera l'esposizione aggiuntiva. La colonna del drawdown non ha un tale punto di svolta. Sale ad ogni passo attraverso le 8 righe, e sale più velocemente di quanto abbia mai fatto la colonna della ricchezza. Metà della crescita della scommessa ottimale è disponibile a metà della dimensione della scommessa ottimale, a una piccola frazione del dolore. Questa asimmetria è l'argomento per puntare meno di f*, ed è il motivo per cui esiste la convenzione del mezzo Kelly.
La stima è il punto debole, non la formula
La formula è esatta per una scommessa le cui probabilità sono note. In un casinò le probabilità sono stampate. In un mercato sono stimate dalla storia, e la stima oscilla. Ecco lo stesso calcolo del primo pannello, eseguito separatamente su ciascuno dei dieci anni solari per un singolo tracker dell'indice.
L'esatto SQL dietro ogni numero
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 yearOgni riga è una stima della stessa quantità sconosciuta, costruita da circa 250 osservazioni. L'anno 2016 ha restituito 13.7, con un tasso di vincita del 53.8%. L'anno 2025 ha restituito 12.3, con un tasso di vincita del 57.8%. Il grafico mostra quanto distanti possono essere 10 letture di un singolo numero quando ciascuna è tratta da un singolo anno.
Questa dispersione è più importante di qualsiasi perfezionamento della formula. Se sovrastimi il tuo margine di un fattore due, la formula restituisce all'incirca il doppio della dimensione della scommessa, collocandoti al punto o oltre il punto in cui la crescita diventa negativa. Se lo sottostimi, rinunci a una crescita che avresti potuto comporre, senza rischio di rovina. I due errori non sono simmetrici, e il lato economico dell'asimmetria è il lato piccolo. I professionisti che usano Kelly tendono a puntarne la metà, o un quarto, e trattano la formula come un tetto piuttosto che come un obiettivo.
Dove il modello smette di descrivere un mercato
Kelly presuppone una scommessa che puoi ripetere con probabilità fisse e note, e risultati indipendenti da una ripetizione all'altra. Un mercato infrange tutto questo. Le probabilità sono stimate e cambiano nel tempo. I rendimenti giornalieri si raggruppano: periodi tranquilli seguono periodi tranquilli, e giorni violenti arrivano in gruppi, il che allunga i drawdown oltre quanto prevede un'ipotesi di indipendenza. Le posizioni non vengono liquidate alla fine di ogni giornata, i gap saltano il prezzo a cui una scommessa sarebbe stata chiusa, e le richieste di margine arrivano secondo il programma del broker piuttosto che secondo il programma del modello.
La formula mantiene comunque la sua utilità come confine. Afferma, in una riga, che esiste una dimensione della scommessa oltre la quale una maggiore convinzione produce meno ricchezza, e individua quel confine a partire da quantità che un trader può almeno tentare di misurare. Questo è anche il motivo per cui la stessa logica punta verso la diversificazione: diverse scommesse parzialmente indipendenti condividono lo stesso budget di rischio totale in modo più efficiente di una singola scommessa, che è l'aritmetica alla base del rischio di concentrazione. E per un investitore che aggiunge denaro secondo un programma piuttosto che dimensionare scommesse discrete, la questione del dimensionamento della posizione è risolta dal programma stesso, che è il caso del dollar-cost averaging.
FAQ
Qual è la formula del criterio di Kelly?
Per una scommessa che vince una frazione g della posta con probabilità p e perde una frazione l con probabilità q, la frazione di capitale ottimale per la crescita è f = p / l - q / g. Nel caso a somma zero si semplifica in f = p - q, il margine stesso.
Perché i trader usano il mezzo Kelly invece del Kelly completo?
La crescita è quasi piatta vicino all'ottimo mentre il rischio continua a salire oltre, quindi dimezzare la scommessa sacrifica una modesta quantità di crescita a lungo termine e rimuove una grande parte del drawdown. L'errore di stima aggrava l'argomento: una scommessa raddoppiata da un margine sovrastimato si trova vicino al punto in cui la crescita si ferma.
Il criterio di Kelly funziona per le azioni?
Si applica come aritmetica, ma le sue ipotesi di probabilità fisse e note e risultati indipendenti non valgono nei mercati. Applicato ingenuamente ai rendimenti azionari giornalieri richiede una leva ben oltre ciò che qualsiasi conto può sostenere, come mostra il primo pannello sopra.
Cosa succede se scommetti più della frazione di Kelly?
Il tasso di crescita a lungo termine diminuisce. A circa il doppio della frazione di Kelly raggiunge circa zero, e oltre quel punto una scommessa con un margine reale riduce il capitale nel tempo mentre i suoi drawdown continuano ad approfondirsi.
Il criterio di Kelly è la stessa cosa che rischiare l'1% o il 2% per operazione?
No. Una regola percentuale fissa ignora completamente le probabilità e applica lo stesso numero a ogni configurazione. Kelly scala la posta con il margine misurato, il che lo rende più reattivo quando il margine è noto e più fragile quando il margine è ipotizzato.
Ogni cifra sopra proviene da una query memorizzata che puoi aprire, modificare e rieseguire. Scambia i ticker, la finestra temporale o la griglia delle dimensioni della scommessa e misura tu stesso il compromesso sul terminale Strasmore.