Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

เกณฑ์เคลลี่ การกำหนดขนาดสถานะ

เกณฑ์เคลลี่กำหนดขนาดการเดิมพันจากอัตราต่อรองของคุณ ดูว่าผลตอบแทนรายวันของหุ้นสิบปีบ่งชี้ถึงเกณฑ์เคลลี่เต็ม การลดลง และครึ่งเกณฑ์เคลลี่ในทางปฏิบัติอย่างไร

เกณฑ์เคลลี่เป็นสูตรสำหรับขนาดการเดิมพัน ป้อนความน่าจะเป็นที่จะชนะ ขนาดของการชนะ และขนาดของการขาดทุน แล้วสูตรจะคืนค่าสัดส่วนของเงินทุนที่จะเพิ่มอัตราการเติบโตของความมั่งคั่งในระยะยาวให้สูงสุด จอห์น เคลลี่ ตีพิมพ์ในปี 1956 ที่ Bell Labs ในฐานะผลลัพธ์ของทฤษฎีสารสนเทศ และนักพนันและผู้ค้าก็นำไปใช้ในภายหลัง หน้าเว็บนี้จะอธิบายสูตรตั้งแต่หลักการพื้นฐาน จากนั้นวัดผลตามที่กำหนดจากการซื้อขายหุ้นจริงรายวันเป็นเวลาสิบปี ซึ่งผลลัพธ์ที่ได้นั้นไม่สามารถดำรงอยู่ได้

สิ่งที่เกณฑ์เคลลี่กล่าวถึงจริงๆ

พิจารณาการเดิมพันซ้ำๆ ที่ชนะเป็นเศษส่วน g ของจำนวนเงินที่วางเดิมพันด้วยความน่าจะเป็น p และเสียเป็นเศษส่วน l ของจำนวนเงินที่วางเดิมพันด้วยความน่าจะเป็น q โดยที่ q คือหนึ่งลบ p สัดส่วนของเงินทุนที่เหมาะสมที่สุดสำหรับการเติบโตที่จะจัดสรรในการทำซ้ำแต่ละครั้งคือ:

f* = p / l - q / g

ในกรณีการเดิมพันแบบเงินคู่แบบคลาสสิก ซึ่งการชนะจะจ่ายเท่ากับต้นทุนของการขาดทุน g และ l เท่ากับ 1 ทั้งคู่ และสูตรจะลดรูปเหลือ f* = p - q ส่วนต่างนั้นคือความได้เปรียบเอง การเดิมพันที่ชนะ 60% ของเวลาด้วยเงินคู่จะมีความได้เปรียบ 20 จุด และเคลลี่จะวางเดิมพัน 20% ของเงินทุนทั้งหมดในการเดิมพันนั้น

การอนุมานเป็นขั้นตอนเดียวของการคำนวณแคลคูลัสที่ใช้กับค่าเฉลี่ยลอการิทึมของความมั่งคั่ง การเพิ่มค่าเฉลี่ยลอการิทึมของความมั่งคั่งต่อการเดิมพันให้สูงสุด เทียบเท่ากับการเพิ่มอัตราการเติบโตแบบทบต้นในระยะยาว และสัดส่วนที่บรรลุผลคือสัดส่วนข้างต้น คุณสมบัติสองประการที่ได้จากสิ่งนั้น เคลลี่ไม่เคยวางเดิมพันทั้งบัญชีในการเดิมพันที่สามารถสูญเสียทุกอย่างได้ เนื่องจากลอการิทึมของศูนย์คือลบอนันต์ และสัดส่วนคงที่ใดๆ ที่ไม่ใช่ f เมื่อทำซ้ำนานพอ จะทบต้นช้ากว่า f

การโยนเหรียญที่คุณสามารถตรวจสอบได้ด้วยมือ

