mcpField
I
ib-stop-loss

ib-stop-loss

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

ib-stop-loss について

ib-stop-lossは、Interactive BrokersのPMCC、LEAPS、株式ポジションを分析し、条件付き損切り注文を管理するトレーディングスキルです。既定ではドライランで、注文の実行には明示的な指定が必要です。

主な機能

  1. 01PMCC、LEAPS、株式ポジションの分析
  2. 02条件付き損切り価格の算出
  3. 03孤立した損切り注文の検出と取消
  4. 04モジュール注文と手動注文の分類
  5. 05銘柄またはオプションレッグでの絞り込み

活用シーン

  1. 01実行前に損切り注文を確認
  2. 02オプションポジションへの損切り設定
  3. 03ショートオプションのプレミアム減少を確認
  4. 04権利行使価格接近のアラート確認

インストール

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

$npx skills add https://github.com/staskh/trading_skills --skill ib-stop-loss

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

同梱ファイルscripts/stop_loss.py

詳細

IB Stop-Loss Manager

IB ポートフォリオ内の PMCC(ダイアゴナル・コール・スプレッド)、ネイキッド LEAPS、株式ポジションを分析し、条件付きストップロス注文を管理します。

デフォルトのモードはドライランです — リクエストに --execute が含まれていない限り、注文は発注されません。

IB 接続

TWS または IB Gateway をローカルで起動し、API を有効にしておく必要があります。

  • ペーパートレード — ポート 7497
  • ライブトレード — ポート 7496
  • IB_PORT 環境変数 — --port を省略した場合のデフォルトポート(例:Gateway コンテナでは IB_PORT=4001)。優先順位:--port フラグ > IB_PORT > 組み込みのデフォルト値。シェルまたは .env ファイルに設定してください。

ポートのフォールバック: 設定されたポートへの接続に失敗した場合、もう一方のポートで自動的に再試行します。 再試行に成功した場合は、どちらの口座タイプ(ライブ/ペーパー)が使用できたかをメモリに保存し、ユーザーが別の口座を明示的に希望するまで、今回および今後のセッションで、すべての IB スキル呼び出しにその口座を使用します。 どちらのポートでも接続できない場合は、TWS または IB Gateway が API アクセスを有効にして起動しているか、ユーザーに確認を依頼してください。

手順

Step 1: スクリプトを実行する

ドライラン(デフォルト — 注文は発注されません):

uv run python .claude/skills/ib-stop-loss/scripts/stop_loss.py

実行(孤立注文をキャンセルし、SL_ 条件付き注文を発注):

uv run python .claude/skills/ib-stop-loss/scripts/stop_loss.py --execute

強制実行(基準値 = 現在の中値、既存のストップを引き下げる場合があります):

uv run python .claude/skills/ib-stop-loss/scripts/stop_loss.py --execute --forced
Step 2: レポートを整形する

JSON 出力を、次の 4 セクションからなる Markdown レポートに整形します。

Section 1: まもなくアラート

alert_soon のシンボルを目立つように列挙します — これらは早期警告のしきい値を超えています。

Section 2: 既存の条件付き注文

all_conditional_orders.module(SL_ 注文)と all_conditional_orders.manual(手動で発注された注文)を表示します。 orphan_orders が空でない場合は、これらがキャンセルされた(実行モード)か、手動でのキャンセルが必要(ドライラン)であることを警告します。

Section 3: ポジション

positions の各項目について、次の表を表示します。

項目値
シンボルNVDA — pmcc(3 契約)
現物価格$219.05
LEAPS200C 20270115 · 平均コスト $44.27 · 現在値 $44.23 · 基準値 $44.27
ストップ価格$22.14(40% ストップ)→ アクション:place_new
LEAPS 損失0.1%
ショート235C 20260515 · 受取額 $0.61 · 現在値 $0.56 · 9.5% 減価

より保護的なストップがすでに存在する場合は、preserve_existing を表示します。 forced=true によって既存のストップが引き下げられる場合は、overwrite(赤)を表示します。

Section 4: アラート

アラートをシンボルごとにグループ化します。種類:

種類意味
leaps_early_warningLEAPS が基準値から stop_pct/2% 以上下落
short_premium_decayショートのプレミアムを 90% 以上回収 — クローズまたはロール
short_near_strike現物価格がショートの権利行使価格以上、またはその X% 以内
Step 3: ユーザーにレポートする
  • ドライランと実行のどちらのモードかを目立つように示します。
  • alert_soon のシンボルを最初に提示します。
  • 各ポジションについて、ストップのアクションと現在の損失率を表示します。
  • アラートのセクションは最後に表示します。

