Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

محاسبه اندازه پوزیشن با معیار کلی

معیار کلی فرمولی برای تعیین اندازه شرط‌بندی بر اساس مزیت شماست. این مقاله ده سال بازده روزانه سهام را برای سنجش معیار کلی کامل، کاهش سرمایه و نیمه کلی در عمل بررسی می‌کند.

معیار کلی، فرمولی برای تعیین اندازه شرط‌بندی است. با وارد کردن احتمال برد، میزان برد و میزان باخت، کسری از سرمایه را برمی‌گرداند که نرخ رشد بلندمدت ثروت را به حداکثر می‌رساند. جان کلی در سال 1956 آن را در آزمایشگاه‌های بل به عنوان نتیجه‌ای از نظریه اطلاعات منتشر کرد و قماربازان و معامله‌گران پس از آن آن را پذیرفتند. این صفحه فرمول را از اصول اولیه شرح می‌دهد، سپس آنچه را که تجویز می‌کند بر روی ده سال بازده واقعی سهام روزانه اندازه‌گیری می‌کند، جایی که تجویز غیرقابل تحمل از آب درمی‌آید.

معیار کلی در واقع چه می‌گوید

یک شرط‌بندی تکراری را در نظر بگیرید که با احتمال p کسری g از مبلغ شرط‌بندی شده را برنده می‌شود و با احتمال q (که برابر با یک منهای p است) کسری l از مبلغ شرط‌بندی شده را می‌بازد. کسری از سرمایه که برای هر تکرار بهینه رشد است، عبارت است از:

f* = p / l - q / g

در مورد کلاسیک شرط‌بندی با پول برابر، که در آن برد به اندازه هزینه باخت پرداخت می‌شود، g و l هر دو برابر با 1 هستند و فرمول به f* = p - q ساده می‌شود. این تفاوت خود همان مزیت است. شرطی که 60٪ مواقع در پول برابر برنده می‌شود، 20 امتیاز مزیت دارد و کلی 20٪ از سرمایه را روی آن شرط‌بندی می‌کند.

استخراج این فرمول یک مرحله حساب دیفرانسیل و انتگرال است که بر روی لگاریتم مورد انتظار ثروت اعمال می‌شود. حداکثر کردن میانگین لگاریتم ثروت در هر شرط‌بندی معادل حداکثر کردن نرخ رشد مرکب در یک توالی طولانی است و کسری که آن را به دست می‌آورد، همان کسری است که در بالا ذکر شد. دو ویژگی از آن ناشی می‌شود. کلی هرگز تمام سرمایه را روی شرطی که می‌تواند همه چیز را از دست بدهد، شرط‌بندی نمی‌کند، زیرا لگاریتم صفر منفی بی‌نهایت است. و هر کسری ثابت غیر از f، که به اندازه کافی طولانی تکرار شود، کندتر از f مرکب می‌شود.

یک سکه که می‌توانید با دست آن را بررسی کنید

ارقام این بخش فرضی هستند و برای قابل مشاهده کردن محاسبات انتخاب شده‌اند. یک سکه را در نظر بگیرید که 60٪ مواقع شیر می‌آید و پول برابر پرداخت می‌کند، با سرمایه اولیه 1000 دلار.

  • روی هر پرتاب، 20٪ از سرمایه را شرط‌بندی کنید. یک برد 1000 دلار را به 1200 دلار می‌رساند؛ یک باخت آن را به 800 دلار می‌رساند. یک برد و یک باخت، به هر ترتیبی، 960 دلار باقی می‌گذارد.
  • روی هر پرتاب، 40٪ از سرمایه را شرط‌بندی کنید. همان جفت برد-باخت، 1000 دلار را به 1400 دلار و سپس به 840 دلار می‌رساند.
  • روی هر پرتاب، کل سرمایه را شرط‌بندی کنید. یک دم تکی، توالی را به طور دائم پایان می‌دهد، صرف نظر از اینکه مزیت چقدر بوده است.

