mcpField
K
kelly-criterion

kelly-criterion

github.com/agiprolabs其他456537 次安装8 周前更新
代码仓库

关于 kelly-criterion

kelly-criterion 是面向交易者的 Kelly 仓位计算与实践指导技能,依据胜率和盈亏比估算资金投入比例。内容涵盖分数 Kelly、边际估算、相关性调整及组合限制,并提供计算脚本。

主要功能

  1. 01按胜率和盈亏比计算 Kelly 比例
  2. 02分数 Kelly 与保守边际估算
  3. 03多笔及相关仓位调整
  4. 04连续收益与组合 Kelly 方法
  5. 05交易记录估算脚本

适用场景

  1. 01根据历史交易估算单笔投入比例
  2. 02为胜率估计加入置信区间下界
  3. 03调整同时持有的相关仓位
  4. 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.md
practical_kelly.md
scripts/
kelly_calculator.py
kelly_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 方法有一些特定挑战:

  1. 优势难以估算:胜率和盈亏比会随市场状态迅速变化。
  2. 肥尾效应占主导:少数大额盈利,伴随许多小额亏损。标准 Kelly 假设尾部较薄。
  3. 回撤时相关性会飙升:所有 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有效优势降低
可无限细分最小仓位规模限制需要进行舍入
缓解措施
  1. 使用分数 Kelly(应对估算误差)
  2. 调整相关性(应对依赖关系)
  3. 对非二元回报使用连续 Kelly(参见 references/kelly_derivation.md)
  4. 定期重新计算(应对非平稳性)
  5. 在计算 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。

评论

支持 Markdown