Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Kelly criterion position sizing sukat ng taya

Sinusukat ng Kelly criterion ang laki ng taya mula sa iyong edge. Tingnan ang sampung taon ng daily stock returns: full Kelly, drawdown, at half Kelly sa praktika.

Ang Kelly criterion ay isang pormula para sa laki ng taya. Ibigay mo dito ang probabilidad ng panalo, ang laki ng panalo, at ang laki ng talo, at ibabalik nito ang bahagi ng kapital na nagpapalaki sa long-run growth rate ng yaman. Inilathala ito ni John Kelly sa Bell Labs noong 1956 bilang resulta ng information theory, at pinagtibay ito ng mga sugarol at mangangalakal pagkatapos. Ang pahinang ito ay sumusunod sa pormula mula sa mga pangunahing prinsipyo, pagkatapos ay sinusukat kung ano ang inirerekomenda nito sa sampung taon ng tunay na araw-araw na stock returns, kung saan ang rekomendasyon ay lumalabas na hindi mabubuhay.

Ano ang aktwal na sinasabi ng Kelly criterion

Kumuha ng paulit-ulit na taya na nanalo ng bahaging g ng halagang itinaya na may probabilidad na p, at natalo ng bahaging l ng halagang itinaya na may probabilidad na q, kung saan ang q ay isang minus p. Ang growth-optimal na bahagi ng kapital na ilalaan sa bawat pag-uulit ay:

f* = p / l - q / g

Sa klasikong even-money case, kung saan ang panalo ay katumbas ng halaga ng talo, ang g at l ay parehong katumbas ng 1 at ang pormula ay nagiging f* = p - q. Ang pagkakaibang iyon ay ang edge mismo. Ang isang taya na nanalo ng 60% ng oras sa even money ay may 20-point edge, at ang Kelly ay nagtaya ng 20% ng bankroll dito.

Ang derivation ay isang hakbang lamang ng calculus na inilapat sa inaasahang logarithm ng yaman. Ang pag-maximize ng average log ng yaman bawat taya ay katumbas ng pag-maximize ng compound growth rate sa isang mahabang sequence, at ang bahagi na nakakamit nito ay ang nasa itaas. Dalawang katangian ang lumalabas dito. Hindi kailanman itinaya ni Kelly ang buong bankroll sa isang taya na maaaring mawala ang lahat, dahil ang logarithm ng zero ay negative infinity. At ang anumang fixed fraction maliban sa f, na paulit-ulit nang sapat, ay magko-compound nang mas mabagal kaysa sa f.

Isang coin flip na maaari mong suriin nang mano-mano

Ang mga numero sa seksyong ito ay hypothetical, pinili upang makita ang arithmetic. Kumuha ng barya na lumalapag sa ulo 60% ng oras at nagbabayad ng even money, na may panimulang bankroll na $1,000.

  • Magtaya ng 20% ng bankroll sa bawat flip. Ang panalo ay nagdadala ng $1,000 sa $1,200; ang talo ay nagdadala nito sa $800. Isang panalo at isang talo, sa alinmang pagkakasunod-sunod, ay nag-iiwan ng $960.
  • Magtaya ng 40% ng bankroll sa bawat flip. Ang parehong panalo-tapos-talo na pares ay tumatakbo mula $1,000 hanggang $1,400 hanggang $840.
  • Itaya ang buong bankroll sa bawat flip. Isang solong buntot ang permanenteng nagtatapos sa sequence, anuman ang edge.

Ang 4% round-trip cost sa 20% na pagtaya ay ang presyo ng pag-compound ng isang volatile bankroll, at ang isang 60/40 na barya ay sumasakop dito nang maraming beses sa isang mahabang sequence. Sa 40% na pagtaya ang round-trip cost ay 16%, at hindi na ito sinasakop ng barya: ang growth rate sa dobleng Kelly fraction ay humigit-kumulang zero. Lampas sa puntong iyon, ang isang taya na may tunay, napatunayang edge ay walang pinapalago, na siyang pinakakapaki-pakinabang na solong katotohanang dala ng pormula.

Ano ang hinihingi ng pormula para sa isang araw-araw na stock bet

Ngayon ituro ang parehong pormula sa isang merkado. Tratuhin ang isang araw ng trading sa isang stock bilang isang pag-uulit ng taya: ang win probability ay ang bahagi ng mga araw na nagsara nang pataas, ang win size ay ang average na galaw ng up-day, at ang loss size ay ang average na galaw ng down-day. Sampung buong taon ng kalendaryo ng araw-araw na pagsasara, 2016 hanggang 2025, sa anim na pamilyar na pangalan:

QueryKelly inputs mula sa daily closes, 2016 hanggang 2025: win rate, average gain, average loss, at fraction na ibinabalik ng formula
Ang eksaktong SQL sa likod ng bawat 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 DESC
Run this yourself