این هزینه رفت و برگشت 4٪ با شرط‌بندی 20٪، بهای مرکب کردن یک سرمایه پرنوسان است و یک سکه 60/40 در طول یک توالی طولانی بارها آن را پوشش می‌دهد. با شرط‌بندی 40٪، هزینه رفت و برگشت 16٪ است و سکه دیگر آن را پوشش نمی‌دهد: نرخ رشد با دو برابر کسری کلی تقریباً صفر می‌شود. فراتر از آن نقطه، شرطی با مزیت واقعی و تأیید شده، هیچ چیز را رشد نمی‌دهد، که مفیدترین واقعیتی است که فرمول حمل می‌کند.

آنچه فرمول برای شرط‌بندی روزانه سهام می‌خواهد

اکنون همین فرمول را به سمت بازار بگیرید. یک روز معاملاتی در یک سهم را به عنوان یک تکرار شرط‌بندی در نظر بگیرید: احتمال برد، سهم روزهایی است که با افزایش بسته شده‌اند، اندازه برد، میانگین حرکت روزهای صعودی است و اندازه باخت، میانگین حرکت روزهای نزولی است. ده سال تقویمی کامل از قیمت‌های پایانی روزانه، از سال 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.0 برابر، شاخص بدون اهرم است. اندازه شرط 3.0 برابر، هر روز سه دلار برای هر دلار سرمایه تعهد می‌کند و روزانه مجدداً متعادل می‌شود. هر ردیف یک مسیر کامل ده ساله است، با ثروت پایانی آن و عمیق‌ترین افت از اوج به حضیض که در طول راه داشته است.

پرس‌وجویک دهه بازده روزانه 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%.

این دو ستون به طور متفاوتی حرکت می‌کنند و این کل درس کلی کسری است. ثروت پایانی با اندازه شرط برای مدتی افزایش می‌یابد، مسطح می‌شود و سپس کاهش می‌یابد زیرا کشش ناشی از نوسانات مرکب بر قرار گرفتن در معرض اضافی غلبه می‌کند. ستون کاهش (drawdown) هیچ نقطه چرخش ندارد. با هر مرحله در میان ردیف‌های 8 افزایش می‌یابد و سریعتر از ستون ثروت افزایش می‌یابد. نیمی از رشد شرط بهینه با نیمی از اندازه شرط بهینه، با کسری کوچک از درد در دسترس است. این عدم تقارن استدلال برای شرط‌بندی کمتر از f* است و دلیل وجود قرارداد نیمه کلی است.

تخمین بخش ضعیف است، نه فرمول

این فرمول برای شرطی با شانس‌های معلوم دقیق است. در کازینو، شانس‌ها چاپ شده‌اند. در بازار، آنها از تاریخ تخمین زده می‌شوند و تخمین متغیر است. در اینجا همان محاسبه پنل اول آمده است، که به طور جداگانه بر روی هر یک از ده سال تقویمی برای یک ردیاب شاخص واحد اجرا شده است.

پرس‌وجوهمان محاسبه کلی روی ردیاب 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 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 با نرخ برد 53.813.7 را بازگرداند. سال 2025 با نرخ برد 57.812.3 را بازگرداند. نمودار نشان می‌دهد که خوانش‌های 10 از یک عدد، هنگامی که هر کدام از یک سال واحد گرفته شده‌اند، چقدر می‌توانند از هم دور باشند.

این پراکندگی بیش از هرگونه اصلاح فرمول اهمیت دارد. اگر مزیت خود را دو برابر کنید، فرمول تقریباً دو برابر اندازه شرط را برمی‌گرداند، که شما را در نقطه یا فراتر از نقطه‌ای قرار می‌دهد که رشد منفی می‌شود. اگر آن را دست کم بگیرید، رشدی را که می‌توانستید مرکب کنید، بدون هیچ خطری از نابودی، از دست می‌دهید. این دو خطا متقارن نیستند و سمت ارزان عدم تقارن، سمت کوچک است. فعالانی که از کلی استفاده می‌کنند، تمایل دارند نیمی یا یک چهارم آن را شرط‌بندی کنند و فرمول را به عنوان یک سقف در نظر بگیرند تا یک هدف.

جایی که مدل بازار را توصیف نمی‌کند