ตัวเลขในส่วนนี้เป็นสมมติฐานที่เลือกมาเพื่อให้การคำนวณมองเห็นได้ง่าย พิจารณาเหรียญที่ออกหัว 60% ของเวลาและจ่ายเงินคู่ โดยมีเงินทุนเริ่มต้น 1,000 ดอลลาร์

  • วางเดิมพัน 20% ของเงินทุนในการโยนแต่ละครั้ง การชนะจะทำให้เงินจาก 1,000 ดอลลาร์ เป็น 1,200 ดอลลาร์ การขาดทุนจะทำให้เงินลดลงเหลือ 800 ดอลลาร์ การชนะหนึ่งครั้งและการขาดทุนหนึ่งครั้ง ในลำดับใดก็ตาม จะเหลือ 960 ดอลลาร์
  • วางเดิมพัน 40% ของเงินทุนในการโยนแต่ละครั้ง การชนะแล้วขาดทุนคู่เดียวกันจะทำให้เงินจาก 1,000 ดอลลาร์ เป็น 1,400 ดอลลาร์ แล้วเหลือ 840 ดอลลาร์
  • วางเดิมพันทั้งบัญชีในการโยนแต่ละครั้ง การออกก้อยเพียงครั้งเดียวจะสิ้นสุดลำดับอย่างถาวร ไม่ว่าความได้เปรียบจะเป็นเท่าใดก็ตาม

ต้นทุนไปกลับ 4% ที่การวางเดิมพัน 20% นี้คือราคาของการทบต้นเงินทุนที่ผันผวน และเหรียญ 60/40 สามารถครอบคลุมได้หลายครั้งตลอดลำดับที่ยาวนาน ที่การวางเดิมพัน 40% ต้นทุนไปกลับคือ 16% และเหรียญไม่สามารถครอบคลุมได้อีกต่อไป: อัตราการเติบโตที่สองเท่าของสัดส่วนเคลลี่จะอยู่ที่ประมาณศูนย์ หลังจากจุดนั้น การเดิมพันที่มีความได้เปรียบที่แท้จริงและได้รับการยืนยันจะไม่เพิ่มอะไรเลย ซึ่งเป็นข้อเท็จจริงที่สำคัญที่สุดที่สูตรนี้มีให้

สิ่งที่สูตรต้องการในการเดิมพันหุ้นรายวัน

ตอนนี้ลองใช้สูตรเดียวกันกับตลาด พิจารณาหนึ่งวันซื้อขายในหนึ่งหุ้นเป็นการเดิมพันซ้ำหนึ่งครั้ง: ความน่าจะเป็นที่จะชนะคือสัดส่วนของวันที่ปิดบวก ขนาดของการชนะคือการเคลื่อนไหวเฉลี่ยในวันบวก และขนาดของการขาดทุนคือการเคลื่อนไหวเฉลี่ยในวันลบ การปิดรายวันเต็มสิบปีปฏิทิน ตั้งแต่ปี 2016 ถึง 2025 สำหรับหุ้นที่คุ้นเคยหกชื่อ:

คำสั่งดึงข้อมูลข้อมูล Kelly จากราคาปิดรายวัน, 2016 ถึง 2025: อัตราการชนะ, กำไรเฉลี่ย, ขาดทุนเฉลี่ย, และสัดส่วนที่สูตรคำนวณได้
SQL เบื้องหลังตัวเลขแต่ละตัว
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

อ่านสามคอลัมน์แรก และความได้เปรียบดูเล็กน้อย อัตราการชนะใกล้เคียงกับการโยนเหรียญ และวันบวกเฉลี่ยกับวันลบเฉลี่ยมีขนาดใกล้เคียงกันสำหรับทุกชื่อในตาราง SPY ปิดสูงขึ้นใน 55.3% ของช่วงการซื้อขาย โดยได้ 0.71% ในวันบวกเฉลี่ย เทียบกับ 0.76% ในวันลบเฉลี่ย

