关于 vcp-screener
这项选股技能扫描 S&P 500 股票,识别 Minervini 风格的波动收缩形态(VCP)和 Stage 2 上升趋势。面向研究突破形态的交易者,支持当前筛选及单只股票的历史分析。
主要功能
- 01扫描 S&P 500 或自定义股票范围
- 02检测并评分 VCP 形态
- 03筛选 Stage 2 上升趋势
- 04提供严格的突破前及突破模式
- 05分析历史形态及后续结果
适用场景
- 01寻找接近 VCP 突破枢轴点的股票
- 02筛选符合严格条件的可操作形态
- 03研究单只股票过往 VCP 及结果
- 04为回测研究检测参数
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ tradermonty/ claude-trading-skills --skill vcp-screener安装后在 Claude Code 中输入/vcp-screener确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
requirements.txtreferences/fmp_api_endpoints.mdscoring_system.mdvcp_methodology.mdscripts/_fmp_compat.pyfmp_client.pyhistorical_report.pyhistorical_scanner.pyreport_generator.pyscorer.pyscreen_vcp.pyscripts/calculators/__init__.pyexecution_state.pyforward_outcome.pypattern_classifier.pypivot_proximity_calculator.pyrelative_strength_calculator.pytrend_template_calculator.pyvcp_pattern_calculator.pyvolume_pattern_calculator.pyscripts/tests/conftest.pytest_fmp_client_historical.pytest_fmp_stable_migration.pytest_historical_vcp.pytest_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] | (关闭)/不带参数时为 1260 | 100-5040 | 启用历史模式;可选指定交易日扫描窗口(需要 --ticker) |
--ticker SYM | — | — | 要扫描的股票代码 |
--stride-days | 5 | 1-60 | 每次 as-of 游标位置之间的交易日步长 |
--outcome-days | 60 | 5-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-contractions | 2 | 2-4 | 值越高,形态越少,但质量越高 |
--t1-depth-min | 10.0% | 1-50 | 值越高,越能排除较浅的首次回调 |
--breakout-volume-ratio | 1.5x | 0.5-10 | 值越高,成交量确认要求越严格 |
--trend-min-score | 85 | 0-100 | 值越高,第 2 阶段过滤条件越严格 |
--atr-multiplier | 1.5 | 0.5-5 | 值越低,波段检测越灵敏 |
--contraction-ratio | 0.70 | 0.1-1 | 值越低,对收缩紧密度的要求越高 |
--min-contraction-days | 5 | 1-30 | 值越高,最短收缩时间越长 |
--lookback-days | 120 | 30-365 | 值越高,越能找到更早的形态 |
--max-sma200-extension | 50.0% | — | 用于判定过度延伸状态和相应惩罚的 SMA200 距离阈值 |
--wide-and-loose-threshold | 15.0% | — | 最后一次收缩深度超过此值时触发宽松形态标志 |
--strict | 关闭 | — | Minervini 严格模式:仅保留具有有效 VCP 的 Pre-breakout 或 Breakout 状态 |
第 2 步:查看结果
- 阅读生成的 JSON 和 Markdown 报告
- 加载
references/vcp_methodology.md,了解形态解读背景 - 加载
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): 仅观察或跳过
三阶段流程
- 预筛选 - 基于报价的筛选(价格、成交量、52 周位置),约 101 次 API 调用
- 趋势模板 - 使用 260 天历史数据进行 7 点第二阶段筛选,约 100 次 API 调用
- 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