ib-stop-loss について
ib-stop-lossは、Interactive BrokersのPMCC、LEAPS、株式ポジションを分析し、条件付き損切り注文を管理するトレーディングスキルです。既定ではドライランで、注文の実行には明示的な指定が必要です。
主な機能
- 01PMCC、LEAPS、株式ポジションの分析
- 02条件付き損切り価格の算出
- 03孤立した損切り注文の検出と取消
- 04モジュール注文と手動注文の分類
- 05銘柄またはオプションレッグでの絞り込み
活用シーン
- 01実行前に損切り注文を確認
- 02オプションポジションへの損切り設定
- 03ショートオプションのプレミアム減少を確認
- 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 |
| LEAPS | 200C 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_warning | LEAPS が基準値から stop_pct/2% 以上下落 |
short_premium_decay | ショートのプレミアムを 90% 以上回収 — クローズまたはロール |
short_near_strike | 現物価格がショートの権利行使価格以上、またはその X% 以内 |
Step 3: ユーザーにレポートする
- ドライランと実行のどちらのモードかを目立つように示します。
alert_soonのシンボルを最初に提示します。- 各ポジションについて、ストップのアクションと現在の損失率を表示します。
- アラートのセクションは最後に表示します。
引数
| フラグ | デフォルト | 説明 |
|---|---|---|
--port | 7497 | IB Gateway/TWS のポート |
--account | all | 特定の口座 ID |
--symbols | all | 指定したシンボルのみを分析 |
--legs | none | 特定のオプションレッグ:SYMBOL:STRIKE[C|P]:EXPIRY(例:IBKR:70C:20270115 IBKR:100C:20260918)。権利の指定を省略した場合は C になります。--symbols より優先されます。同じシンボルに複数の PMCC/LEAPS がある場合に、1 つの組み合わせだけにストップを設定するために使用します。 |
--stop-pct | 40 | 決済をトリガーする損失率 |
--short-near-strike-pct | 5 | 権利行使価格接近アラートのしきい値 |
--price-mode | mid | オプション価格:mid または last |
--execute | off | 孤立注文をキャンセルし、SL_ 注文を発注 |
--forced | off | 現在の中値を基準値として使用(--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|stockstop_loss.action—place_new|preserve_existing|overwritestop_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_midcalc_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— ポジションの種類ごとに処理を振り分け