mcpField
V
vcp-screener

vcp-screener

github.com/tradermonty其他3.4k3.5k 次安装2 天前更新
代码仓库

关于 vcp-screener

这项选股技能扫描 S&P 500 股票,识别 Minervini 风格的波动收缩形态(VCP)和 Stage 2 上升趋势。面向研究突破形态的交易者,支持当前筛选及单只股票的历史分析。

主要功能

  1. 01扫描 S&P 500 或自定义股票范围
  2. 02检测并评分 VCP 形态
  3. 03筛选 Stage 2 上升趋势
  4. 04提供严格的突破前及突破模式
  5. 05分析历史形态及后续结果

适用场景

  1. 01寻找接近 VCP 突破枢轴点的股票
  2. 02筛选符合严格条件的可操作形态
  3. 03研究单只股票过往 VCP 及结果
  4. 04为回测研究检测参数

安装

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

$npx skills add https://github.com/tradermonty/claude-trading-skills --skill vcp-screener

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

requirements.txt
references/
fmp_api_endpoints.md
scoring_system.md
vcp_methodology.md
scripts/
_fmp_compat.py
fmp_client.py
historical_report.py
historical_scanner.py
report_generator.py
scorer.py
screen_vcp.py
scripts/calculators/
__init__.py
execution_state.py
forward_outcome.py
pattern_classifier.py
pivot_proximity_calculator.py
relative_strength_calculator.py
trend_template_calculator.py
vcp_pattern_calculator.py
volume_pattern_calculator.py
scripts/tests/
conftest.py
test_fmp_client_historical.py
test_fmp_stable_migration.py
test_historical_vcp.py
test_vcp_screener.py

详细介绍

VCP 筛选器 - Minervini 波动收缩形态

筛选标普 500 股票,查找 Mark Minervini 的波动收缩形态(VCP),识别处于第 2 阶段上升趋势、在突破枢轴点附近波动收缩的股票。

适用场景

  • 用户请求筛选 VCP 或查找 Minervini 风格的形态
  • 用户想要查找紧密底部/波动收缩形态
  • 用户请求扫描处于第 2 阶段的动量股票
  • 用户请求查找风险明确的突破候选股票
  • 用户询问“查找 中所有历史 VCP”,或想研究某只股票过去的 VCP 形态及其后续表现(--history --ticker SYM)

前置条件

  • FMP API 密钥(设置 FMP_API_KEY 环境变量或传入 --api-key)
  • 免费套餐(每天 250 次调用)足以进行默认筛选(排名前 100 的候选股票)
  • 完整筛选标普 500 建议使用付费套餐(--full-sp500)

工作流

第 1 步:准备并执行筛选

运行 VCP 筛选脚本:

# Default: S&P 500, top 100 candidates
python3 skills/vcp-screener/scripts/screen_vcp.py --output-dir skills/vcp-screener/scripts

# Custom universe
python3 skills/vcp-screener/scripts/screen_vcp.py --universe AAPL NVDA MSFT AMZN META --output-dir skills/vcp-screener/scripts

# Full S&P 500 (paid API tier)
python3 skills/vcp-screener/scripts/screen_vcp.py --full-sp500 --output-dir skills/vcp-screener/scripts
严格模式(纯 Minervini 形态)

仅返回 valid_vcp=True 且 execution_state 为 (Pre-breakout, Breakout) 的股票:

python3 skills/vcp-screener/scripts/screen_vcp.py --strict --output-dir reports/
单只股票历史模式

遍历某只股票多年的历史数据,检测曾形成的每个 VCP,并为每次检测附加后续表现统计数据(突破/触及止损/超时、达到结果所需天数、最大涨幅、最大跌幅)。适用于形态研究和回测分析,而非实时筛选。

# Default: scan ~5 years (1260 trading days), 5-day stride, 60-day outcome window
python3 skills/vcp-screener/scripts/screen_vcp.py \
  --history --ticker FIX --output-dir reports/

# Custom scan length: 750 trading days (~3 years), 90-day outcome window
python3 skills/vcp-screener/scripts/screen_vcp.py \
  --history 750 --ticker TSLA \
  --stride-days 5 --outcome-days 90 \
  --output-dir reports/

# Long scan: 10 years (2520 trading days)
python3 skills/vcp-screener/scripts/screen_vcp.py \
  --history 2520 --ticker NVDA --output-dir reports/

输出文件(带时间戳):

  • vcp_history_<SYM>_<YYYY-MM-DD_HHMMSS>.json — 检测时间线,包含完整的 分析器数据、每次检测的 forward_outcome 以及汇总统计。
  • vcp_history_<SYM>_<YYYY-MM-DD_HHMMSS>.md — 人类可读的时间线。

模式专用标志:

