mcpField
S
scanner-pmcc

scanner-pmcc

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

关于 scanner-pmcc

scanner-pmcc 是一款命令行技能,根据期权链质量及相关条件为 Poor Man's Covered Call 方案评分。它输出结构化 JSON 以便比较候选方案,也可读取 bullish scanner 的结果。

主要功能

  1. 01为 LEAPS 与短期期权组合评分
  2. 02评估 Delta、流动性、价差和 IV
  3. 03纳入趋势、财报及期权惩罚项
  4. 04将扫描结果保存为 JSON
  5. 05接受股票代码或 bullish scanner JSON

适用场景

  1. 01比较不同股票代码的 PMCC 候选方案
  2. 02查看期权链质量及评分因素
  3. 03将 bullish scanner 结果用于期权扫描

安装

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

$npx skills add https://github.com/staskh/trading_skills --skill scanner-pmcc

安装后在 Claude Code 中输入/scanner-pmcc确认已加载。

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

详细介绍

PMCC Scanner

根据期权链质量为标的评分,找出最佳的 Poor Man's Covered Call(穷人备兑看涨期权)组合。

什么是 PMCC?

买入深度实值 LEAPS 看涨期权(delta 约为 0.80),并以此为担保卖出短期虚值看涨期权(delta 约为 0.20)。这是备兑看涨期权的更低成本替代方案。

使用说明

注意: 如果未安装 uv 或未找到 pyproject.toml,请在下方所有命令中将 uv run python 替换为 python。

uv run python scripts/scan.py SYMBOLS [options]

参数

  • SYMBOLS - 以逗号分隔的股票代码,或来自看涨扫描器的 JSON 文件路径
  • --min-leaps-days - LEAPS 到期日的最少天数(默认值:270 = 9 个月)
  • --leaps-delta - 目标 LEAPS delta(默认值:0.80)
  • --short-delta - 目标短期看涨期权 delta(默认值:0.20)
  • --output - 将结果保存到 JSON 文件(请使用此选项;Claude 会根据 JSON 生成报告)
  • --report - 将自动生成的 Markdown 保存到文件(仅作为程序生成的备用方案——优先使用 Claude 生成的报告)

评分系统(最高分:14,范围:-8 至 14)

类别条件分数
Delta 准确度LEAPS 在 ±0.05 以内+2
LEAPS 在 ±0.10 以内+1
短期看涨期权在 ±0.05 以内+1
短期看涨期权在 ±0.10 以内+0.5
流动性LEAPS 成交量 + OI > 100+1
LEAPS 成交量 + OI > 20+0.5
短期看涨期权成交量 + OI > 500+1
短期看涨期权成交量 + OI > 100+0.5
价差LEAPS 价差 < 5%+1
LEAPS 价差 < 10%+0.5
短期看涨期权价差 < 10%+1
短期看涨期权价差 < 20%+0.5
IV 水平25-50%(理想范围)+2
20-60%+1
收益率年化 > 50%+2
年化 > 30%+1
年化 > 15%+0.5
趋势价格 > SMA50+1 / -1
RSI > 50+0.5 / -0.5
MACD > signal+0.5 / -0.5
财报下次财报在 45 天以后+1.0
45 天内公布财报-1.0
财报在短期期权到期前公布-2.0
周度期权未列出周度期权-1
行权价密度现价至短期看涨期权行权价之间 < 3 个行权价-2
现价至短期看涨期权行权价之间 < 5 个行权价-1
短期期权权利金短期期权中间价 < $0.10-1
短期期权中间价 < $0.50-0.5

周度期权、行权价密度和短期期权权利金仅产生扣分(最好为 0),因此 max_possible_score 保持为 14,而理论最低分为 -8(基础分 0、 趋势 -2、财报 -2、周度期权 -1、行权价 -2、短期期权权利金 -1)。

输出