Basahin ang unang tatlong column at ang edge ay mukhang maliit. Ang win rates ay malapit sa isang coin flip, at ang average up day at average down day ay magkalapit sa laki para sa bawat pangalan sa panel. SPY ay nagsara nang mas mataas sa 55.3% ng mga sesyon nito, na nakakuha ng 0.71% sa isang average up day laban sa 0.76% sa isang average down day.

Ang huling column ay kung saan nagsisimula ang problema. Ang mga maliliit, halos balanseng input na iyon ay nasa denominators ng pormula, at ang maliliit na denominator ay gumagawa ng malalaking sagot. Ang bahaging ibinabalik ng pormula para sa SPY ay 10.1 beses ng kapital, at ang pinakamababa sa 6 na pangalan ay nasa 2 beses pa rin. Ang Full Kelly sa isang araw-araw na equity bet ay hindi isang porsyento ng account. Ito ay isang demand para sa leverage na hindi ibinibigay ng anumang broker at hindi nabubuhay ang anumang account.

Ang hugis ng tradeoff

Iyan ang teorya. Ang susunod na panel ay ang eksperimento. Kunin ang aktwal na araw-araw na returns ng S&P 500 tracker sa parehong sampung taon, i-scale ang bawat araw na return sa isang fixed bet size, at i-compound ang resulta. Ang bet size na 1.0x ay ang unlevered index. Ang bet size na 3.0x ay naglalaan ng tatlong dolyar para sa bawat dolyar ng kapital, araw-araw, na rebalanced araw-araw. Ang bawat row ay isang buong sampung taon na path, kasama ang ending wealth nito at ang pinakamalalim na peak-to-trough fall na naranasan nito sa daan.

QueryIsang dekada ng S&P 500 daily returns na compounded sa walong fixed bet sizes: ending wealth at worst drawdown
Ang eksaktong SQL sa likod ng bawat 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 bet
Run this yourself

Sa 0.5x ang path ay nagtapos sa 1.92 beses ng panimulang kapital, na may pinakamalalang fall na 18.2% mula sa isang dating mataas. Sa 5x, ang parehong araw-araw na returns at ang parehong dekada, ang path ay nagtapos sa 14.35 beses, na may pinakamalalang fall na 94.5%.

Ang dalawang column ay gumagalaw nang magkaiba, at iyon ang buong aral ng fractional Kelly. Ang ending wealth ay tumataas kasabay ng bet size nang ilang sandali, pumapantay, at pagkatapos ay bumababa habang ang drag mula sa compounding volatility ay lumalampas sa extra exposure. Ang drawdown column ay walang ganoong turning point. Ito ay tumataas sa bawat hakbang sa kabuuan ng 8 na mga row, at ito ay tumataas nang mas mabilis kaysa sa wealth column. Ang kalahati ng paglago ng optimal bet ay makukuha sa kalahati ng optimal bet size, sa isang maliit na bahagi ng sakit. Ang asymmetry na iyon ay ang argumento para sa pagtaya ng mas mababa sa f*, at ito ang dahilan kung bakit umiiral ang half-Kelly convention.

Ang estimate ang mahinang bahagi, hindi ang pormula

Ang pormula ay eksakto para sa isang taya na ang odds ay alam. Sa casino, ang odds ay naka-print. Sa merkado, ang mga ito ay tinatantya mula sa kasaysayan, at ang estimate ay umuuga. Narito ang parehong kalkulasyon tulad ng unang panel, na pinatakbo nang hiwalay sa bawat isa sa sampung taon ng kalendaryo para sa isang solong index tracker.

QueryParehong Kelly calculation sa S&P 500 tracker, taon-taon, 2016 hanggang 2025
Ang eksaktong SQL sa likod ng bawat 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 year
Run this yourself

Ang bawat row ay isang estimate ng parehong hindi kilalang dami, na binuo mula sa humigit-kumulang 250 na obserbasyon. Ang Taon 2016 ay nagbalik ng 13.7, sa win rate na 53.8%. Ang Taon 2025 ay nagbalik ng 12.3, sa win rate na 57.8%. Ipinapakita ng chart kung gaano kalayo ang pagitan ng 10 na pagbasa ng isang numero kapag ang bawat isa ay nakuha mula sa isang taon.

