kelly-criterion について
kelly-criterionは、勝率と損益比から資金配分を見積もるトレーダー向けスキルです。フラクショナル・ケリー、保守的なエッジ推定、相関調整、ポートフォリオ上限を扱い、計算用スクリプトも含みます。
主な機能
- 01勝率と損益比によるケリー比率の計算
- 02フラクショナル・ケリーと保守的なエッジ推定
- 03複数ポジションと相関ポジションの調整
- 04連続リターンとポートフォリオ向け手法
- 05取引履歴からの推定スクリプト
活用シーン
- 01取引履歴から1回あたりの配分を推定
- 02信頼区間で勝率推定を保守化
- 03保有ポジション間の相関を考慮した調整
- 04ミームトークン取引の保守的なサイズ設定
インストール
コマンドをコピーしてターミナルで実行します。
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詳細
ケリー基準 — 最適なベットサイズ
ケリー基準とは、資金の長期的な幾何成長率を最大化する数学的に最適なベットサイズです。1956年にBell LabsのJohn Kellyが考案したこの基準は、明確な問いに答えます。優位性が既知の場合、複利成長率を最大化するには、手元資金の何割をリスクにさらすべきでしょうか?
核心となる考え方:ベットが小さすぎると、成長の機会を逃します。大きすぎると破産リスクが高まり、長期的な成長率も実際に低下します。ケリー基準は、この両極端の間にある最適値を正確に見つけます。
実践上の考え方:実際には、フルケリーはほとんど使うべきではありません。優位性の推定誤差があるため、フルケリーでは実際のベット額が過大になります。実際の取引では、フラクショナル・ケリー(0.25倍〜0.5倍)を使用してください。
ケリーの公式
勝ち負けの2つの結果がある場合:
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 = リスクにさらした1単位あたりの期待値です。ケリー基準が意味を持つのは、優位性が0を上回る場合のみです。優位性が0以下なら、最適なベット額は0です。取引をしてはいけません。
クイックリファレンス
| 勝率 | ペイオフ 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% |
数値はフルケリーの割合です。実際には、これらの数値の0.25倍〜0.5倍を使用してください。
フラクショナル・ケリーを使う理由
フルケリーは、pとbが正確にわかっていることを前提とします。しかし、実際に正確にわかることはありません。フラクショナル・ケリーが欠かせない理由は次のとおりです。
1. 推定誤差
100回の取引から算出した勝率の推定値には、約±5%の標準誤差があります。真の勝率が55%なのに60%と推定した場合、フルケリーではベット額が約50%過大になり、長期的な成長率はハーフケリーを下回ります。
2. 分散とドローダウン
フルケリーは分散が非常に大きくなります。フルケリーで予想される最大ドローダウンは、口座資金の約50〜80%です。これは精神的に大きな打撃となり、実際の取引においても危険です(追証、取引の継続が不可能になるなど)。
| ケリー比率 | 相対成長率 | 最大ドローダウンの概算 |
|---|---|---|
| 1.0x(フル) | 100% | 50-80% |
| 0.5x(ハーフ) | ~75% | 25-40% |
| 0.25x(クォーター) | ~50% | 12-20% |
| 0.1x(10分の1) | ~25% | 5-10% |
3. ベットの過大と過小の非対称性
ベット額を2倍にする(2fでベットする)と、長期的な成長率はゼロになり、まったく取引しない場合と同じです。ベット額を半分にする(0.5fでベットする)場合でも、最適な成長率の約75%を維持できます。ベットの過大による損失は、過小による損失よりもはるかに深刻です。
推奨する比率
| 比率 | 使用する状況 |
|---|---|
| 0.10x ケリー | 優位性に非常に不確実性がある場合、新しい戦略の場合、サンプル内の取引が30回未満の場合 |
| 0.25x ケリー | ある程度の確信がある場合、取引が30〜100回の場合、シャープレシオが妥当な場合 |
| 0.50x ケリー | 高い確信がある場合、取引が100回以上の場合、安定した成績がある場合 |
| 1.00x ケリー | 実際の運用では推奨しません |
優位性の推定
ケリー基準では、勝率(p)とペイオフ比率(b)の2つの入力値が必要です。どちらもデータから推定する必要があります。
必要な最低データ量
- 取引履歴に基づくケリー計算には、最低50回の取引が必要です。これより少ないと、推定誤差の影響が支配的になります。
- ハーフケリーでサイズを決める場合は、100回以上の取引が推奨されます。
- 積極的な比率を検討する前に、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
保守的な推定
勝率の点推定値ではなく、ウィルソン信頼区間の下限を使用します。
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 | 非常に優れたエッジ | まれです。過剰適合や一時的なものではないか確認してください |
複数ベットのケリー基準(同時ポジション)
複数のポジションを同時に保有する場合:
独立したベット
ベットに相関がなければ、それぞれを個別のケリー比率で設定できます。ただし、すべてのケリー比率の合計は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 のミームコインを複数保有)は、実質的に1つの大きなベットです。相関に応じて各ポジションを比例して縮小します。
# 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]
暗号資産では、ミームトークンのポジション同士の相関が0.5~0.8になることがよくあります(リスクオフ局面では、すべて同時に暴落します)。部分的に1つのベットとして扱ってください。
ポートフォリオのケリー上限
個別の計算にかかわらず、厳格な上限を設けてください。ケリー配分の合計は決して1.0(ポートフォリオの100%)を超えてはいけません。ドローダウンへの備えと新たな機会のための現金余力を残すには、実用上の上限は0.6~0.8です。
PumpFun/ミームトークンのケリー基準
ミームトークンの取引には、ケリー基準に関する特有の課題があります。
- エッジの推定が難しい:勝率とペイオフ比率は、市場レジームによって急速に変化します。
- ファットテールが支配的:少数の大きな利益と多数の小さな損失が生じます。標準的なケリー基準は、裾の薄い分布を仮定しています。
- ドローダウン時に相関が急上昇する:すべてのミームトークンが同時に暴落する可能性があります。
実用的な調整
- ミームトークンでは、ケリー基準の最大0.1~0.25倍を使用します。
- ケリー基準の計算結果にかかわらず、ポジションサイズをポートフォリオの**2~5%**以下に制限します。
- エッジを毎週再計算します。古い推定値は危険です。
- ケリー基準が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
ケリー基準が機能しない場合
ケリー基準の最適性は、現実にはしばしば満たされない前提に依存しています。
| 前提 | 現実 | 影響 |
|---|---|---|
| エッジ(p、b)が既知 | ノイズの多いデータから推定 | 過剰ベットのリスク |
| ベットが独立 | ポジションに相関がある | 破産リスクの増加 |
| 結果が二値 | 損益が連続分布 | 数式は近似 |
| エッジが定常 | エッジが時間とともに変化 | ポジションサイズが古くなる |
| 取引コストなし | スリッページ、手数料、MEV | 実効エッジが低下 |
| 無制限に分割可能 | 最小ポジションサイズがある | 丸めが必要 |
軽減策
- 分数ケリーを使用する(推定誤差に対処)
- 相関を調整する(依存関係に対処)
- 二値でないリターンには連続ケリーを使用する(
references/kelly_derivation.mdを参照) - 定期的に再計算する(非定常性に対処)
- ケリー基準の計算前に、推定コストをエッジから差し引く
連続ケリー(ポートフォリオリターン向け)
リターンが勝ち/負けの二値ではなく連続的な場合:
f* = (μ - r) / σ²
ここで:
μ= 戦略の期待リターンr= 無リスク金利(暗号資産では0であることがよくあります)σ²= リターンの分散
シャープレシオを(μ - r) / σとして計算する場合、これはSharpe² / (2 * σ)と等価です。
勝ち負けが個別に定まる取引ではなく、リターンの時系列データがある場合は、この形式を使用します。導出の詳細については、references/kelly_derivation.mdを参照してください。
他のスキルとの連携
position-sizing:Kelly は最適な比率を算出し、position-sizing はそれを取引数量に変換します。Kelly を入力値の一つとして使い、そのうえで position-sizing による流動性とボラティリティの制約を適用してください。risk-management:Kelly によるサイジングは、ポートフォリオレベルのリスク制限を守る必要があります。Kelly が1回の取引につき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。