mcpField
B
bet-sizing

bet-sizing

github.com/joellewisその他218724 回インストール15 週間前に更新
リポジトリ

bet-sizing について

bet-sizingは、投資家やポートフォリオマネージャー向けのファイナンシャルプランニングスキルです。Kelly基準によるポジションサイズに加え、リスク予算、保有上限、確信度による配分、ボラティリティ調整を解説し、実行可能なPythonスクリプトを備えています。

主な機能

  1. 01離散・連続Kelly基準のサイズ計算
  2. 02分数Kellyによる調整
  3. 03VaRとトラッキングエラーの予算
  4. 04保有上限と確信度による配分
  5. 05ボラティリティに応じたサイズ調整
  6. 06Pythonデモと検証

活用シーン

  1. 01オッズと勝率から賭け額を見積もる
  2. 02リターンとボラティリティに基づき配分を調整する
  3. 03ポジションリスクと集中度の上限を設定する
  4. 04付属のサイズ計算例を実行・検証する

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/joellewis/finance_skills --skill bet-sizing

インストール後、Claude Code で/bet-sizingを入力して読み込まれたか確認します。

同梱ファイルscripts/bet_sizing.py

詳細

ベットのサイジング

基本概念

ケリー基準(離散型)

ペイオフ倍率を b、勝率を p、敗率を q = 1-p とする二者択一のベットでは、次のようになります。

f* = (b*p - q) / b

ここで f* は、賭けに回す資産の最適な割合です。ケリー基準は、繰り返しベットを行う際の資産の期待対数(幾何成長率)を最大化します。

特性:

  • f* = 0 の場合、エッジは 0 です(優位性がない場合はベットしません)
  • f* < 0 の場合、エッジはマイナスです(この式は反対側にベットするよう示します)
  • f* > 0 となるのは、b*p > q の場合のみです(期待値がプラスです)

注:参照スクリプトの discrete_kelly は、マイナスのケリー比率を返すのではなく、0 に制限します(ベットしません)。反対側にベットすることは推奨しません。

ケリー基準(連続型/投資)

超過期待リターンが mu-r_f、分散が sigma^2 の正規分布に従う投資リターンの場合:

f* = (mu - r_f) / sigma^2

これは、総資産のうち割り当てる割合を示します。たとえば、超過期待リターンが 8%、ボラティリティが 20%の資産では、f* = 0.08 / 0.04 = 2.0 となります(資産の 200%であり、レバレッジを意味します)。

分数ケリー

フル・ケリーによるサイジングは理論上最適ですが、実際には積極的すぎます。その理由は次のとおりです。

  • 確率とペイオフを完全に把握していることを前提とします
  • 大幅なドローダウンが発生します(フル・ケリーの予想ドローダウンは大きくなります)
  • パラメーターの推定誤差により、最適な戦略が壊滅的な結果につながることがあります

実務的な方法としては、一般的にケリー比率の一部を使用します。

  • ハーフ・ケリー(f/2):* 成長率の 75%を達成しつつ、分散とドローダウンのリスクを大幅に抑えます
  • サード・ケリー(f/3):* さらに保守的で、パラメーターの不確実性が高い場合に適しています
  • クォーター・ケリー(f/4):* 推定値の不確実性が非常に高い場合に適しています

重要な点は、成長率曲線のピーク付近が平坦なことです。フル・ケリーからハーフ・ケリーに減らしても、成長率は 25%しか低下しませんが、リスクは大幅に軽減されます。

リスク予算の配分

ポジション間では、資本ではなくリスクを配分します。リスク予算の合計は、許容可能なポートフォリオリスクの上限です(例:VaR 10%、トラッキングエラー 5%)。

VaR に基づく予算配分:

  • VaR 予算の合計:例:信頼水準 95%で 100 万ドル
  • ポジション間で配分:Position VaR_i <= allocated VaR_i
  • Position VaR = w_i * sigma_i * z_alpha * Portfolio Value

トラッキングエラーに基づく予算配分(アクティブ運用者向け):

  • アクティブリスク予算の合計:例:トラッキングエラー 4%
  • ベット間で配分:各アクティブベットは、トラッキングエラーの一部を消費します
  • リスク寄与度の合計がリスク予算の合計と等しくなるように、アクティブポジションの規模を決めます