Ang dispersion na iyon ay mas mahalaga kaysa sa anumang refinement ng pormula. Kung labis mong tantyahin ang iyong edge ng factor na dalawa, ang pormula ay magbabalik ng halos dobleng laki ng taya, na maglalagay sa iyo sa o lampas sa punto kung saan ang paglago ay nagiging negatibo. Kung kulang mo itong tantyahin, isusuko mo ang paglago na maaari mong na-compound, nang walang panganib ng pagkasira. Ang dalawang error ay hindi simetriko, at ang murang bahagi ng asymmetry ay ang maliit na bahagi. Ang mga practitioner na gumagamit ng Kelly ay may posibilidad na magtaya ng kalahati nito, o isang-kapat, at ituring ang pormula bilang isang kisame sa halip na isang target.

Kung saan humihinto ang modelo sa paglalarawan ng isang merkado

Ipinapalagay ni Kelly ang isang taya na maaari mong ulitin na may fixed, alam na odds, at mga resulta na independyente mula sa isang pag-uulit hanggang sa susunod. Sinisira ng isang merkado ang lahat ng iyon. Ang odds ay tinatantya at nagbabago sa paglipas ng panahon. Ang araw-araw na returns ay nagkukumpol: ang mga tahimik na kahabaan ay sumusunod sa mga tahimik na kahabaan, at ang mga marahas na araw ay dumarating sa mga grupo, na nagpapahaba ng mga drawdown nang higit sa inaasahan ng isang independence assumption. Ang mga posisyon ay hindi naaayos sa pagtatapos ng bawat araw, ang mga gaps ay lumalampas sa presyo kung saan ang isang taya ay sana ay naisara, at ang mga margin call ay dumarating sa iskedyul ng broker sa halip na iskedyul ng modelo.

Ang pormula ay kumikita pa rin bilang isang hangganan. Ito ay nagsasaad, sa isang linya, na mayroong isang laki ng taya kung saan ang higit na pananalig ay gumagawa ng mas kaunting yaman, at ito ay naghahanap ng hangganang iyon mula sa mga dami na maaaring subukan ng isang mangangalakal na sukatin. Iyon din ang dahilan kung bakit ang parehong lohika ay tumuturo patungo sa diversification: ang ilang bahagyang independiyenteng taya ay nagbabahagi ng parehong kabuuang risk budget nang mas mahusay kaysa sa isang taya, na siyang arithmetic sa ilalim ng concentration risk. At para sa isang mamumuhunan na nagdaragdag ng pera sa isang iskedyul sa halip na mag-size ng discrete wagers, ang tanong sa laki ng posisyon ay sinasagot ng iskedyul mismo, na siyang kaso para sa dollar-cost averaging.

FAQ

Ano ang formula ng Kelly criterion?

Para sa isang taya na nanalo ng bahaging g ng stake na may probabilidad na p at natalo ng bahaging l na may probabilidad na q, ang growth-optimal na bahagi ng kapital ay f = p / l - q / g. Sa even-money case ito ay nagiging f = p - q, ang edge mismo.

Bakit ginagamit ng mga mangangalakal ang half Kelly sa halip na full Kelly?

Ang paglago ay malapit sa flat malapit sa optimum habang ang panganib ay patuloy na tumataas lampas dito, kaya ang pagputol ng taya sa kalahati ay sumusuko ng katamtamang halaga ng long-run growth at nag-aalis ng malaking bahagi ng drawdown. Ang estimation error ay nagpapalala sa argumento: ang isang dobleng taya mula sa isang labis na tinantyang edge ay nasa malapit sa punto kung saan humihinto ang paglago.

Gumagana ba ang Kelly criterion para sa mga stock?

Ito ay naaangkop bilang arithmetic, at ang mga assumption nito ng fixed known odds at independent outcomes ay hindi hawak sa mga merkado. Inilapat nang walang muwang sa araw-araw na equity returns, ito ay humihingi ng leverage na lampas sa kayang dalhin ng anumang account, tulad ng ipinapakita ng unang panel sa itaas.

Ano ang mangyayari kung magtaya ka ng higit sa Kelly fraction?

Ang long-run growth rate ay bumababa. Sa humigit-kumulang dobleng Kelly fraction ito ay umaabot sa halos zero, at lampas doon ang isang taya na may tunay na edge ay lumiliit ng kapital sa paglipas ng panahon habang ang mga drawdown nito ay patuloy na lumalalim.

Pareho ba ang Kelly criterion sa pagtaya ng 1% o 2% bawat trade?

Hindi. Ang isang fixed-percentage rule ay binabalewala ang odds nang buo at inilalapat ang parehong numero sa bawat setup. Si Kelly ay nag-scale ng stake sa sinusukat na edge, na ginagawang mas tumutugon ito kapag alam ang edge at mas marupok kapag ang edge ay hinuhulaan lamang.


Ang bawat figure sa itaas ay nagmumula sa isang stored query na maaari mong buksan, i-edit, at patakbuhin muli. Palitan ang mga ticker, ang window, o ang bet-size grid at sukatin ang tradeoff mismo sa Strasmore terminal.