返回 JSON,包含:

  • criteria - 使用的扫描参数
  • results - 按分数排序的数组:
    • symbol、price、iv_pct、pmcc_score、max_possible_score(始终为 14)
    • industry - GICS 行业(若无则使用 sector),或 null
    • description - 一句话公司简介,或 null
    • has_weeklies - 标的是否列有周度期权(bool)
    • short_window - 实际使用的短期期权窗口:"7-21" 或 "5-30 (fallback)"
    • dividend_yield - BS/IV 计算中使用的连续股息收益率(小数)
    • leaps - 到期日、行权价、delta、iv(根据 bid/ask 计算)、last_price、bid/ask、价差%、成交量、OI
    • short - 到期日、行权价、delta、iv(根据 bid/ask 计算)、last_price、bid/ask、价差%、成交量、OI
    • earnings_date - 下一次财报日期(YYYY-MM-DD)或 null
    • metrics - net_debit、short_yield%(短期期权窗口内的期间收益率)、annual_yield%、capital_required
    • score_breakdown - 每个评分项均以 <name>_delta(浮点数)和 <name>(说明字符串)成对列出:
      • 基础:leaps_delta、short_delta、leaps_liquidity、short_liquidity、leaps_spread、short_spread、iv、yield
      • 趋势:trend_delta、trend(按指标分类的字典)
      • 财报:earnings_delta、earnings
      • 周度期权:weekly_options_delta、weekly_options
      • 行权价密度:strike_density_delta、strike_density
      • 短期期权权利金:short_premium_delta、short_premium
      • 所有 _delta 值之和等于 pmcc_score
  • errors - 扫描失败的标的(无期权、数据不足)

报告生成

当用户要求生成报告、书面分析或保存的文档时:

  1. 使用 --output 运行扫描器以捕获 JSON 数据:

    uv run python scripts/scan.py SYMBOLS --output sandbox/PMCC_Scan_YYYY-MM-DD_HHmm.json
    
  2. 读取 JSON 输出。

  3. 使用 templates/markdown-template.md 中定义的模板自行生成 Markdown 报告。不要使用 --report 标志——它只会生成机械的字符串输出。Claude 生成的报告包含实际分析、结合上下文的警告,以及与交易者相关的叙述。

  4. 将生成的 Markdown 保存到 sandbox/PMCC_Scan_YYYY-MM-DD_HHmm.md(时间戳须与 JSON 一致)。

  5. 向用户展示完整报告。

示例

# Scan specific symbols
uv run python scripts/scan.py AAPL,MSFT,GOOGL,NVDA

# Scan and save JSON for report generation
uv run python scripts/scan.py AAPL,MSFT,GOOGL --output sandbox/PMCC_Scan_2026-01-15_1430.json

# Use output from bullish scanner
uv run python scripts/scan.py bullish_results.json

# Custom delta targets
uv run python scripts/scan.py AAPL,MSFT --leaps-delta 0.70 --short-delta 0.15

# Longer LEAPS (1 year minimum)
uv run python scripts/scan.py AAPL,MSFT --min-leaps-days 365

IV 计算

IV 始终根据市场价格数据通过 Black-Scholes 计算,绝不使用 Yahoo Finance 的 impliedVolatility 列:

  • 交易时段内:根据买卖价中间价推导 IV
  • 非交易时段(bid=ask=0):根据最新价格推导 IV,并使用期权的最近一笔交易时间作为定价时点(而非当前时刻)

这适用于 compute_atm_iv(用于扫描器基准 IV)和逐个期权的 delta 计算。

股息:Black-Scholes 反算会使用标的的连续股息收益率(Merton 模型)。忽略这一因素会导致股息支付型股票的看涨期权反算出的 IV 偏低——对高收益率股票影响尤其大(例如,收益率为 7% 的股票会显示约 12% 的 IV,而非约 24%)。收益率会根据 yfinance 中不一致的字段进行标准化(依次使用 dividendRate/price、trailingAnnualDividendYield、dividendYield),并在每个结果中以 dividend_yield(小数)形式报告。相同的收益率也用于行权价选择中的 delta 和最大利润重新定价。

关键约束

  • 空头行权价必须高于 LEAPS 行权价
  • 跳过 bid = 0 且没有最新价格的期权
  • 中等 IV(25-50%)得分最高

结果解读

  • 得分 > 12:绝佳候选(结构强劲 + 趋势看涨 + 盈利前景明朗)
  • 得分 10-12:优质候选
  • 得分 6-10:可以接受,但存在注意事项
  • 得分 < 6:结构不佳、趋势看跌或存在盈利风险
  • max_possible_score 始终为 14——使用 pmcc_score / max_possible_score 衡量候选项与满分的接近程度
  • 非交易时段的得分无法与交易时段的得分直接比较。 当买价和卖价并非都大于 0(非交易时段)时,spread_pct 会被强制设为 100%,这会使两个价差得分都归零(与实时扫描相比相差 −2 分)。候选项仅仅因为在非交易时段扫描,得分就可能低最多 2 分。仅在同一次扫描中比较候选项。

依赖项

  • numpy
  • pandas
  • scipy
  • yfinance

时区

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

评论

支持 Markdown