کلی فرض می‌کند شرطی که می‌توانید با شانس‌های ثابت و معلوم تکرار کنید و نتایجی که از تکرار بعدی مستقل هستند. بازار همه اینها را می‌شکند. شانس‌ها تخمین زده می‌شوند و در طول زمان تغییر می‌کنند. بازده روزانه خوشه‌ای است: دوره‌های آرام پس از دوره‌های آرام می‌آیند و روزهای خشونت‌آمیز به صورت گروهی می‌آیند، که باعث می‌شود افت‌ها فراتر از آنچه فرض استقلال پیش‌بینی می‌کند، طول بکشد. موقعیت‌ها در پایان هر روز تسویه نمی‌شوند، شکاف‌ها از قیمتی که شرط بسته شده بود می‌پرند و تماس‌های مارجین طبق برنامه کارگزار می‌رسند نه طبق برنامه مدل.

این فرمول همچنان به عنوان یک مرز ارزش خود را حفظ می‌کند. در یک خط بیان می‌کند که اندازه شرطی وجود دارد که فراتر از آن، اطمینان بیشتر، ثروت کمتری تولید می‌کند و آن مرز را از مقادیری که معامله‌گر حداقل می‌تواند تلاش کند اندازه‌گیری کند، تعیین می‌کند. این همچنین دلیل این است که همان منطق به سمت تنوع‌بخشی اشاره می‌کند: چندین شرط‌بندی تا حدی مستقل، بودجه ریسک کل را به طور مؤثرتری نسبت به یک شرط به اشتراک می‌گذارند، که حساب زیربنای ریسک تمرکز است. و برای سرمایه‌گذاری که پول را بر اساس یک برنامه اضافه می‌کند تا شرط‌بندی‌های گسسته را اندازه‌گیری کند، سوال اندازه موقعیت توسط خود برنامه پاسخ داده می‌شود، که مورد میانگین هزینه دلاری است.

پرسش و پاسخ

فرمول معیار کلی چیست؟

برای شرطی که با احتمال p کسری g از شرط را برنده می‌شود و با احتمال q کسری l را می‌بازد، کسری از سرمایه که رشد آن بهینه است، f = p / l - q / g است. در مورد پول برابر، به f = p - q، خود مزیت، ساده می‌شود.

چرا معامله‌گران به جای کلی کامل از نیمه کلی استفاده می‌کنند؟

رشد در نزدیکی نقطه بهینه تقریباً مسطح است در حالی که ریسک فراتر از آن افزایش می‌یابد، بنابراین نصف کردن شرط، مقدار متوسطی از رشد بلندمدت را واگذار می‌کند و سهم بزرگی از افت را حذف می‌کند. خطای تخمین استدلال را تشدید می‌کند: شرط دو برابر شده از یک مزیت بیش از حد برآورد شده، نزدیک نقطه‌ای است که رشد متوقف می‌شود.

آیا معیار کلی برای سهام کار می‌کند؟

به عنوان حسابداری اعمال می‌شود و مفروضات آن مبنی بر شانس‌های معلوم ثابت و نتایج مستقل در بازارها برقرار نیست. اگر به طور سطحی بر روی بازده روزانه سهام اعمال شود، اهرمی را می‌خواهد که بسیار فراتر از آنچه هر حسابی می‌تواند تحمل کند، همانطور که پنل اول بالا نشان می‌دهد.

اگر بیش از کسری کلی شرط‌بندی کنید چه اتفاقی می‌افتد؟

نرخ رشد بلندمدت کاهش می‌یابد. در حدود دو برابر کسری کلی، به حدود صفر می‌رسد و فراتر از آن، شرطی با مزیت واقعی سرمایه را در طول زمان کوچک می‌کند در حالی که افت‌های آن عمیق‌تر می‌شود.

آیا معیار کلی با ریسک 1٪ یا 2٪ در هر معامله یکسان است؟

خیر. یک قانون درصد ثابت، شانس‌ها را کاملاً نادیده می‌گیرد و همان عدد را برای هر موقعیت اعمال می‌کند. کلی شرط را با مزیت اندازه‌گیری شده مقیاس‌بندی می‌کند، که باعث می‌شود زمانی که مزیت معلوم است پاسخگوتر و زمانی که مزیت حدس زده می‌شود شکننده‌تر باشد.


هر رقم بالا از یک پرس و جو ذخیره شده می‌آید که می‌توانید آن را باز کنید، ویرایش کنید و دوباره اجرا کنید. نمادها، پنجره یا شبکه اندازه شرط را عوض کنید و بده بستان را خودتان در ترمینال استراسمور اندازه‌گیری کنید.