mcpField
I
ib-pmcc-advisor

ib-pmcc-advisor

github.com/staskh其他39450 次安装1 天前更新
代码仓库

关于 ib-pmcc-advisor

用于分析 Interactive Brokers 账户中 PMCC 对角看涨价差的技能。它评估短腿被指派风险和每日盈亏预测,并依据 Delta 与净收入条件对移仓候选方案排序。

主要功能

  1. 01分析各账户的 PMCC 持仓
  2. 02估算短腿被指派概率
  3. 03预测每日盈亏
  4. 04排列移仓候选方案
  5. 05标记临近短腿到期的财报

适用场景

  1. 01检查 PMCC 价差的被指派风险
  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 > 内置默认值。在 shell 或 .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]

脚本会将 JSON 输出到 stdout。解析后用于以下回复。

第 2 步:默认回复——简短的行内摘要

除非用户明确要求报告或 JSON 输出,否则只回复简洁的行内摘要。不保存文件。

格式:

  • 每个价差一行:SYMBOL — short $STRIKE exp DATE (δ=X, assign=Y%) — [HOLD / ROLL to $STRIKE]
  • 优先列出风险提示(被指派概率 > 40%、DTE < 7、空头腿到期窗口内有财报)。
  • 对有风险提示的价差,额外添加一行,列出最优展期候选及净权利金收入。
  • 对无风险提示的持仓,只需一行摘要。
第 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. 公司简介 — 始终根据自身知识撰写一句话
  3. 技术概况 — RSI、MACD、EMA 交叉、ADX、与 SMA 的距离、3 个月回报率、看涨评分(仅当对话上下文中包含技术数据时;否则省略)
  4. 价差结构表 — 两条腿:行权价、到期日、DTE、成本、当前价格、IV
  5. 空头腿风险 — delta(BS + IB)、被指派概率及风险标签
  6. 每日盈亏预测 — 所有行:日期、距离到期天数、最佳平仓价、最大盈亏(标记峰值行)
  7. 展期候选表 — 行权价、到期日、DTE、delta、被指派概率、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 — 纽约时区的时间戳
  • 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):空头期权到期时处于价内的风险中性概率
  • net_credit — 展期时收到的权利金(负值 = 借记);借记超过 $0.10/股的展期将被排除
  • pnl_if_assigned — 若标的到期时高于 short_strike,则为盈亏:(short_strike - long_strike - long_cost + total_premium) × 100
  • daily_pnl[].optimal_spot — 当天使平仓盈亏最大的现货价格(通过数值优化求得);随着 theta 衰减空头腿,其价格会升高
  • daily_pnl[].pnl — 当天最优现货价格下的总金额(数量 × 100 份合约)

展期筛选标准

候选项必须同时满足以下条件:

  1. Delta ≤ 0.40(绝对上限——当当前空头临近到期时,允许以相同执行价向后展期)
  2. 净权利金 ≥ -$0.10/股(不能有大额借记)

扫描当前空头到期日之后、LEAPS 到期日之前的下 5 个可用期权链到期日。

按以下顺序排序:Delta 改善幅度(权重最高)→ 净权利金 → 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

评论

支持 Markdown