kelly criterion position sizing saham harian
Kriteria Kelly menentukan ukuran taruhan berdasarkan edge. Simak implikasi full Kelly, drawdown, dan half Kelly dari sepuluh tahun data return saham harian riil.
Kriteria Kelly adalah formula untuk menentukan ukuran taruhan. Masukkan probabilitas menang, besaran kemenangan, dan besaran kerugian, maka formula ini akan mengembalikan fraksi modal yang memaksimalkan tingkat pertumbuhan kekayaan dalam jangka panjang. John Kelly menerbitkannya di Bell Labs pada tahun 1956 sebagai hasil dari teori informasi, dan kemudian diadopsi oleh para penjudi dan trader. Halaman ini menurunkan formula dari prinsip pertama, lalu mengukur apa yang diresepkannya pada sepuluh tahun data pengembalian saham harian riil, di mana resep tersebut ternyata tidak dapat dijalankan.
Apa yang sebenarnya dikatakan kriteria Kelly
Ambil sebuah taruhan berulang yang memenangkan fraksi g dari jumlah yang dipertaruhkan dengan probabilitas p, dan kehilangan fraksi l dari jumlah yang dipertaruhkan dengan probabilitas q, di mana q adalah satu dikurangi p. Fraksi modal yang optimal untuk pertumbuhan yang dikomitmenkan pada setiap pengulangan adalah:
f* = p / l - q / g
Dalam kasus klasik uang genap, di mana kemenangan membayar sama dengan biaya kerugian, g dan l sama-sama bernilai 1 dan formula tersebut menyederhanakan menjadi f = p - q. Selisih itu adalah edge itu sendiri. Taruhan yang menang 60% dari waktu pada uang genap memiliki edge* 20 poin, dan Kelly menetapkan 20% dari bankroll pada taruhan tersebut.
Penurunannya adalah satu langkah kalkulus yang diterapkan pada logaritma ekspektasi kekayaan. Memaksimalkan rata-rata log kekayaan per taruhan setara dengan memaksimalkan tingkat pertumbuhan majemuk dalam urutan yang panjang, dan fraksi yang mencapainya adalah yang disebutkan di atas. Dua properti muncul dari hal itu. Kelly tidak pernah mempertaruhkan seluruh bankroll pada taruhan yang bisa kehilangan segalanya, karena logaritma dari nol adalah negatif tak terhingga. Dan fraksi tetap apa pun selain f, jika diulang cukup lama, akan menghasilkan pertumbuhan majemuk yang lebih lambat daripada f.
Lemparan koin yang bisa Anda periksa sendiri
Angka-angka di bagian ini bersifat hipotetis, dipilih untuk membuat perhitungannya terlihat jelas. Ambil sebuah koin yang mendarat di kepala 60% dari waktu dan membayar uang genap, dengan bankroll awal sebesar $1.000.
- Pertaruhkan 20% dari bankroll pada setiap lemparan. Kemenangan membawa $1.000 menjadi $1.200; kerugian membawanya menjadi $800. Satu kemenangan dan satu kerugian, dalam urutan apa pun, menyisakan $960.
- Pertaruhkan 40% dari bankroll pada setiap lemparan. Pasangan menang-lalu-kalah yang sama mengubah $1.000 menjadi $1.400 menjadi $840.
- Pertaruhkan seluruh bankroll pada setiap lemparan. Satu sisi ekor saja mengakhiri urutan secara permanen, apa pun edge-nya.
Biaya pulang-pergi sebesar 4% pada taruhan 20% adalah harga dari pemajemukan bankroll yang volatil, dan koin 60/40 menutupinya berkali-kali lipat dalam urutan yang panjang. Pada taruhan 40%, biaya pulang-pergi adalah 16%, dan koin tidak lagi menutupinya: tingkat pertumbuhan pada dua kali fraksi Kelly berada di sekitar nol. Melewati titik itu, taruhan dengan edge yang nyata dan terverifikasi tidak menghasilkan pertumbuhan sama sekali, yang merupakan fakta tunggal paling berguna yang dibawa oleh formula ini.
Apa yang diminta formula pada taruhan saham harian
Sekarang arahkan formula yang sama ke pasar. Perlakukan satu hari perdagangan pada satu saham sebagai satu pengulangan taruhan: probabilitas menang adalah bagian dari hari yang ditutup naik, ukuran kemenangan adalah pergerakan rata-rata hari naik, dan ukuran kerugian adalah pergerakan rata-rata hari turun. Sepuluh tahun kalender penuh penutupan harian, 2016 hingga 2025, pada enam nama yang sudah dikenal:
SQL tepat di balik setiap angka
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 DESCBaca tiga kolom pertama dan edge-nya terlihat sangat kecil. Tingkat kemenangan berkumpul di sekitar lemparan koin, dan rata-rata hari naik dan rata-rata hari turun memiliki ukuran yang dekat untuk setiap nama di panel. SPY ditutup lebih tinggi pada 55.3% dari sesinya, memperoleh 0.71% pada rata-rata hari naik dibandingkan 0.76% pada rata-rata hari turun.
Kolom terakhir adalah tempat masalah dimulai. Input-input kecil yang hampir seimbang itu berada di penyebut formula, dan penyebut kecil menghasilkan jawaban besar. Fraksi yang dikembalikan formula untuk SPY adalah 10.1 kali modal, dan yang terendah dari 6 nama masih berada di 2 kali. Kelly penuh pada taruhan ekuitas harian bukanlah persentase dari akun. Itu adalah permintaan untuk leverage yang tidak diberikan oleh broker mana pun dan tidak dapat bertahan oleh akun mana pun.
Bentuk dari trade-off
Itulah teorinya. Panel berikutnya adalah eksperimennya. Ambil pengembalian harian aktual dari tracker S&P 500 selama sepuluh tahun yang sama, skala setiap pengembalian harian dengan ukuran taruhan tetap, dan majemukkan hasilnya. Ukuran taruhan 1,0x adalah indeks tanpa leverage. Ukuran taruhan 3,0x mengkomitmenkan tiga dolar untuk setiap dolar modal, setiap hari, dengan penyeimbangan kembali harian. Setiap baris adalah satu jalur sepuluh tahun penuh, dengan kekayaan akhir dan penurunan terdalam dari puncak ke lembah yang dialami sepanjang jalan.
SQL tepat di balik setiap angka
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 betPada 0.5x jalur berakhir pada 1.92 kali modal awalnya, dengan penurunan terburuk sebesar 18.2% dari puncak sebelumnya. Pada 5x, pengembalian harian yang sama dan dekade yang sama, jalur berakhir pada 14.35 kali, dengan penurunan terburuk sebesar 94.5%.
Kedua kolom bergerak secara berbeda, dan itulah seluruh pelajaran dari Kelly fraksional. Kekayaan akhir meningkat seiring ukuran taruhan untuk sementara waktu, mendatar, dan kemudian berbalik turun ketika hambatan dari pemajemukan volatilitas melampaui eksposur tambahan. Kolom drawdown tidak memiliki titik balik seperti itu. Kolom itu naik di setiap langkah di seluruh 8 baris, dan naik lebih cepat daripada yang pernah dilakukan kolom kekayaan. Setengah dari pertumbuhan taruhan optimal tersedia pada setengah ukuran taruhan optimal, dengan sebagian kecil dari rasa sakit. Asimetri itulah argumen untuk bertaruh kurang dari f*, dan itulah mengapa konvensi setengah-Kelly ada sama sekali.
Estimasi adalah bagian yang lemah, bukan formulanya
Formulanya eksak untuk taruhan yang peluangnya diketahui. Di kasino, peluangnya tercetak. Di pasar, peluangnya diperkirakan dari sejarah, dan perkiraannya goyah. Berikut adalah perhitungan yang sama seperti panel pertama, dijalankan secara terpisah pada masing-masing dari sepuluh tahun kalender untuk satu tracker indeks.
SQL tepat di balik setiap angka
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 yearSetiap baris adalah estimasi dari kuantitas tak dikenal yang sama, dibangun dari sekitar 250 observasi. Tahun 2016 mengembalikan 13.7, pada tingkat kemenangan 53.8%. Tahun 2025 mengembalikan 12.3, pada tingkat kemenangan 57.8%. Bagan menunjukkan seberapa jauh 10 pembacaan dari satu angka bisa mendarat ketika masing-masing diambil dari satu tahun.
Penyebaran itu lebih penting daripada penyempurnaan formula apa pun. Melebih-lebihkan edge Anda dengan faktor dua dan formula akan mengembalikan kira-kira dua kali ukuran taruhan, yang menempatkan Anda pada atau melewati titik di mana pertumbuhan berubah menjadi negatif. Meremehkannya dan Anda melepaskan pertumbuhan yang bisa Anda majemukkan, tanpa risiko kehancuran. Kedua kesalahan itu tidak simetris, dan sisi murah dari asimetri itu adalah sisi kecilnya. Praktisi yang menggunakan Kelly sama sekali cenderung bertaruh setengahnya, atau seperempatnya, dan memperlakukan formula sebagai batas atas daripada target.
Di mana model berhenti mendeskripsikan pasar
Kelly mengasumsikan taruhan yang dapat Anda ulangi dengan peluang tetap dan diketahui, serta hasil yang independen dari satu pengulangan ke pengulangan berikutnya. Pasar melanggar semua itu. Peluang diperkirakan dan berubah seiring waktu. Pengembalian harian mengelompok: periode tenang diikuti periode tenang, dan hari-hari kekerasan tiba dalam kelompok, yang memperpanjang drawdown melampaui apa yang diprediksi oleh asumsi independensi. Posisi tidak diselesaikan pada akhir setiap hari, gap melewati harga di mana taruhan akan ditutup, dan margin call tiba sesuai jadwal broker daripada jadwal model.
Formula masih berguna sebagai batas. Formula menyatakan, dalam satu baris, bahwa ada ukuran taruhan di mana keyakinan yang lebih besar menghasilkan lebih sedikit kekayaan, dan formula menemukan batas itu dari kuantitas yang setidaknya dapat dicoba diukur oleh seorang trader. Itu juga mengapa logika yang sama mengarah pada diversifikasi: beberapa taruhan yang sebagian independen berbagi anggaran risiko total yang sama lebih efisien daripada satu taruhan, yang merupakan aritmatika di balik risiko konsentrasi. Dan bagi investor yang menambahkan uang sesuai jadwal daripada menentukan ukuran taruhan diskrit, pertanyaan ukuran posisi dijawab oleh jadwal itu sendiri, yang merupakan kasus untuk dollar-cost averaging.
FAQ
Apa rumus kriteria Kelly?
Untuk taruhan yang memenangkan fraksi g dari taruhan dengan probabilitas p dan kehilangan fraksi l dengan probabilitas q, fraksi modal yang optimal untuk pertumbuhan adalah f = p / l - q / g. Dalam kasus uang genap, ini disederhanakan menjadi f = p - q, yaitu edge itu sendiri.
Mengapa trader menggunakan setengah Kelly, bukan Kelly penuh?
Pertumbuhan hampir datar di dekat titik optimal sementara risiko terus meningkat melewatinya, sehingga memotong taruhan menjadi setengah akan menyerahkan sejumlah kecil pertumbuhan jangka panjang dan menghilangkan sebagian besar drawdown. Kesalahan estimasi memperkuat argumen ini: taruhan dua kali lipat dari edge yang dilebih-lebihkan berada di dekat titik di mana pertumbuhan berhenti.
Apakah kriteria Kelly berfungsi untuk saham?
Ini berlaku sebagai aritmatika, dan asumsinya tentang peluang tetap yang diketahui serta hasil independen tidak berlaku di pasar. Diterapkan secara naif pada pengembalian ekuitas harian, ia meminta leverage yang jauh melebihi kemampuan akun mana pun, seperti yang ditunjukkan panel pertama di atas.
Apa yang terjadi jika Anda bertaruh lebih dari fraksi Kelly?
Tingkat pertumbuhan jangka panjang turun. Pada kira-kira dua kali fraksi Kelly, ia mencapai sekitar nol, dan di luar itu, taruhan dengan edge nyata akan menyusutkan modal seiring waktu sementara drawdown-nya terus semakin dalam.
Apakah kriteria Kelly sama dengan mempertaruhkan 1% atau 2% per perdagangan?
Tidak. Aturan persentase tetap mengabaikan peluang sama sekali dan menerapkan angka yang sama untuk setiap setup. Kelly menskalakan taruhan dengan edge yang diukur, yang membuatnya lebih responsif ketika edge diketahui dan lebih rapuh ketika edge ditebak.
Setiap angka di atas berasal dari kueri tersimpan yang dapat Anda buka, edit, dan jalankan ulang. Tukar ticker, jendela waktu, atau kisi ukuran taruhan dan ukur sendiri trade-off-nya di terminal Strasmore.