คอลัมน์สุดท้ายคือจุดที่ปัญหาเริ่มต้น อินพุตขนาดเล็กที่เกือบจะสมดุลเหล่านี้อยู่ในตัวหารของสูตร และตัวหารขนาดเล็กจะให้ผลลัพธ์ขนาดใหญ่ สัดส่วนที่สูตรคืนค่าสำหรับ SPY คือ 10.1 เท่าของเงินทุน และค่าที่ต่ำที่สุดในบรรดาชื่อ 6 ยังคงอยู่ที่ 2 เท่า เคลลี่เต็มรูปแบบในการเดิมพันหุ้นรายวันไม่ใช่เปอร์เซ็นต์ของบัญชี แต่เป็นการเรียกร้องเลเวอเรจที่ไม่มีโบรกเกอร์ใดเสนอให้และไม่มีบัญชีใดอยู่รอดได้

รูปแบบของการแลกเปลี่ยน

นั่นคือทฤษฎี แผงถัดไปคือการทดลอง นำผลตอบแทนรายวันจริงของดัชนี S&P 500 ในช่วงสิบปีเดียวกัน ปรับขนาดผลตอบแทนของแต่ละวันด้วยขนาดการเดิมพันคงที่ และทบต้นผลลัพธ์ ขนาดการเดิมพัน 1.0x คือดัชนีที่ไม่ใช้เลเวอเรจ ขนาดการเดิมพัน 3.0x คือการผูกเงินสามดอลลาร์สำหรับทุกดอลลาร์ของเงินทุน ทุกวัน โดยปรับสมดุลทุกวัน แต่ละแถวคือเส้นทางเต็มสิบปี พร้อมด้วยความมั่งคั่งสุดท้ายและการลดลงสูงสุดจากจุดสูงสุดก่อนหน้า

คำสั่งดึงข้อมูลผลตอบแทนรายวันของ S&P 500 ในทศวรรษเดียว ทบต้นด้วยขนาดเดิมพันคงที่แปดขนาด: มูลค่าทรัพย์สินสุดท้ายและการขาดทุนสูงสุด
SQL เบื้องหลังตัวเลขแต่ละตัว
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

ที่ 0.5x เส้นทางสิ้นสุดลงที่ 1.92 เท่าของเงินทุนเริ่มต้น โดยมีการลดลงที่เลวร้ายที่สุด 18.2% จากจุดสูงสุดก่อนหน้า ที่ 5x ผลตอบแทนรายวันเดียวกันและทศวรรษเดียวกัน เส้นทางสิ้นสุดลงที่ 14.35 เท่า โดยมีการลดลงที่เลวร้ายที่สุด 94.5%

สองคอลัมน์เคลื่อนที่แตกต่างกัน และนั่นคือบทเรียนทั้งหมดของ fractional Kelly ความมั่งคั่งสุดท้ายเพิ่มขึ้นตามขนาดการเดิมพันไประยะหนึ่ง แล้วแบนลง จากนั้นจึงลดลงเนื่องจากแรงฉุดจากการทบต้นความผันผวนเข้ามาแทนที่การเปิดรับที่เพิ่มขึ้น คอลัมน์ drawdown ไม่มีจุดเปลี่ยนดังกล่าว มันเพิ่มขึ้นทุกขั้นตอนตลอดแถว 8 และมันเพิ่มขึ้นเร็วกว่าคอลัมน์ความมั่งคั่งที่เคยเป็นมา ครึ่งหนึ่งของการเติบโตของการเดิมพันที่เหมาะสมที่สุดสามารถหาได้ที่ครึ่งหนึ่งของขนาดการเดิมพันที่เหมาะสมที่สุด โดยมีต้นทุนน้อยกว่ามาก ความไม่สมมาตรนั้นคือข้อโต้แย้งสำหรับการวางเดิมพันน้อยกว่า f* และนั่นคือเหตุผลที่การกำหนดครึ่งเคลลี่มีอยู่จริง

การประมาณค่าคือส่วนที่อ่อนแอ ไม่ใช่สูตร

สูตรนี้แม่นยำสำหรับการเดิมพันที่มีอัตราต่อรองที่ทราบ ในคาสิโน อัตราต่อรองจะถูกพิมพ์ออกมา ในตลาด อัตราต่อรองจะถูกประมาณจากประวัติศาสตร์ และการประมาณค่าจะแกว่งไปมา นี่คือการคำนวณเดียวกันกับแผงแรกที่ดำเนินการแยกกันในแต่ละปีปฏิทินสำหรับตัวติดตามดัชนีเดียว