引数

フラグデフォルト説明
--port7497IB Gateway/TWS のポート
--accountall特定の口座 ID
--symbolsall指定したシンボルのみを分析
--legsnone特定のオプションレッグ:SYMBOL:STRIKE[C|P]:EXPIRY(例:IBKR:70C:20270115 IBKR:100C:20260918)。権利の指定を省略した場合は C になります。--symbols より優先されます。同じシンボルに複数の PMCC/LEAPS がある場合に、1 つの組み合わせだけにストップを設定するために使用します。
--stop-pct40決済をトリガーする損失率
--short-near-strike-pct5権利行使価格接近アラートのしきい値
--price-modemidオプション価格:mid または last
--executeoff孤立注文をキャンセルし、SL_ 注文を発注
--forcedoff現在の中値を基準値として使用(--execute が必要)

JSON 出力の構造

{
  "generated_at": "2026-05-12 10:00 ET",
  "dry_run": true,
  "forced": false,
  "stop_pct": 40.0,
  "short_near_strike_pct": 5.0,
  "accounts": ["U1234567"],
  "symbols_filter": null,
  "all_conditional_orders": {"module": [], "manual": []},
  "orphan_orders": [],
  "alert_soon": ["PFE"],
  "positions": [
    {
      "symbol": "NVDA",
      "type": "pmcc",
      "account": "U1234567",
      "qty": 3,
      "underlying_price": 219.05,
      "leaps": {
        "strike": 200.0, "expiry": "20270115", "avg_cost": 44.27,
        "current_price": 44.23, "stop_basis": 44.27,
        "stop_price": 22.14, "loss_pct": 0.1
      },
      "shorts": [
        {"strike": 235.0, "expiry": "20260515",
         "premium_received": 0.61, "current_price": 0.56, "decay_pct": 9.5}
      ],
      "stop_loss": {"stop_price": 22.14, "action": "place_new", "existing_stop": null},
      "alert_soon": false,
      "alerts": []
    },
    {
      "symbol": "AAPL",
      "type": "stock",
      "account": "U1234567",
      "qty": 100,
      "underlying_price": 189.50,
      "stock": {
        "avg_cost": 175.00, "stop_basis": 189.50,
        "stop_price": 94.75, "loss_pct": 0.0
      },
      "stop_loss": {"stop_price": 94.75, "action": "place_new", "existing_stop": null},
      "alert_soon": false,
      "alerts": []
    }
  ]
}

主なフィールド

  • alert_soon — 損失が stop_pct/2% 以上のシンボルのトップレベルリスト
  • position.type — pmcc | leaps | stock
  • stop_loss.action — place_new | preserve_existing | overwrite
  • stop_loss.existing_stop — 該当する場合、既存の SL_FALL_ 注文の価格
  • PMCC の場合:ストップ注文は、LEAPS とすべてのショートポジションをまとめて決済する単一のコンボ(BAG)注文です
  • 実行モードでは、孤立した SL_ 注文(一致するポジションがない注文)が最初にキャンセルされます

注文の識別

  • SL_FALL_{SYM}_{STRIKE}_{EXPIRY} — オプション(PMCC またはネイキッド LEAPS)
  • SL_FALL_{SYM}_STK — 株式ポジション

アーキテクチャ

すべての分析処理は src/trading_skills/broker/stop_loss.py にあります。

分析(IBKR を使用しないため、単独でテスト可能):

  • calc_stop_basis — 通常は max(mid, avg_cost)、強制時は current_mid
  • calc_stop_price — 基準価格 × (1 - stop_pct/100)
  • calc_short_premium_decay_pct — 回収済みショートプレミアムの割合
  • identify_positions — 正規化されたポジションを pmcc/leaps/stock に分類
  • build_position_analysis — ポジションごとの完全な出力辞書を作成
  • detect_orphan_orders — 消滅したポジションに対する SL_FALL_ 注文を検出
  • summarize_all_conditional_orders — IB の注文をモジュール管理と手動管理に分割

データレイヤー(IBKR):

  • get_stop_loss_data — 主なエントリーポイント
  • _cancel_orphan_orders — 古い SL_ 注文をキャンセル
  • _place_combo_stop_order — PMCC 用の BAG 注文(LEAPS とショートポジションを一括決済)
  • _place_simple_stop_order — ネイキッド LEAPS または株式向けの単一注文
  • _execute_position_stop — ポジションの種類ごとに処理を振り分け

コメント