켈리 공식이란?
퀀트 투자에서 “어떤 전략으로 매매할까”만큼 중요한 질문이 있습니다. “한 번에 얼마를 걸까?”입니다. 켈리 공식(Kelly Criterion)은 수학적으로 최적의 베팅 비율을 계산하는 공식으로, 장기적으로 자산을 가장 빠르게 성장시키는 자금 배분 전략입니다.
1956년 벨 연구소의 존 켈리(John Kelly)가 발표한 이 공식은 원래 통신 이론에서 출발했지만, 이후 월스트리트 퀀트들이 투자에 적용하면서 자금 관리의 핵심 도구로 자리 잡았습니다.
켈리 공식의 수학
f* = (bp - q) / b
f* = 최적 베팅 비율 (전체 자금 대비)
b = 순 배당률 (이길 때 수익 / 질 때 손실)
p = 승률
q = 패률 (1 - p)
예를 들어, 승률 55%, 손익비 1.5:1인 전략이라면:
f* = (1.5 × 0.55 - 0.45) / 1.5
f* = (0.825 - 0.45) / 1.5
f* = 0.25 → 전체 자금의 25%
이론적으로 매 거래마다 자금의 25%를 투입하면 장기 수익이 극대화됩니다. 하지만 실전에서 이 비율을 그대로 쓰면 큰 위험에 노출됩니다.
풀 켈리가 위험한 이유
1. 추정치의 불확실성
승률과 손익비는 과거 데이터에서 추정한 값입니다. 실전에서는 시장 환경 변화로 이 수치가 달라질 수 있습니다. 추정이 조금만 빗나가도 풀 켈리는 과도한 베팅이 됩니다.
2. 극단적인 드로우다운
풀 켈리 비율은 수학적 기대값을 최대화하지만, 그 과정에서 50~70%의 드로우다운이 발생할 수 있습니다. 대부분의 트레이더는 이 수준의 손실을 심리적으로 견디지 못합니다.
3. 파산 위험
연속 손실이 발생하면 자금이 급격히 줄어듭니다. 이론적으로 켈리 공식은 파산하지 않지만(비율 베팅이므로), 실전에서는 최소 거래 단위 이하로 자금이 줄어들면 사실상 파산과 같습니다.
하프 켈리 전략
실전에서는 하프 켈리(Half Kelly), 즉 켈리 공식 결과의 절반만 베팅하는 것이 표준입니다.
| 비교 항목 | 풀 켈리 | 하프 켈리 |
|---|---|---|
| 기대 성장률 | 100% | 75% |
| 최대 드로우다운 | 50~70% | 25~35% |
| 심리적 부담 | 극심 | 관리 가능 |
| 추정 오류 내성 | 낮음 | 높음 |
하프 켈리는 성장률의 25%만 포기하면서 드로우다운을 절반으로 줄입니다. 위험 대비 효율이 가장 좋은 지점입니다.
Python 구현
import numpy as np
def kelly_fraction(win_rate, win_loss_ratio, fraction=0.5):
"""
켈리 비율 계산
Args:
win_rate: 승률 (0~1)
win_loss_ratio: 평균 수익 / 평균 손실
fraction: 켈리 비율 적용 (0.5 = 하프 켈리)
Returns:
최적 베팅 비율 (자금 대비 %)
"""
b = win_loss_ratio
p = win_rate
q = 1 - p
full_kelly = (b * p - q) / b
if full_kelly <= 0:
return 0 # 기대값이 음수면 베팅하지 않음
return round(full_kelly * fraction, 4)
def kelly_from_trades(trades, fraction=0.5):
"""과거 거래 기록에서 켈리 비율 자동 계산"""
wins = [t for t in trades if t > 0]
losses = [t for t in trades if t < 0]
if not wins or not losses:
return 0
win_rate = len(wins) / len(trades)
avg_win = np.mean(wins)
avg_loss = abs(np.mean(losses))
win_loss_ratio = avg_win / avg_loss
return kelly_fraction(win_rate, win_loss_ratio, fraction)
# 사용 예시
trades = [100, -50, 150, -80, 120, -60, 200, -70, 90, -40]
bet_size = kelly_from_trades(trades, fraction=0.5)
print(f"하프 켈리 베팅 비율: {bet_size * 100:.1f}%")
# 직접 입력
bet_size = kelly_fraction(win_rate=0.55, win_loss_ratio=1.5, fraction=0.5)
print(f"하프 켈리 베팅 비율: {bet_size * 100:.1f}%")
자동매매 시스템에 켈리 적용하기
동적 켈리 (Rolling Kelly)
고정된 켈리 비율 대신, 최근 N회 거래 결과를 기반으로 켈리 비율을 실시간 업데이트하는 방법입니다.
- 최근 50~100회 거래 기록으로 승률과 손익비를 재계산
- 전략 성과가 나빠지면 자동으로 베팅 비율이 줄어듦
- 시장 환경 변화에 자기 적응(Self-Adaptive)하는 효과
멀티 전략 켈리
여러 전략을 동시에 운용할 때, 각 전략별로 켈리 비율을 계산한 뒤 전체 자금을 배분합니다.
- 전략 A: 하프 켈리 12% → 전체 자금의 12% 배정
- 전략 B: 하프 켈리 8% → 전체 자금의 8% 배정
- 전략 간 상관관계가 낮을수록 분산 효과 극대화
최대 베팅 한도 설정
켈리 공식 결과와 무관하게, 단일 거래 최대 비율을 제한하는 안전장치가 필수입니다.
- 보수적: 전체 자금의 2~3% 상한
- 일반적: 전체 자금의 5% 상한
- 공격적: 전체 자금의 10% 상한 (비추천)
켈리 공식의 한계
- 승률과 손익비가 일정하다고 가정하지만 시장은 변합니다
- 거래 비용(수수료, 슬리피지)을 별도로 반영해야 합니다
- 레버리지 거래에서는 청산 위험을 추가로 고려해야 합니다
- 심리적 한계 — 수학적 최적이 실행 가능한 최적은 아닙니다
결론
켈리 공식은 "감"이 아닌 수학으로 자금을 관리하는 퀀트 투자의 핵심 도구입니다. 단, 풀 켈리는 위험하므로 하프 켈리를 기본으로 사용하고, 최대 베팅 한도를 반드시 설정하세요. 전략의 수익성만큼 중요한 것이 자금 생존입니다.
켈리 공식으로 베팅 비율을 정했다면, 샤프 비율로 전략 품질을 평가하고, 계좌 생존 규칙 7가지로 리스크 관리 체계를 완성하세요.