Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

критерій келлі розмір позиції виміряний

Критерій Келлі визначає розмір ставки від переваги. Подивіться, що десять років щоденних прибутковостей акцій означають для повного Келлі, просідання та половини Келлі на практиці.

Критерій Келлі — це формула для розміру ставки. Якщо задати ймовірність виграшу, розмір виграшу та розмір програшу, вона повертає частку капіталу, яка максимізує довгостроковий темп зростання багатства. Джон Келлі опублікував його в Bell Labs у 1956 році як результат теорії інформації, а згодом його перейняли гравці та трейдери. Ця сторінка виводить формулу з перших принципів, а потім вимірює, що вона пропонує на десяти роках реальних щоденних прибутковостей акцій, де ця рекомендація виявляється нездійсненною.

Що насправді говорить критерій Келлі

Розглянемо повторювану ставку, яка з ймовірністю p виграє частку g від поставленої суми, а з ймовірністю q програє частку l, де 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 рік, по шести відомих назвах:

ЗапитПоказники Келлі за щоденними закриттями, 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%.

Дві колонки рухаються по-різному, і в цьому полягає весь урок дробового Келлі. Кінцеве багатство спочатку зростає зі збільшенням розміру ставки, потім вирівнюється і, нарешті, починає падати, коли тягар складної волатильності переважає додаткову експозицію. Колонка просідань не має такої точки перегину. Вона зростає на кожному кроці через усі 8 рядків, і зростає швидше, ніж колонка багатства. Половина зростання оптимальної ставки доступна при половині оптимального розміру ставки, за невеликої частки болю. Ця асиметрія є аргументом на користь ставки, меншої за f*, і саме тому взагалі існує конвенція половинного Келлі.

Оцінка — це слабке місце, а не формула

Формула є точною для ставки, шанси якої відомі. У казино шанси надруковані. На ринку вони оцінюються на основі історії, і оцінка коливається. Ось той самий розрахунок, що й у першій таблиці, виконаний окремо для кожного з десяти календарних років для одного індексного трекера.

ЗапитТой самий розрахунок Келлі для трекера 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 показників одного числа, коли кожен отриманий з одного року.

Цей розкид має більше значення, ніж будь-яке уточнення формули. Якщо завищити свою перевагу вдвічі, формула поверне приблизно вдвічі більший розмір ставки, що поставить вас на межу або за межу, де зростання стає негативним. Якщо занизити її, ви втратите зростання, яке могли б складати, без ризику розорення. Ці дві помилки не симетричні, і дешева сторона асиметрії — це мала сторона. Практики, які взагалі використовують Келлі, зазвичай ставлять половину від нього, або чверть, і ставляться до формули як до стелі, а не як до цілі.

Де модель перестає описувати ринок

Келлі передбачає ставку, яку можна повторювати з фіксованими, відомими шансами та незалежними результатами від одного повторення до іншого. Ринок порушує все це. Шанси оцінюються та змінюються з часом. Щоденні прибутковості кластеризуються: спокійні періоди слідують за спокійними, а бурхливі дні приходять групами, що розтягує просідання далі, ніж передбачає припущення про незалежність. Позиції не закриваються в кінці кожного дня, гепі пропускають ціну, за якою ставка була б закрита, а маржин-коли приходять за графіком брокера, а не за графіком моделі.

Формула все ще виправдовує себе як межа. Вона стверджує в одному рядку, що існує такий розмір ставки, після якого більша впевненість приносить менше багатства, і вона визначає цю межу на основі величин, які трейдер принаймні може спробувати виміряти. Це також причина, чому та сама логіка вказує на диверсифікацію: кілька частково незалежних ставок розподіляють той самий загальний ризиковий бюджет ефективніше, ніж одна ставка, що є арифметикою, яка лежить в основі концентраційного ризику. А для інвестора, який додає гроші за графіком, а не визначає розмір дискретних ставок, питання розміру позиції вирішується самим графіком, що є аргументом на користь усереднення доларової вартості.

FAQ

Яка формула критерію Келлі?

Для ставки, яка виграє частку g від ставки з ймовірністю p та програє частку l з ймовірністю q, оптимальна для зростання частка капіталу становить f = p / l - q / g. У випадку рівних грошей вона спрощується до f = p - q, тобто самої переваги.

Чому трейдери використовують половину Келлі замість повного?

Зростання поблизу оптимуму майже плоске, тоді як ризик продовжує зростати після нього, тому скорочення ставки вдвічі жертвує помірною кількістю довгострокового зростання та усуває велику частку просідання. Помилка оцінки посилює аргумент: подвоєна ставка через завищену перевагу опиняється поблизу точки, де зростання припиняється.

Чи працює критерій Келлі для акцій?

Він застосовний як арифметика, але його припущення про фіксовані відомі шанси та незалежні результати не виконуються на ринках. Наївне застосування до щоденних прибутковостей акцій вимагає кредитного плеча, значно більшого, ніж може витримати будь-який рахунок, як показано в першій таблиці вище.

Що станеться, якщо ставити більше, ніж частка Келлі?

Довгостроковий темп зростання падає. Приблизно при подвоєній частці Келлі він досягає приблизно нуля, а після цього ставка з реальною перевагою з часом зменшує капітал, тоді як її просідання продовжують поглиблюватися.

Чи є критерій Келлі тим самим, що й ризик 1% або 2% на угоду?

Ні. Правило фіксованого відсотка ігнорує шанси повністю та застосовує те саме число до кожної ситуації. Келлі масштабує ставку відповідно до виміряної переваги, що робить його більш чутливим, коли перевага відома, і більш крихким, коли перевага вгадується.


Кожна цифра вище походить із збереженого запиту, який ви можете відкрити, редагувати та запустити повторно. Замініть тікери, вікно або сітку розмірів ставок та виміряйте компроміс самостійно на терміналі Strasmore.