ポジションサイズの上限

集中リスクを防ぐため、個々のポジションに厳格な上限を設けます。

流動性に基づく上限:

  • ポジションを平均日次出来高(ADV)の X%未満にします。一般的な上限は ADV の 10~25%です
  • 妥当な期間内(例:5~10 取引日)にポジションを解消できるようにします

リスクに基づく上限:

  • ポジションのリスク寄与度をポートフォリオのボラティリティの X%未満にします(例:ポートフォリオリスクの最大 10%)
  • 単一ポジションをポートフォリオ価値の X%未満にします(一般的には、分散型で 5%、集中型で 10%)

規制/運用方針に基づく上限:

  • 投資信託:単一銘柄への投資は 5%以下(分散型ファンド)または 25%以下(非分散型ファンド)
  • インデックス運用:ベンチマークからのウェイトの乖離は、指定された範囲内に収めます
確信度に基づくウェイト付け

投資仮説の強さに比例してポジションの規模を決めます。

  • 確信度が高い(最大のポジション): 強いエッジ、綿密な調査、複数の裏付け要因
  • 確信度が中程度: 妥当な投資仮説があるものの、一定の不確実性または情報不足がある
  • 確信度が低い(最小のポジション): 初期段階のアイデア、限定的なエッジ、または純粋に分散を目的としたもの

フレームワーク:各ポジションのエッジの強さ(1~5)と確実性(1~5)を採点します。ウェイトはその積(エッジ * 確実性)に比例させます。

最適なポジション数

分散投資と確信度のトレードオフです。

  • 集中(10-20ポジション): 確信度が高く、詳細な調査を行います。各ポジションはポートフォリオの5-10%です。運用者に真のスキルと優位性がある場合に適しています。
  • 分散(50-100ポジション): 各ポジションへの確信度は低くなりますが、より幅広くリスクを軽減できます。各ポジションは1-3%です。システマティック戦略やファクター戦略に適しています。
  • 高度な分散(100+): インデックスに近い形です。リスクは個々のポジションではなく、ファクターの傾斜から生じます。
ボラティリティ・スケーリング

ポジションごとのリスクを一定に保つため、ボラティリティに反比例してポジションサイズを調整します。

調整後のサイズ = 目標リスク / 現在のボラティリティ

ボラティリティが2倍になると、ポジションサイズは半分になり、ドルベースのリスクは一定に保たれます。これはマネージド・フューチャーズやリスク目標型戦略における基本原則です。

アンチ・マーチンゲール(ケリー法に類似)によるサイズ設定

利益が出た後はポジションサイズを増やし(資産が増えるため、より大きな元本にケリー比率を適用)、損失の後は減らします。これは、損失の後に賭け金を倍にするマーチンゲール戦略とは対照的であり、マーチンゲール戦略は破綻につながる可能性があります。

ケリー法では、現在の資産の一定割合を賭けることで、アンチ・マーチンゲールによるサイズ設定が自然に実現されます。そのため、資産が増えれば賭け金の絶対額も増え、損失が出れば減ります。

主な数式

数式表現用途
ケリー法(離散型)f* = (b*p - q) / b二値の賭けのサイズ設定
ケリー法(連続型)f* = (mu - r_f) / sigma^2投資ポジションのサイズ設定
ハーフ・ケリーf = f* / 2実用的で保守的なサイズ設定
ケリー法での成長率g* = (mu - r_f)^2 / (2*sigma^2)最大の幾何平均成長率
fにおける成長率g(f) = f*(mu - r_f) - f^2*sigma^2/2任意の割合における成長率
ボラティリティ・スケーリング後のサイズw = target_risk / sigma_iポジションごとのリスクを一定に維持
ポジションVaRVaR_i = w_i * sigma_i * z_alpha * Vポジション単位のリスク

計算例

例1:離散型の賭けに対するケリー基準

前提:

  • 勝率:p = 55%
  • 敗率:q = 45%
  • 等倍の配当:b = 1(賭けた$1ごとに、勝つと$1を得る)

計算するもの: 最適な賭け金のサイズ

解答:

