критерий келли размер позиции результаты за 10 лет
Критерий Келли определяет размер ставки на основе вашего преимущества. Узнайте, что десятилетние дневные доходности акций говорят о полном Келли, просадке и половине Келли на практике.
Критерий Келли — это формула для размера ставки. Если подставить в неё вероятность выигрыша, размер выигрыша и размер проигрыша, она возвращает долю капитала, которая максимизирует долгосрочный темп роста благосостояния. Джон Келли опубликовал её в 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 год, по шести знакомым названиям:
Точный 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Прочитайте первые три столбца — и преимущество выглядит крошечным. Доли выигрышей близки к подбрасыванию монеты, а средний день роста и средний день падения близки по размеру для каждого названия в таблице. SPY закрывался ростом в 55.3% своих сессий, прибавляя 0.71% в средний день роста против 0.76% в средний день падения.
Последний столбец — вот где начинаются проблемы. Эти маленькие, почти сбалансированные входные данные стоят в знаменателях формулы, а маленькие знаменатели дают большие ответы. Доля, которую формула возвращает для SPY, составляет 10.1 от капитала, а самое низкое значение среди 6 названий всё равно составляет 2. Полный Келли для дневной ставки на акции — это не процент от счёта. Это требование кредитного плеча, которое не предоставляет ни один брокер и которое не переживёт ни один счёт.
Форма компромисса
Это теория. Следующая таблица — эксперимент. Возьмём фактические дневные доходности трекера S&P 500 за те же десять лет, умножим доходность каждого дня на фиксированный размер ставки и начислим сложный процент. Размер ставки 1,0x — это индекс без плеча. Размер ставки 3,0x означает, что на каждый доллар капитала ежедневно выделяется три доллара, с ежедневной ребалансировкой. Каждая строка — это один полный десятилетний путь с его итоговым капиталом и самым глубоким падением от пика до дна, которое произошло на этом пути.
Точный 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При 0.5x путь закончился на уровне 1.92 от начального капитала, с наихудшим падением на 18.2% от предыдущего максимума. При 5x, на тех же дневных доходностях и за то же десятилетие, путь закончился на уровне 14.35, с наихудшим падением на 94.5%.
Два столбца движутся по-разному, и в этом заключается весь урок дробного Келли. Итоговый капитал сначала растёт с увеличением размера ставки, затем выравнивается и, наконец, начинает снижаться, поскольку негативный эффект от начисления сложных процентов на волатильность перевешивает дополнительную экспозицию. У столбца просадок такой точки перелома нет. Он растёт на каждом шаге по всем 8 строкам, и растёт быстрее, чем когда-либо рос столбец капитала. Половина роста оптимальной ставки доступна при половине её размера и при малой доле связанных с ней страданий. Эта асимметрия является аргументом в пользу ставки меньше f*, и именно поэтому вообще существует соглашение о половинном Келли.
Оценка — слабое место, а не формула
Формула точна для ставки, шансы которой известны. В казино шансы напечатаны. На рынке они оцениваются по истории, и оценка колеблется. Вот тот же расчёт, что и в первой таблице, выполненный отдельно для каждого из десяти календарных лет для одного индексного трекера.
Точный 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Каждая строка — это оценка одной и той же неизвестной величины, построенная примерно на 250 наблюдениях. Год 2016 дал 13.7, при доле выигрышей 53.8%. Год 2025 дал 12.3, при доле выигрышей 57.8%. Диаграмма показывает, насколько далеко друг от друга могут находиться 10 значений одного числа, когда каждое получено из одного года.
Этот разброс имеет большее значение, чем любое уточнение формулы. Если завысить своё преимущество в два раза, формула выдаст примерно вдвое больший размер ставки, что поместит вас в точку, где рост становится отрицательным, или за неё. Если занизить его, вы откажетесь от роста, который могли бы накапливать, без риска разорения. Эти две ошибки несимметричны, и дешёвая сторона асимметрии — это меньшая сторона. Практики, которые вообще используют Келли, склонны ставить половину или четверть от него и рассматривать формулу как потолок, а не как цель.
Где модель перестаёт описывать рынок
Келли предполагает ставку, которую можно повторять с фиксированными, известными шансами, и результаты, которые независимы от одного повторения к другому. Рынок нарушает всё это. Шансы оцениваются и меняются со временем. Дневные доходности кластеризуются: спокойные периоды следуют за спокойными, а волатильные дни приходят группами, что растягивает просадки за пределы того, что предсказывает предположение о независимости. Позиции не закрываются в конце каждого дня, гэпы перескакивают через цену, по которой ставка была бы закрыта, а маржин-коллы приходят по расписанию брокера, а не по расписанию модели.
Тем не менее, формула оправдывает себя как граница. Она утверждает в одной строке, что существует такой размер ставки, после которого большая уверенность приносит меньше богатства, и она определяет эту границу на основе величин, которые трейдер по крайней мере может попытаться измерить. Это также причина, по которой та же логика указывает на диверсификацию: несколько частично независимых ставок распределяют один и тот же общий бюджет риска более эффективно, чем одна ставка, что является арифметикой, лежащей в основе концентрационного риска. А для инвестора, пополняющего счёт по расписанию, а не определяющего размер дискретных ставок, вопрос о размере позиции решается самим расписанием, что является аргументом в пользу усреднения долларовой стоимости.
Часто задаваемые вопросы
Какова формула критерия Келли?
Для ставки, которая выигрывает долю g от ставки с вероятностью p и теряет долю l с вероятностью q, оптимальная для роста доля капитала равна f = p / l - q / g. В случае равных денег она упрощается до f = p - q, то есть самого преимущества.
Почему трейдеры используют половину Келли вместо полного?
Рост вблизи оптимума почти плоский, в то время как риск продолжает расти за его пределами, поэтому урезание ставки вдвое жертвует скромной величиной долгосрочного роста и устраняет большую долю просадки. Ошибка оценки усиливает этот аргумент: удвоенная ставка из-за завышенного преимущества оказывается вблизи точки, где рост прекращается.
Работает ли критерий Келли для акций?
Он применим как арифметика, но его предположения о фиксированных известных шансах и независимых результатах не выполняются на рынках. При наивном применении к дневным доходностям акций он требует кредитного плеча, намного превышающего то, что может выдержать любой счёт, как показано в первой таблице выше.
Что произойдёт, если ставить больше, чем доля Келли?
Долгосрочный темп роста падает. Примерно при удвоенной доле Келли он достигает около нуля, а за этим пределом ставка с реальным преимуществом со временем сокращает капитал, в то время как её просадки продолжают углубляться.
Означает ли критерий Келли то же самое, что и риск 1% или 2% на сделку?
Нет. Правило фиксированного процента полностью игнорирует шансы и применяет одно и то же число к каждой ситуации. Келли масштабирует ставку в соответствии с измеренным преимуществом, что делает его более чувствительным, когда преимущество известно, и более хрупким, когда оно угадано.
Каждая цифра выше получена из сохранённого запроса, который вы можете открыть, отредактировать и запустить заново. Замените тикеры, временной интервал или сетку размеров ставок и измерьте компромисс самостоятельно на терминале Strasmore.