mcpField
I
ib-find-short-roll

ib-find-short-roll

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

关于 ib-find-short-roll

ib-find-short-roll 是一项期权分析技能,使用 Interactive Brokers 数据评估短期期权滚动选择,或为长期持股和期权寻找可卖出的短期期权,并生成 Markdown 报告。

主要功能

  1. 01分析短期期权滚动候选项
  2. 02为长期持股或期权寻找短期期权
  3. 03使用 Interactive Brokers 实时数据
  4. 04生成 Markdown 报告

适用场景

  1. 01滚动短期期权时比较到期日与行权价
  2. 02为长期持股寻找备兑看涨期权或保护性看跌期权
  3. 03为垂直价差确定卖出腿

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/staskh/trading_skills --skill ib-find-short-roll

安装后在 Claude Code 中输入/ib-find-short-roll确认已加载。

附带文件scripts/roll.pytemplates/markdown-template.md

详细介绍

IB 寻找短仓滚动策略

使用 Interactive Brokers 的实时数据,分析短仓期权的滚动策略,或寻找适合开仓、用于对冲多头股票的最佳短期期权。

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 或找不到 pyproject.toml,请在以下所有命令中将 uv run python 替换为 python。

uv run python scripts/roll.py SYMBOL [--strike STRIKE] [--expiry YYYYMMDD] [--right C|P] [--port PORT] [--account ACCOUNT] [--iv-multiplier N]

脚本会将包含所有持仓和候选项数据的 JSON 输出到 stdout。

第 2 步:生成报告

阅读 templates/markdown-template.md 中的格式说明。根据 JSON 数据生成 Markdown 报告,并保存到 sandbox/。

第 3 步:报告结果

向用户展示关键结果:建议的持仓、收入/支出以及已保存的报告路径。

行为

  1. 如果存在期权空头持仓(mode: "roll"):分析滚动到其他到期日/行权价的候选项
  2. 如果存在期权多头持仓(mode: "spread"):寻找最佳的看涨/看跌空头期权,以建立垂直价差
  3. 如果持有股票多头(mode: "new_short"):寻找最佳的备兑看涨期权(或保护性看跌期权)以开仓
  4. 如果以上情况均不存在:返回错误(使用 --strike/--expiry 手动指定)

参数

  • SYMBOL - 股票代码(例如,GOOG、AAPL、TSLA)
  • --strike - 当前空头行权价(可选,自动从投资组合中检测)
  • --expiry - 当前空头到期日,格式为 YYYYMMDD(可选,自动检测)
  • --right - 期权类型:C 表示看涨期权,P 表示看跌期权(默认:C)
  • --port - IB 端口(默认:模拟交易使用 7497)
  • --account - 指定账户 ID(可选)
  • --iv-multiplier - 用于行权价区间宽度的预期波动幅度乘数(默认:2.0);对于高 IV 标的,可调高此值以显示更宽范围的滚动候选项

JSON 输出

脚本会输出 JSON,其中的 mode 字段表示分析类型:

通用字段
  • success - 布尔值
  • generated - 时间戳
  • mode - "roll"、"spread" 或 "new_short"
  • symbol - 股票代码
  • underlying_price - 当前股价
  • earnings_date - 下一次财报日期,或 null
  • expirations_analyzed - 已检查到期日的列表
特定模式字段
  • roll:current_position(包含 IB 希腊值中的 iv 和 delta)、buy_to_close、roll_candidates(到期日 -> 候选项的字典)、iv_multiplier
  • spread:long_option、right、candidates_by_expiry
  • new_short:long_position、right、candidates_by_expiry、iv_multiplier
行权价区间逻辑(roll 和 new_short 模式)

行权价搜索范围会考虑 IV:half_band = iv_multiplier × ATM_IV × spot × √(T/365),其中 T 是最近滚动到期日的 DTE。对于 roll 模式,ATM IV 取自 IB 提供的当前持仓报价模型希腊值;如果不可用,则根据期权中间价使用 Brenner-Subrahmanyam 近似值估算。对于 new_short 模式,则使用 30% 的保守默认 IV。这样一来,高 IV 标的会自动获得更宽的搜索范围,无需手动调整。

使用示例

# Auto-detect GOOG position (short option, long option, or long stock)
uv run python scripts/roll.py GOOG --port 7497

# Specify exact short position to roll
uv run python scripts/roll.py GOOG --strike 350 --expiry 20260206 --right C

# Find short call to sell against long call (vertical spread)
uv run python scripts/roll.py AUR --right C

# Find covered put for long stock
uv run python scripts/roll.py TSLA --right P

依赖项

  • ib-async
  • yfinance

时区

所有时间戳和基于时间的计算都必须使用 America/New_York 时区。所有 JSON 输出都必须包含 generated_at(纽约时间字符串)和 data_delay 字段。

评论

支持 Markdown