f* = (b*p - q) / b = (1 * 0.55 - 0.45) / 1 = 0.10 / 1 = 10%

解釈:各賭けで、現在の資産の10%を賭けます。これにより、長期的な幾何平均成長率が最大化されます。

実用上の調整(ハーフ・ケリー):f = 10% / 2 = 5% — 最大成長率の75%を達成しながら、ドローダウンのリスクを大幅に抑えられます。

フル・ケリーで予想されるドローダウン:資産の50%を失う事態がいずれ発生する確率はかなり高くなります。ハーフ・ケリーでは、このテールリスクを大幅に抑えられます。

例2:投資に対する連続型ケリー法

前提:

  • 期待超過リターン(mu - r_f):8%
  • ボラティリティ(sigma):20%

計算するもの: ケリー基準による最適配分

解答:

f* = (mu - r_f) / sigma^2 = 0.08 / (0.20)^2 = 0.08 / 0.04 = 2.00(200%)

これは200%の配分(2倍のレバレッジ)を意味し、極めて積極的です。

実用上の調整:

  • ハーフ・ケリー:100%(レバレッジなし、全額投資)
  • サード・ケリー:67%の配分
  • クォーター・ケリー:50%の配分

期待リターンの8%とボラティリティの20%は推定値であり、不確実性がかなり高いため、ハーフ・ケリー(100%)以下が賢明です。成長率の曲線は次のとおりです。

  • フル・ケリー:g* = 0.08^2 / (2 * 0.04) = 年率8%
  • ハーフ・ケリー:g(1.0) = 1.0 * 0.08 - 1.0^2 * 0.04/2 = 年率6%(最大値の75%)
  • クォーター・ケリー:g(0.5) = 0.5 * 0.08 - 0.5^2 * 0.04/2 = 年率3.5%(最大値の44%)

よくある落とし穴

  • フルケリーは実用には攻めすぎです。確率やペイオフの推定誤差により、過剰なベットや破産につながる可能性があるため、必ずフラクショナル・ケリーを使用してください
  • ケリーは確率とペイオフが既知であることを前提としています。実際には大きな誤差を伴って推定されるため、フルケリーは危険です
  • ケリーは対数資産(幾何平均成長率)を最大化しますが、これは投資家の実際の効用関数やリスク許容度に合わない場合があります
  • 流動性の制約を無視すること:ケリー最適なサイズが、市場インパクトを生じさせずに市場が吸収できる規模を超える場合があります
  • ポジション間の相関:単一資産のケリー公式ではポートフォリオへの影響が考慮されません。リスクが相関するポジションを組み合わせる場合、ポジションサイズをまとめて小さくする必要があります
  • パラメーター推定における生存者バイアス:過去の勝率は将来のエッジを過大評価している可能性があります
  • レジーム変化に応じた調整を行わないこと:エッジとボラティリティは時間とともに変化します

相互参照

  • historical-risk(wealth-management プラグイン):ケリーのポジションサイズを決める際の主要な入力値となる実現ボラティリティ
  • forward-risk(wealth-management プラグイン):ケリー基準の入力値となる期待リターン予測
  • diversification(wealth-management プラグイン):集中投資(大きなベット)と分散投資(小さなベットを多数行うこと)のトレードオフ
  • asset-allocation(wealth-management プラグイン):ベットサイズの決定は資産配分のフレームワーク内で行われます
  • rebalancing(wealth-management プラグイン):ポジションは目標サイズから乖離するため、リバランスが必要です
  • quantitative-valuation(wealth-management プラグイン):バリュエーションに基づくエッジ推定値が、確信度によるウェイト付けに反映されます

スクリプトの実行

uv run scripts/bet_sizing.py            # run the demo (uses PEP 723 inline deps)
uv run scripts/bet_sizing.py --verify   # check demo outputs against the worked examples (exit 1 on mismatch)
python3 scripts/bet_sizing.py            # alternative (requires: pip install numpy)

デモでは、上記で説明した計算が出力されます。値はこのスキルの計算例と一致します。クラスと関数の一覧は --help で確認できます。プログラムから使用する場合は、スクリプトを実行するのではなく、モジュールをインポートしてください。デモが実行されるのは python bet_sizing.py の場合のみです。

コメント