คำสั่งดึงข้อมูลการคำนวณ Kelly แบบเดียวกันกับดัชนี S&P 500, รายปี, 2016 ถึง 2025
SQL เบื้องหลังตัวเลขแต่ละตัว
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

แต่ละแถวคือการประมาณค่าของปริมาณที่ไม่ทราบค่าเดียวกัน ซึ่งสร้างขึ้นจากการสังเกตประมาณ 250 รายการ ปี 2016 ให้ผลตอบแทน 13.7 ด้วยอัตราการชนะ 53.8% ปี 2025 ให้ผลตอบแทน 12.3 ด้วยอัตราการชนะ 57.8% แผนภูมิจัดแสดงว่าการอ่านค่า 10 ของตัวเลขหนึ่งตัวสามารถแตกต่างกันได้มากเพียงใดเมื่อแต่ละค่าถูกดึงมาจากปีเดียว

การกระจายตัวนั้นมีความสำคัญมากกว่าการปรับปรุงสูตรใดๆ การประเมินความได้เปรียบของคุณเกินสองเท่า และสูตรจะคืนค่าขนาดการเดิมพันเป็นสองเท่า ซึ่งจะทำให้คุณอยู่ที่จุดที่การเติบโตเริ่มลดลงหรือเกินกว่านั้น การประเมินต่ำเกินไปและคุณจะสูญเสียการเติบโตที่คุณสามารถทบต้นได้ โดยไม่มีความเสี่ยงที่จะล้มละลาย ข้อผิดพลาดทั้งสองนี้ไม่สมมาตร และด้านที่ถูกกว่าของความไม่สมมาตรคือด้านที่เล็กกว่า ผู้ปฏิบัติงานที่ใช้เคลลี่มักจะวางเดิมพันครึ่งหนึ่ง หรือหนึ่งในสี่ และปฏิบัติต่อสูตรว่าเป็นเพดานมากกว่าเป้าหมาย

ที่ที่แบบจำลองหยุดอธิบายตลาด

เคลลี่สมมติว่าการเดิมพันที่คุณสามารถทำซ้ำได้ด้วยอัตราต่อรองคงที่และทราบ และผลลัพธ์ที่เป็นอิสระจากการทำซ้ำครั้งต่อไป ตลาดทำลายสิ่งเหล่านั้นทั้งหมด อัตราต่อรองจะถูกประมาณและเปลี่ยนแปลงไปตามกาลเวลา ผลตอบแทนรายวันจะเกาะกลุ่มกัน: ช่วงที่เงียบสงบตามมาด้วยช่วงที่เงียบสงบ และวันที่มีความรุนแรงจะมาเป็นกลุ่ม ซึ่งทำให้ drawdown เกินกว่าที่สมมติฐานความเป็นอิสระคาดการณ์ไว้ ตำแหน่งจะไม่ถูกปิดเมื่อสิ้นสุดแต่ละวัน ช่องว่างจะข้ามราคาที่การเดิมพันจะถูกปิด และการเรียกหลักประกันจะมาตามกำหนดเวลาของโบรกเกอร์แทนที่จะเป็นกำหนดเวลาของแบบจำลอง

สูตรนี้ยังคงมีคุณค่าในฐานะขอบเขต มันระบุในบรรทัดเดียวว่ามีขนาดการเดิมพันที่เกินกว่านั้น ความเชื่อมั่นที่มากขึ้นจะให้ผลตอบแทนน้อยลง และมันจะระบุขอบเขตนั้นจากปริมาณที่ผู้ค้าสามารถพยายามวัดได้อย่างน้อยที่สุด นั่นคือเหตุผลที่ตรรกะเดียวกันชี้ไปที่การกระจายความเสี่ยง: การเดิมพันหลายรายการที่เป็นอิสระต่อกันบางส่วนจะแบ่งปันงบประมาณความเสี่ยงรวมอย่างมีประสิทธิภาพมากกว่าการเดิมพันเดียว ซึ่งเป็นหลักการคำนวณเบื้องหลัง ความเสี่ยงจากการกระจุกตัว และสำหรับนักลงทุนที่เพิ่มเงินตามกำหนดเวลาแทนที่จะปรับขนาดการเดิมพันเป็นครั้งคราว คำถามเกี่ยวกับการปรับขนาดตำแหน่งจะได้รับคำตอบจากกำหนดเวลาเอง ซึ่งเป็นกรณีของ การเฉลี่ยต้นทุนเป็นดอลลาร์

