关于 kelly-criterion
kelly-criterion 是面向交易者的 Kelly 仓位计算与实践指导技能,依据胜率和盈亏比估算资金投入比例。内容涵盖分数 Kelly、边际估算、相关性调整及组合限制,并提供计算脚本。
主要功能
- 01按胜率和盈亏比计算 Kelly 比例
- 02分数 Kelly 与保守边际估算
- 03多笔及相关仓位调整
- 04连续收益与组合 Kelly 方法
- 05交易记录估算脚本
适用场景
- 01根据历史交易估算单笔投入比例
- 02为胜率估计加入置信区间下界
- 03调整同时持有的相关仓位
- 04为 meme token 交易设置保守仓位
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill kelly-criterion安装后在 Claude Code 中输入/kelly-criterion确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/kelly_derivation.mdpractical_kelly.mdscripts/kelly_calculator.pykelly_from_trades.py详细介绍
Kelly 准则——最优下注规模
Kelly 准则是能最大化资本长期几何增长率的数学最优下注规模。该准则由 John Kelly 于 1956 年在贝尔实验室提出,回答了一个明确的问题:已知自己拥有优势时,应该拿出多少比例的资金承担风险,才能使复利增长率最大化?
核心见解:下注过少会错失增长机会。下注过多则会增加破产风险,并且实际上会降低长期增长率。Kelly 准则能在这两个极端之间找到确切的最优值。
实践见解:几乎绝不应该使用全 Kelly。对优势的估算存在误差,意味着全 Kelly 在实践中会导致下注过度。真实交易中应使用分数 Kelly(0.25x 到 0.5x)。
Kelly 公式
对于二元结果(赢或输):
f* = (p * b - q) / b
其中:
f*= 应下注资金占总资金的最优比例p= 获胜概率q= 失败概率(1 - p)b= 赔付比率(平均盈利 / 平均亏损)
等价形式:
f* = p - q / b
f* = p - (1 - p) / b
f* = (p * b - (1 - p)) / b
优势 = p * b - q = 每单位风险的期望值。只有当优势 > 0 时,Kelly 准则才有意义。如果优势为零或为负,最优下注金额为零——不要交易。
快速参考
| 胜率 | 赔付比率 1:1 | 赔付比率 1.5:1 | 赔付比率 2:1 | 赔付比率 3:1 |
|---|---|---|---|---|
| 40% | -20% | -6.7% | 10% | 20% |
| 45% | -10% | 3.3% | 15% | 25% |
| 50% | 0% | 16.7% | 25% | 33.3% |
| 55% | 10% | 18.3% | 27.5% | 35% |
| 60% | 20% | 26.7% | 35% | 40% |
数值为全 Kelly 比例。实践中应使用这些数值的 0.25x 到 0.5x。
为什么使用分数 Kelly
全 Kelly 假设你能精确知道 p 和 b。实际上不可能。以下是分数 Kelly 至关重要的原因:
1. 估算误差
根据 100 笔交易估算的胜率,其标准误差约为 ±5%。如果真实胜率是 55%,但你估算为 60%,全 Kelly 会导致下注过度约 50%,这会使长期增长低于半 Kelly 所能实现的水平。
2. 波动和回撤
全 Kelly 的波动极高。全 Kelly 的预期最大回撤约为账户资金的 50-80%。这在心理上令人难以承受,在实践中也很危险(追加保证金、无法继续交易)。
| Kelly 比例 | 相对增长率 | 大致最大回撤 |
|---|---|---|
| 1.0x(全 Kelly) | 100% | 50-80% |
| 0.5x(半 Kelly) | ~75% | 25-40% |
| 0.25x(四分之一 Kelly) | ~50% | 12-20% |
| 0.1x(十分之一 Kelly) | ~25% | 5-10% |
3. 下注过度与下注不足的不对称性
下注过度 2 倍(按 2f 下注)会导致长期增长归零,与完全不交易相同。下注不足 2 倍(按 0.5f 下注)仍能获得约 75% 的最优增长率。下注过度的代价远比下注不足灾难性得多。
建议使用的比例
| 比例 | 适用情况 |
|---|---|
| 0.10x Kelly | 优势极不确定、新策略、样本少于 30 笔交易 |
| 0.25x Kelly | 有一定信心、30-100 笔交易、夏普比率合理 |
| 0.50x Kelly | 信心较高、100 笔以上交易、表现稳定 |
| 1.00x Kelly | 实践中从不建议使用 |
估算你的优势
Kelly 准则需要两个输入:胜率(p)和赔付比率(b)。两者都必须根据数据估算。
最低数据要求
- 至少 50 笔交易才能进行任何 Kelly 计算。低于此数量时,估算误差会占主导。
- 最好有 100 笔以上交易,用于半 Kelly 仓位计算。
- 考虑使用较激进的比例前,至少应有200 笔以上交易。
根据交易历史计算
wins = [t for t in trades if t > 0]
losses = [t for t in trades if t < 0]
win_rate = len(wins) / len(trades) # p
payoff_ratio = mean(wins) / abs(mean(losses)) # b
edge = win_rate * payoff_ratio - (1 - win_rate) # should be > 0
kelly_full = (win_rate * payoff_ratio - (1 - win_rate)) / payoff_ratio
保守估算
使用 Wilson 置信区间的下限来估算胜率,而不是使用点估计:
import math
def wilson_lower(wins: int, total: int, z: float = 1.96) -> float:
"""Lower bound of Wilson score interval (95% confidence)."""
p = wins / total
denominator = 1 + z**2 / total
centre = p + z**2 / (2 * total)
spread = z * math.sqrt((p * (1 - p) + z**2 / (4 * total)) / total)
return (centre - spread) / denominator
使用胜率置信区间的下限会自动纳入保守性,降低因抽样运气而过度下注的风险。
优势强度分类
| 优势值 | 分类 | 备注 |
|---|---|---|
| < 0 | 负优势 | 不要交易此策略 |
| 0 - 0.02 | 无显著优势 | 交易成本可能超过优势 |
| 0.02 - 0.10 | 边际优势 | 仅使用保守仓位比例 |
| 0.10 - 0.20 | 良好优势 | 适合使用标准仓位比例 |
| > 0.20 | 极佳优势 | 较为罕见;请确认没有过拟合或临时性因素 |
多笔下注 Kelly(同时持仓)
同时持有多个仓位时:
独立下注
如果下注之间互不相关,每笔下注都可以按各自的 Kelly 仓位比例配置。但所有 Kelly 仓位比例之和不应超过 1.0(整个投资组合)。如果超过,应按比例缩减每笔下注:
kelly_fractions = [0.15, 0.10, 0.12, 0.08] # individual Kelly fractions
total = sum(kelly_fractions) # 0.45
if total > 1.0:
scale = 1.0 / total
kelly_fractions = [f * scale for f in kelly_fractions]
相关下注
相关仓位(例如多个 SOL meme 币)实际上相当于一笔更大的下注。根据相关性按比例缩减每个仓位:
# Simple correlation adjustment
def adjust_for_correlation(kelly_fractions: list, avg_correlation: float) -> list:
"""Reduce Kelly fractions based on average inter-position correlation."""
n = len(kelly_fractions)
# Effective number of independent bets
n_eff = n / (1 + (n - 1) * avg_correlation)
scale = n_eff / n
return [f * scale for f in kelly_fractions]
在加密货币领域,meme 代币仓位之间的相关性通常为 0.5-0.8(风险规避时它们往往会一同暴跌)。应将它们视为部分重叠的一笔下注。
投资组合 Kelly 上限
无论单独计算的结果如何,都应设定硬性上限:Kelly 总配置比例绝不应超过 1.0(投资组合的 100%)。为应对回撤并把握新机会,实际最高值宜设为 0.6-0.8,以留出现金缓冲。
PumpFun / Meme 代币 Kelly
Meme 代币交易对 Kelly 方法有一些特定挑战:
- 优势难以估算:胜率和盈亏比会随市场状态迅速变化。
- 肥尾效应占主导:少数大额盈利,伴随许多小额亏损。标准 Kelly 假设尾部较薄。
- 回撤时相关性会飙升:所有 meme 代币都可能同时暴跌。
实际调整
- Meme 代币的仓位比例最高使用 0.1x 至 0.25x Kelly。
- 无论 Kelly 计算结果如何,都将绝对仓位规模限制在投资组合的 2-5%。
- 每周重新计算优势——过时的估算很危险。
- 如果 Kelly 建议的比例 > 30%,你的优势估算几乎肯定有误。最高使用 5%。
def meme_kelly(win_rate: float, payoff_ratio: float, account: float) -> float:
"""Conservative Kelly for high-uncertainty meme token trades."""
kelly_full = (win_rate * payoff_ratio - (1 - win_rate)) / payoff_ratio
kelly_conservative = kelly_full * 0.15 # 0.15x fractional
max_fraction = 0.05 # hard cap at 5%
return min(max(kelly_conservative, 0), max_fraction) * account
Kelly 方法不适用的情况
Kelly 最优性依赖于一些经常不成立的假设:
| 假设 | 现实情况 | 影响 |
|---|---|---|
| 优势(p、b)已知 | 根据噪声数据估算 | 过度下注风险 |
| 下注相互独立 | 仓位相关 | 破产风险增加 |
| 结果为二元 | P&L 分布连续 | 公式近似 |
| 优势保持稳定 | 优势随时间变化 | 仓位估算过时 |
| 无交易成本 | 滑点、费用、MEV | 有效优势降低 |
| 可无限细分 | 最小仓位规模限制 | 需要进行舍入 |
缓解措施
- 使用分数 Kelly(应对估算误差)
- 调整相关性(应对依赖关系)
- 对非二元回报使用连续 Kelly(参见
references/kelly_derivation.md) - 定期重新计算(应对非平稳性)
- 在计算 Kelly 前,从优势中扣除估算成本
连续 Kelly(适用于投资组合回报)
当回报是连续的,而非二元的赢/输结果时:
f* = (μ - r) / σ²
其中:
μ= 策略的预期回报r= 无风险利率(加密货币领域通常为 0)σ²= 回报方差
当夏普比率按 (μ - r) / σ 计算时,此形式等价于 Sharpe² / (2 * σ)。
如果你有一组回报序列,而非离散的盈亏交易,请使用此形式。完整推导请参见 references/kelly_derivation.md。
与其他技能的集成
position-sizing:Kelly 提供最优比例;position-sizing将其换算为单位数。将 Kelly 作为一项输入,然后应用position-sizing中的流动性和波动率限制。risk-management:Kelly 仓位规模必须遵守组合层面的风险限制。如果 Kelly 建议每笔交易占 10%,但你的风险政策将上限设为 5%,则以上限为准。strategy-framework:将 Kelly 参数(使用的比例、样本量、重新计算频率)记录在策略规范中。regime-detection:市场状态变化时重新计算 Kelly。趋势市场中的优势与震荡市场中的优势不同。
文件
参考资料
references/kelly_derivation.md— Kelly 准则、分数 Kelly 增长率、连续 Kelly 和多结果 Kelly 的完整数学推导references/practical_kelly.md— 根据交易数据估算优势、置信区间、示例演算、常见陷阱和危险区域
脚本
scripts/kelly_calculator.py— 根据胜率、盈亏比和账户规模计算 Kelly。输出分数 Kelly 建议和敏感性分析。依赖项:无。scripts/kelly_from_trades.py— 根据交易盈亏值列表估算 Kelly。计算置信区间、滚动稳定性分析和建议比例。依赖项:numpy。