参数默认值范围作用
--history [DAYS](关闭)/不带参数时为 1260100-5040启用历史模式;可选指定交易日扫描窗口(需要 --ticker)
--ticker SYM——要扫描的股票代码
--stride-days51-60每次 as-of 游标位置之间的交易日步长
--outcome-days605-252每次检测所评估的后续窗口

说明:

  • 每次扫描需要调用 FMP API 两次(股票代码 + SPY 历史数据),而非横截面 流水线所需的 100 多次。
  • marketCap 和绝对 RS 百分位反映的是该股票自身的情况,而非相对于实时 筛选范围的情况——请将此报告用于形态研究,而非投资组合规模确定。
  • 检测结果按 (T1_high_date, last_low_date, pivot) 去重,因此随着游标 推进,同一个 VCP 不会被重复报告。
高级调优(用于回测)

调整 VCP 检测参数以进行研究和回测:

python3 skills/vcp-screener/scripts/screen_vcp.py \
  --min-contractions 3 \
  --t1-depth-min 12.0 \
  --breakout-volume-ratio 2.0 \
  --trend-min-score 90 \
  --atr-multiplier 1.5 \
  --output-dir reports/
参数默认值范围作用
--min-contractions22-4值越高,形态越少,但质量越高
--t1-depth-min10.0%1-50值越高,越能排除较浅的首次回调
--breakout-volume-ratio1.5x0.5-10值越高,成交量确认要求越严格
--trend-min-score850-100值越高,第 2 阶段过滤条件越严格
--atr-multiplier1.50.5-5值越低,波段检测越灵敏
--contraction-ratio0.700.1-1值越低,对收缩紧密度的要求越高
--min-contraction-days51-30值越高,最短收缩时间越长
--lookback-days12030-365值越高,越能找到更早的形态
--max-sma200-extension50.0%—用于判定过度延伸状态和相应惩罚的 SMA200 距离阈值
--wide-and-loose-threshold15.0%—最后一次收缩深度超过此值时触发宽松形态标志
--strict关闭—Minervini 严格模式:仅保留具有有效 VCP 的 Pre-breakout 或 Breakout 状态
第 2 步:查看结果
  1. 阅读生成的 JSON 和 Markdown 报告
  2. 加载 references/vcp_methodology.md,了解形态解读背景
  3. 加载 references/scoring_system.md,了解评分阈值指引
第 3 步:展示分析结果

对于每个候选标的,展示:

  • 质量(composite_score / 评级)——VCP 形态是否完整?
  • 执行状态(execution_state)——目前是否可以买入?(突破前 / 突破 = 可操作)
  • 形态类型(pattern_type)——教科书式 VCP / VCP 类似形态 / 突破后 / 延伸领涨股 / 形态受损
  • 如果应用了状态上限(原始评分已下调),则显示 ★ 标记
  • 收缩详情(T1/T2/T3 深度及比率)
  • 交易设置:枢轴价格、止损、风险百分比
  • 成交量枯竭比率和 breakout_volume_score
  • 相对强度排名
第 4 步:提供可执行的指导

按执行状态(主要筛选条件):

  • 突破前 / 突破: 形态处于有效入场窗口——按评级决定仓位
  • 突破初期: 突破正在进行,但股价已高于理想入场位——减少仓位或等待回调
  • 延伸 / 过度延伸: 错过交易机会——加入观察列表,等待下一个底部形态
  • 形态受损 / 无效: 形态已失效——不要入场

按评级(状态确认可操作性后,再作为次要条件):

  • 教科书式 VCP(90+): 在枢轴位买入,采用激进仓位(1.5-2 倍)
  • 强势 VCP(80-89): 在枢轴位买入,采用标准仓位(1 倍)
  • 良好 VCP(70-79): 在枢轴位上方、成交量确认后买入(0.75 倍)
  • 形成中(60-69): 加入观察列表,等待收缩更紧密
  • 弱势 / 无 VCP(<60): 仅观察或跳过

三阶段流程

  1. 预筛选 - 基于报价的筛选(价格、成交量、52 周位置),约 101 次 API 调用
  2. 趋势模板 - 使用 260 天历史数据进行 7 点第二阶段筛选,约 100 次 API 调用
  3. VCP 检测 - 形态分析、评分和报告生成(不额外调用 API)

输出

  • vcp_screener_YYYY-MM-DD_HHMMSS.json - 结构化结果
  • vcp_screener_YYYY-MM-DD_HHMMSS.md - 易于阅读的报告

资源

  • references/vcp_methodology.md - VCP 理论和趋势模板说明
  • references/scoring_system.md - 评分阈值和各项权重
  • references/fmp_api_endpoints.md - API 端点和速率限制

评论

支持 Markdown