最大化长期复合增长率 G,通过下注比例 f 平衡收益与风险。
假设胜率 p,赔率 b(净赔率,损失为1),则单次期望对数增长:
对 f 求导并令导数为零,得到最优比例:
当 b=1(等额赔率)时简化为 f* = 2p - 1。
| 参数 | 数值 | 最优 f* |
|---|---|---|
| p=55%, b=2 | 净赔率 2:1 | f* = 0.325 |
| p=60%, b=1 | 盈亏等额 | f* = 0.20 |
| p=45%, b=3 | 高赔率 | f* = 0.183 |
| p=50%, b=0.8 | 赔率不足 | f* = 0.125 |
⚠️ 若 f* ≤ 0,表示没有正期望,不应下注。
f_half = 0.5 × f*
根据信号期望计算 f*,再乘以账户权益
每笔交易后重新评估 p 和 b,使用半凯利平滑
多资产风险平价,用凯利分配各品种权重
def kelly_criterion(p, b, half=False):
"""
p : 胜率 (0~1)
b : 净赔率 (例如 2 表示盈利为2倍本金)
half : 是否使用半凯利
返回最优下注比例 f*
"""
if p <= 0 or b <= 0:
return 0
f_star = (p * (b + 1) - 1) / b
if f_star < 0:
f_star = 0.0
if half:
f_star *= 0.5
return round(f_star, 4)
# 示例
print(kelly_criterion(0.6, 1)) # 0.2
print(kelly_criterion(0.55, 2, half=True)) # 0.1625
print(kelly_criterion(0.5, 0.8)) # 0.125
📌 输出:0.2, 0.1625, 0.125