ib-pmcc-advisor について
Interactive Brokers 口座の PMCC(ダイアゴナル・コールスプレッド)を分析するスキルです。ショートレッグの割り当てリスクと日次損益を予測し、デルタと純クレジットの条件でロール候補を順位付けします。
主な機能
- 01口座全体の PMCC ポジション分析
- 02ショートレッグの割り当て確率推定
- 03日次損益の予測
- 04ロール候補の順位付け
- 05満期前の決算警告
活用シーン
- 01PMCC スプレッドの割り当てリスク確認
- 02ショートレッグの維持とロールの比較
- 03満期前の決算警告の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ staskh/ trading_skills --skill ib-pmcc-advisorインストール後、Claude Code で/ib-pmcc-advisorを入力して読み込まれたか確認します。
同梱ファイルscripts/pmcc_advisor.pytemplates/markdown-template.md
詳細
IB PMCC アドバイザー
IB ポートフォリオ内のすべての PMCC(ダイアゴナル・コール・スプレッド)ポジションを分析し、ショートレッグに関する実行可能なアドバイスを提供します。これには、割り当てリスク、日ごとの損益予測、推奨ロール候補のランキングが含まれます。
IB 接続
TWS または IB Gateway をローカルで起動し、API を有効にしておく必要があります。
- ペーパートレード — ポート 7497
- ライブトレード — ポート 7496
IB_PORT環境変数 —--portが省略された場合のデフォルトポートです(例:Gateway コンテナの場合はIB_PORT=4001)。優先順位:--portフラグ >IB_PORT> 組み込みのデフォルト値。シェルまたは.envファイルで設定してください。
ポートのフォールバック: 設定したポートへの接続に失敗すると、もう一方のポートで自動的に再試行します。 再試行に成功した場合は、どちらの口座タイプ(ライブ/ペーパー)が動作したかをメモリに保存し、このセッションと今後のセッションにおけるすべての IB スキル呼び出しで使用してください。ユーザーがもう一方の口座を明示的に要求するまで、この設定を維持します。 両方のポートで失敗した場合は、TWS または IB Gateway が起動しており、API アクセスが有効になっていることをユーザーに確認してください。
手順
ステップ 1:スクリプトを実行する
uv run python .claude/skills/ib-pmcc-advisor/scripts/pmcc_advisor.py [--port PORT] [--account ACCOUNT] [--min-roll-dte N] [--price-mode mid|last]
スクリプトは stdout に JSON を返します。解析して、以下の回答に使用してください。
ステップ 2:デフォルトの回答 — 簡潔なインライン要約
ユーザーがレポートまたは JSON 出力を明示的に求めていない限り、簡潔なインライン要約のみを回答してください。ファイルは保存しません。
形式:
- スプレッドごとに 1 行:
SYMBOL — short $STRIKE exp DATE (δ=X, assign=Y%) — [HOLD / ROLL to $STRIKE] - 割り当て率が 40% 超、DTE が 7 未満、ショートの有効期間内に決算がある場合は、これらの注意事項を先に示します。
- 注意対象のスプレッドには、最有力のロール候補とネットクレジットを示す行を 1 行追加します。
- 問題のないポジションは、1 行の要約のみで十分です。
ステップ 3:明示的に要求された場合のみファイルを生成する
MD レポート — 以下の要求があった場合に生成します:「レポートを保存」「レポートを生成」「レポートを書く」「Markdown」「PDF」。
.claude/skills/ib-pmcc-advisor/templates/markdown-template.md を読み、書式の指示をすべて確認してください。
sandbox/pmcc_advisor_{ACCOUNT}_{YYYY-MM-DD}_{HHmm}.md に保存します。最初の口座 ID を使用し、generated_at からタイムスタンプを取得してください。
レポートには、スプレッドごとに以下のすべてのセクションを含めてください。
- 注意事項の概要 — 割り当て率が 40% 超、DTE が 7 未満、ロール候補がない場合、決算に関する警告
- 会社の説明 — 必ず、自身の知識に基づく 1 文
- テクニカルプロファイル — RSI、MACD、EMA クロスオーバー、ADX、SMA からの距離、3 か月リターン、強気スコア(会話コンテキストにテクニカルデータがある場合のみ。なければ省略)
- スプレッド構成の表 — 両レッグの権利行使価格、満期日、DTE、コスト、現在価格、IV
- ショートレッグのリスク — デルタ(BS + IB)、リスクラベル付きの割り当て確率
- 日ごとの損益予測 — すべての行:日付、満期までの日数、最適な決済スポット価格、最大損益(ピークの行に印を付ける)
- ロール候補の表 — 権利行使価格、満期日、DTE、デルタ、割り当て率、IV、ネットクレジット、$/日、割り当て時の損益、ビッド/アスク
- 比較表 — 現在と roll_1/2/3 を横並びで比較
- 推奨 — 理由を添えた保有/ロール/決済の判断
JSON 出力 — 以下の要求があった場合に生成します:「JSON を保存」「JSON をエクスポート」「データを保存」「ファイルに出力」。
スクリプトの生出力を sandbox/pmcc_advisor_{ACCOUNT}_{YYYY-MM-DD}_{HHmm}.json に保存します。
引数
| フラグ | デフォルト | 説明 |
|---|---|---|
--port | 7497 | IB Gateway/TWS のポート |
--account | all | 特定の口座 ID |
--min-roll-dte | 7 | ロール候補の最小 DTE |
--price-mode | mid | オプション価格:mid(bid+ask)/2 または last |
--symbols | all | これらの銘柄のみを分析します(例:--symbols NVDA WMT) |
JSON 出力構造
{
"generated_at": "2026-04-30 10:25 ET",
"data_delay": "real-time",
"accounts": ["Uxxxxxxxx"],
"price_mode": "mid",
"min_roll_dte": 7,
"symbols_filter": ["NVDA", "WMT"],
"spreads": [
{
"symbol": "NVDA",
"account": "Uxxxxxxxx",
"qty": 10,
"underlying_price": 201.46,
"leaps_expiry": "20260918",
"earnings": {
"date": "2026-05-20",
"timing": "AMC",
"warning_short": false,
"warning_roll_indices": [1, 2, 3]
},
"long": {
"strike": 180.0, "expiry": "20260918", "dte": 141,
"avg_cost": 35.51, "current_price": 36.20,
"iv_pct": 42.1, "ib_delta": 0.7821, "ib_iv_pct": 41.8
},
"short": {
"strike": 210.0, "expiry": "20260618", "dte": 49,
"premium_received": 6.88, "current_price": 5.10,
"iv_pct": 38.5, "delta": 0.3421, "assignment_prob_pct": 28.4,
"ib_delta": 0.3415, "ib_iv_pct": 38.2
},
"daily_pnl": [
{"date": "2026-04-30", "days_to_short_expiry": 49.0, "optimal_spot": 215.20, "pnl": 1234.56},
{"date": "2026-05-01", "days_to_short_expiry": 48.0, "optimal_spot": 214.80, "pnl": 1289.10}
],
"roll_candidates": [
{
"strike": 215.0, "expiry": "20260717", "dte": 78,
"price": 5.80, "delta": 0.2910, "assignment_prob": 22.5,
"iv_pct": 37.2, "net_credit": 0.70, "profit_per_day": 0.0744,
"pnl_if_assigned": 3580.0, "bid": 5.60, "ask": 6.00
}
],
"comparison": {
"current": {"strike": 210, "expiry": "20260618", "dte": 49, "delta": 0.3421, "assignment_prob": 28.4, "profit_per_day": 0.1404, "pnl_if_assigned": 1880.0},
"roll_1": {"strike": 215, "expiry": "20260717", "dte": 78, "delta": 0.2910, "assignment_prob": 22.5, "profit_per_day": 0.0744, "pnl_if_assigned": 3580.0}
}
}
]
}
主なフィールド
symbols_filter—--symbolsが使用された場合の大文字のシンボルのリスト。nullはポートフォリオ全体を意味しますdata_delay— ライブのクォートが利用可能な場合は"real-time"、IBKR のクォートが利用できない場合は"stalled - using last price"generated_at— NY タイムゾーンのタイムスタンプleaps_expiry— ロングレッグの満期(YYYYMMDD)。すべてのロール候補はこの日付以前に制限されますearnings.date— Yahoo Finance の次回決算日(YYYY-MM-DD)。ETF の場合は nullearnings.timing—"BMO"(寄り付き前)または"AMC"(引け後)earnings.warning_short— 決算日がショートの満期前の直近 7 暦日以内にある場合は trueearnings.warning_roll_indices— 決算日が満期期間に含まれるロール候補の 1 始まりのインデックスdelta/ib_delta— BS で計算したグリークスと IBKR モデルのグリークス(利用可能な場合は両方を報告)iv_pct/ib_iv_pct— IV(パーセント)。オプション価格から BS で計算した値と IBKR モデルのグリークスassignment_prob_pct— N(d2):ショートが満期時に ITM となるリスク中立確率net_credit— ロール時に受け取るクレジット(マイナスはデビット)。デビットが $0.10/share を超えるロールは除外されますpnl_if_assigned— 満期時に原資産が short_strike を上回った場合の損益:(short_strike - long_strike - long_cost + total_premium) × 100daily_pnl[].optimal_spot— その日の決済損益が最大となるスポット価格(数値最適化で算出)。ショートレッグのセータ減衰に伴って上昇しますdaily_pnl[].pnl— その日の最適スポット価格における合計金額(数量 × 100 契約)
ロール選択基準
候補は次の両方を満たす必要があります。
- デルタ ≤ 0.40(絶対上限 — 現在のショートが満期間近の場合、同一ストライクでの期先ロールを可能にします)
- ネットクレジット ≥ -$0.10/share(大きなデビットではないこと)
現在のショートの満期以降にある次の 5 つの利用可能なチェーン満期をスキャンし、LEAPS の満期を上限とします。
ランキング基準:デルタの改善(最も高い重み)→ ネットクレジット → DTE の延長。
使用例
# All accounts (paper, default)
uv run python .claude/skills/ib-pmcc-advisor/scripts/pmcc_advisor.py
# Live account, 14-day minimum roll DTE, last-price mode
uv run python .claude/skills/ib-pmcc-advisor/scripts/pmcc_advisor.py --port 7496 --account Uxxxxxxxx --min-roll-dte 14 --price-mode last
# Analyze only specific symbols
uv run python .claude/skills/ib-pmcc-advisor/scripts/pmcc_advisor.py --symbols NVDA WMT
アーキテクチャ
すべてのロジックは src/trading_skills/broker/pmcc_advisor.py にあります。
- 分析関数(前半部分、IBKR のインポートなし):
get_option_price、calc_iv、calc_delta、calc_assignment_prob、calc_bs_price、calc_daily_pnl_table、check_earnings_warning、find_best_rolls、build_comparison_table、score_roll_candidate - データレイヤー(後半部分、IBKR + Yahoo Finance を使用):
get_pmcc_data、_identify_pmcc_spreads、_fetch_single_option_quote、_fetch_option_quotes_batch、_get_chain_params、_fetch_earnings_dates
src/trading_skills/broker/ の以下を再利用します。
connection.py—ib_connection、CLIENT_IDS、fetch_positions、fetch_spot_prices、normalize_positions、best_option_chainblack_scholes.py—implied_volatility、black_scholes_price、black_scholes_delta、estimate_iv