คำถามที่พบบ่อย

สูตรเกณฑ์เคลลี่คืออะไร?

สำหรับการเดิมพันที่ชนะเป็นเศษส่วน g ของเงินเดิมพันด้วยความน่าจะเป็น p และเสียเป็นเศษส่วน l ด้วยความน่าจะเป็น q สัดส่วนของเงินทุนที่เหมาะสมที่สุดสำหรับการเติบโตคือ f = p / l - q / g ในกรณีเงินคู่ จะลดรูปเหลือ f = p - q ซึ่งก็คือความได้เปรียบเอง

ทำไมนักเทรดถึงใช้ครึ่งเคลลี่แทนที่จะใช้เต็มเคลลี่?

การเติบโตจะค่อนข้างคงที่ใกล้เคียงจุดที่เหมาะสมที่สุด ในขณะที่ความเสี่ยงจะเพิ่มขึ้นเรื่อยๆ ดังนั้นการลดการเดิมพันลงครึ่งหนึ่งจะยอมเสียการเติบโตในระยะยาวไปเล็กน้อย และลดส่วนแบ่ง drawdown ลงอย่างมาก ข้อผิดพลาดในการประมาณค่าจะทวีคูณข้อโต้แย้ง: การเดิมพันสองเท่าจากความได้เปรียบที่ประเมินสูงเกินไปจะอยู่ที่จุดที่การเติบโตหยุดลง

เกณฑ์เคลลี่ใช้ได้กับหุ้นหรือไม่?

มันใช้ได้ในเชิงคณิตศาสตร์ และสมมติฐานเกี่ยวกับอัตราต่อรองคงที่ที่ทราบและผลลัพธ์ที่เป็นอิสระไม่เป็นจริงในตลาด เมื่อนำไปใช้กับผลตอบแทนหุ้นรายวันโดยไม่ระมัดระวัง มันจะขอเลเวอเรจที่เกินกว่าที่บัญชีใดๆ จะรับได้ ดังที่แสดงในแผงแรกข้างต้น

จะเกิดอะไรขึ้นถ้าคุณเดิมพันมากกว่าสัดส่วนเคลลี่?

อัตราการเติบโตในระยะยาวจะลดลง ที่ประมาณสองเท่าของสัดส่วนเคลลี่ จะถึงประมาณศูนย์ และหลังจากนั้น การเดิมพันที่มีความได้เปรียบที่แท้จริงจะลดเงินทุนลงเมื่อเวลาผ่านไป ในขณะที่ drawdown จะลึกลงไปเรื่อยๆ

เกณฑ์เคลลี่เหมือนกับการเสี่ยง 1% หรือ 2% ต่อการเทรดหรือไม่?

ไม่ กฎเปอร์เซ็นต์คงที่จะละเลยอัตราต่อรองทั้งหมดและใช้ตัวเลขเดียวกันกับทุกสถานการณ์ เคลลี่ปรับขนาดการเดิมพันตามความได้เปรียบที่วัดได้ ซึ่งทำให้ตอบสนองได้ดีขึ้นเมื่อทราบความได้เปรียบ และเปราะบางมากขึ้นเมื่อเดาความได้เปรียบ


ตัวเลขทั้งหมดข้างต้นมาจากคิวรีที่จัดเก็บไว้ ซึ่งคุณสามารถเปิด แก้ไข และเรียกใช้ซ้ำได้ สลับสัญลักษณ์ ชื่อหน้าต่าง หรือตารางขนาดการเดิมพัน และวัดการแลกเปลี่ยนด้วยตัวคุณเองบนเทอร์มินัล Strasmore