mcpField
I
ib-pmcc-advisor

ib-pmcc-advisor

github.com/staskhその他39450 回インストール1 日前に更新
リポジトリ

ib-pmcc-advisor について

Interactive Brokers 口座の PMCC(ダイアゴナル・コールスプレッド)を分析するスキルです。ショートレッグの割り当てリスクと日次損益を予測し、デルタと純クレジットの条件でロール候補を順位付けします。

主な機能

  1. 01口座全体の PMCC ポジション分析
  2. 02ショートレッグの割り当て確率推定
  3. 03日次損益の予測
  4. 04ロール候補の順位付け
  5. 05満期前の決算警告

活用シーン

  1. 01PMCC スプレッドの割り当てリスク確認
  2. 02ショートレッグの維持とロールの比較
  3. 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 からタイムスタンプを取得してください。

レポートには、スプレッドごとに以下のすべてのセクションを含めてください。

  1. 注意事項の概要 — 割り当て率が 40% 超、DTE が 7 未満、ロール候補がない場合、決算に関する警告
  2. 会社の説明 — 必ず、自身の知識に基づく 1 文
  3. テクニカルプロファイル — RSI、MACD、EMA クロスオーバー、ADX、SMA からの距離、3 か月リターン、強気スコア(会話コンテキストにテクニカルデータがある場合のみ。なければ省略)
  4. スプレッド構成の表 — 両レッグの権利行使価格、満期日、DTE、コスト、現在価格、IV
  5. ショートレッグのリスク — デルタ(BS + IB)、リスクラベル付きの割り当て確率
  6. 日ごとの損益予測 — すべての行:日付、満期までの日数、最適な決済スポット価格、最大損益(ピークの行に印を付ける)
  7. ロール候補の表 — 権利行使価格、満期日、DTE、デルタ、割り当て率、IV、ネットクレジット、$/日、割り当て時の損益、ビッド/アスク
  8. 比較表 — 現在と roll_1/2/3 を横並びで比較
  9. 推奨 — 理由を添えた保有/ロール/決済の判断

JSON 出力 — 以下の要求があった場合に生成します:「JSON を保存」「JSON をエクスポート」「データを保存」「ファイルに出力」。

スクリプトの生出力を sandbox/pmcc_advisor_{ACCOUNT}_{YYYY-MM-DD}_{HHmm}.json に保存します。

引数

フラグデフォルト説明
--port7497IB Gateway/TWS のポート
--accountall特定の口座 ID
--min-roll-dte7ロール候補の最小 DTE
--price-modemidオプション価格:mid(bid+ask)/2 または last
--symbolsallこれらの銘柄のみを分析します(例:--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 の場合は null
  • earnings.timing — "BMO"(寄り付き前)または "AMC"(引け後)
  • earnings.warning_short — 決算日がショートの満期前の直近 7 暦日以内にある場合は true
  • earnings.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) × 100
  • daily_pnl[].optimal_spot — その日の決済損益が最大となるスポット価格(数値最適化で算出)。ショートレッグのセータ減衰に伴って上昇します
  • daily_pnl[].pnl — その日の最適スポット価格における合計金額(数量 × 100 契約)

ロール選択基準

候補は次の両方を満たす必要があります。

  1. デルタ ≤ 0.40(絶対上限 — 現在のショートが満期間近の場合、同一ストライクでの期先ロールを可能にします)
  2. ネットクレジット ≥ -$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_chain
  • black_scholes.py — implied_volatility、black_scholes_price、black_scholes_delta、estimate_iv

コメント