关于 canslim-screener
这款选股 skill 使用 William O'Neil 的 CANSLIM 全部七项指标筛选并排列美国股票,评估基本面、价格走势、机构持仓和市场方向,并生成详细的 Markdown 与 JSON 报告。
主要功能
- 01完整的七项 CANSLIM 指标
- 02加权综合评分
- 03机构持仓数据的 Finviz 回退
- 04市场方向门控
- 05排名版 Markdown 与 JSON 报告
适用场景
- 01筛选股票池中的 CANSLIM 候选股
- 02按基本面和动量排列成长股
- 03查看个股各项指标得分
- 04结合市场方向审视股票排名
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tradermonty/ claude-trading-skills --skill canslim-screener安装后在 Claude Code 中输入/canslim-screener确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
requirements.txtreferences/canslim_methodology.mdfmp_api_endpoints.mdinterpretation_guide.mdscoring_system.mdscripts/check_institutional_endpoint.pyfinviz_stock_client.pyfmp_client.pyreport_generator.pyscorer.pyscreen_canslim.pyscripts/calculators/earnings_calculator.pygrowth_calculator.pyinstitutional_calculator.pyleadership_calculator.pymarket_calculator.pynew_highs_calculator.pysupply_demand_calculator.pyscripts/tests/conftest.pytest_canslim_calculators_coverage.pytest_canslim_coverage.pytest_canslim_fixes.pytest_fmp_fallback.pytest_fmp_stable_migration.pytest_institutional_fallback.pytest_leadership_rs.py详细介绍
CANSLIM 股票筛选器 — 第 3 阶段(完整 CANSLIM)
概述
此技能使用 William O'Neil 经验证的 CANSLIM 方法筛选美国股票。这是一种系统化方法,用于识别基本面强劲且价格动能强劲的成长股。CANSLIM 分析 7 个关键组成部分:Current Earnings(当前收益)、Annual Growth(年度增长)、Newness/New Highs(新事物/新高)、Supply/Demand(供需)、Leadership/RS Rank(领导地位/RS 排名)、Institutional Sponsorship(机构持股)和 Market Direction(市场方向)。
第 3 阶段实现了全部 7 个组成部分(C、A、N、S、L、I、M),代表完整方法的 100%。
两阶段方法:
- 阶段 1(FMP API + Finviz):使用全部 7 个 CANSLIM 组成部分分析股票池
- 阶段 2(报告):按综合评分排序并生成可执行报告
主要功能:
- 综合评分(0–100 分),包含加权组成部分
- Finviz 回退机制,用于获取机构持股数据(FMP 数据不完整时自动启用)
- 渐进式筛选,以优化 API 使用
- JSON + Markdown 输出格式
- 评级区间:卓越+(90+)、卓越(80–89)、强劲(70–79)、高于平均(60–69)
- 熊市保护(M 组成部分门控)
第 3.1 阶段组成部分权重(O'Neil 原始权重):
- C(当前收益):15%
- A(年度增长):20%
- N(新事物):15%
- S(供需):15%
- L(领导地位/RS 排名):20% — 多周期加权 RS(3 个月/6 个月/12 个月,相对于可配置基准)
- I(机构持股):10%
- M(市场方向):5%
加权 RS 公式:
Weighted RS = 0.40 × rel_3m + 0.30 × rel_6m + 0.30 × rel_12m
部分周期缺失时,会对可用周期重新归一化。默认基准为 ^GSPC;
可使用 --rs-benchmark SPY/QQQ/IWM/... 覆盖。
多周期数据不完整时的回退层级:
- 没有基准 → 股票绝对表现加权,并扣除 20%。
- 所有多周期窗口都缺失,但价格历史记录至少有 50 根 K 线 → 退回使用 传统的 365 天完整窗口绝对回报作为评分输入(没有基准时扣除 20%)。
- 价格历史记录少于 50 根 K 线 → 评分 = 0,并设置
error。
未来阶段:
- 第 4 阶段:集成 FINVIZ Elite → 执行速度提升 10 倍
何时使用此技能
明确触发条件:
- “查找 CANSLIM 股票”
- “使用 O'Neil 的方法筛选成长股”
- “哪些股票的收益和动能强劲?”
- “识别接近 52 周高点且收益加速增长的股票”
- “对 [sector/universe] 运行 CANSLIM 筛选器”
隐式触发条件:
- 用户希望识别多倍收益候选股
- 用户正在寻找基本面经验证的成长股
- 用户希望根据历史赢家进行系统化选股
- 用户需要一份符合 O'Neil 标准的股票排名列表
不适用情况:
- 侧重价值投资(改用 value-dividend-screener)
- 侧重收入/股息(改用 dividend-growth-pullback-screener)
- 熊市环境(M 组成部分会发出警示 — 可考虑提高现金持有比例)
前提条件
API 要求:
- FMP API 密钥(免费套餐:每天 250 次调用,足以筛选 35 只股票;Starter 套餐每月 29.99 美元,可筛选 40 只以上股票)
- 注册:https://site.financialmodelingprep.com/developer/docs
- 通过环境变量设置:
export FMP_API_KEY=your_key_here
Python 依赖项:
- Python 3.9+
requests(FMP API 调用)beautifulsoup4(Finviz 网页抓取)lxml(HTML 解析)
安装:
pip install requests beautifulsoup4 lxml
输出
输出目录: reports/(默认)或通过 --output-dir 指定自定义目录
生成的文件:
canslim_screener_YYYY-MM-DD_HHMMSS.json- 供程序使用的结构化数据canslim_screener_YYYY-MM-DD_HHMMSS.md- 便于阅读的报告
报告内容:
- 市场状况摘要(趋势、M 评分、警告)
- 排名前 N 的 CANSLIM 候选股票(按综合评分排序)
- 每只股票的组成部分明细(C、A、N、S、L、I、M 评分及详情)
- 评级说明(Exceptional+/Exceptional/Strong/Above Average)
- 质量警告和数据源说明
- 汇总统计(评级分布)
评级区间:
- Exceptional+ (90-100): 所有组成部分都接近完美,积极买入
- Exceptional (80-89): 基本面和动能表现出色,强烈买入
- Strong (70-79): 各组成部分表现稳健,常规买入
- Above Average (60-69): 达到门槛但存在轻微弱点,回调时买入
工作流
步骤 1:验证 API 访问权限和要求
检查用户是否已配置 FMP API 密钥:
# Check environment variable
echo $FMP_API_KEY
# If not set, prompt user to provide it
要求:
- FMP API 密钥(免费套餐:每天 250 次调用,足以处理 40 只股票)
- Python 3.9+ 及所需库:
requests(调用 FMP API)beautifulsoup4(抓取 Finviz 网页)lxml(解析 HTML)
安装:
pip install requests beautifulsoup4 lxml
如果缺少 API 密钥,请引导用户:
- 在 https://site.financialmodelingprep.com/developer/docs 注册
- 获取免费 API 密钥(每天 250 次调用)
- 设置环境变量:
export FMP_API_KEY=your_key_here
步骤 2:确定股票范围
选项 A:默认范围(推荐) 使用市值排名前 40 的 S&P 500 股票(脚本中预先定义):
python3 skills/canslim-screener/scripts/screen_canslim.py
选项 B:自定义范围 用户提供特定股票代码或行业:
python3 skills/canslim-screener/scripts/screen_canslim.py \
--universe AAPL MSFT GOOGL AMZN NVDA META TSLA
选项 C:特定行业 用户可以提供按行业筛选的列表(科技、医疗保健等)
API 调用预算注意事项(阶段 3):
- 40 只股票 × 每只股票调用 FMP 7 次 = 280 次 API 调用
- FMP:每只股票调用 7 次(profile、quote、income×2、historical_90d、historical_365d、institutional)
- Finviz:每只股票约调用 1.8 次(机构持仓备用数据源,速率限制为 2 秒,不计入 FMP 预算)
- 市场数据(^GSPC quote、^VIX quote、^GSPC 52-week history):调用 FMP 3 次
- 合计:每次筛选约调用 FMP 283 次(超过免费套餐的 250 次限制)
- 建议:免费套餐请使用
--max-candidates 35(35 × 7 + 3 = 248 次调用),或升级到 FMP Starter 套餐($29.99/月,每天 750 次调用),以完成对全部 40 只股票的筛选
第 3 步:运行 CANSLIM 筛选脚本
使用适当的参数运行主筛选脚本:
cd skills/canslim-screener/scripts
# Basic run (40 stocks, top 20 in report)
python3 screen_canslim.py --api-key $FMP_API_KEY
# Custom parameters
python3 screen_canslim.py \
--api-key $FMP_API_KEY \
--max-candidates 40 \
--top 20 \
--output-dir ../../../
# Custom RS benchmark (Phase 3.1)
python3 screen_canslim.py --rs-benchmark SPY
# Disable L component (saves per-stock 365-day fetch; L fixed at neutral 50)
python3 screen_canslim.py --disable-rs
脚本工作流(第 3 阶段 - 完整 CANSLIM):
- 市场方向(M):分析 S&P 500 相对于 50 日 EMA 的趋势(使用真实历史数据,以准确计算 EMA)
- 如果检测到熊市(M=0),提醒用户提高现金持有比例
- S&P 500 历史数据:获取 52 周数据,用于 M 组件的 EMA 计算和 L 组件的 RS 计算
- 股票分析:对每只股票计算:
- C 组件:季度 EPS/营收增长率(同比)
- A 组件:3 年 EPS CAGR 和稳定性
- N 组件:与 52 周高点的距离、突破检测
- S 组件:基于成交量的吸筹/派发情况(上涨日与下跌日的成交量)
- L 组件:相对于 S&P 500 的 52 周相对强度
- I 组件:机构持有人数量 + 持股比例(使用 Finviz 作为备用来源)
- 综合评分:计算加权平均分,并提供全部 7 个组件的分项评分
- 排名:按综合评分排序(从高到低)
- 报告:生成 JSON 和 Markdown 格式的输出
预计执行时间(第 3 阶段):
- 40 只股票:约 2 分钟(L 组件需要额外获取每只股票的 52 周历史数据)
- Finviz 备用方案每只股票约需额外 2 秒(受速率限制)
- L 组件需要每只股票的 365 天历史数据
Finviz 备用方案的行为:
- 当 FMP 无法提供
sharesOutstanding时自动触发 - 从 Finviz.com 抓取机构持股比例(免费,无需 API 密钥)
- 将 I 组件的准确度从 35/100(部分数据)提高到 60-100/100(完整数据)
- 用户会看到:
✅ Using Finviz institutional ownership for NVDA: 68.3%
第 4 步:读取并解析筛选结果
脚本会生成两个输出文件:
canslim_screener_YYYY-MM-DD_HHMMSS.json- 结构化数据canslim_screener_YYYY-MM-DD_HHMMSS.md- 人类可读的报告
读取 Markdown 报告以识别优质候选股票:
# Find the latest report
ls -lt canslim_screener_*.md | head -1
# Read the report
cat canslim_screener_YYYY-MM-DD_HHMMSS.md
报告结构(第 3 阶段 - 完整 CANSLIM):
- 市场状况摘要(趋势、M 评分、警告)
- 排名前 N 的 CANSLIM 候选股票(按排名排列,N = --top 参数)
- 每只股票的信息:
- 综合评分和评级(Exceptional+ / Exceptional / Strong 等)
- 组件分项评分(C、A、N、S、L、I、M 评分及详情)
- 解读(评级说明、指导建议、最弱组件)
- 警告(质量问题、市场状况、数据来源说明)
- 汇总统计(评级分布)
- 方法说明(第 3 阶段:7 个组件,覆盖率 100%)
报告中的组件详情:
- S 组件:“上涨/下跌成交量比:1.06 ✓ 吸筹”
- L 组件(第 3.1 阶段):“3m/6m/12m:+12.4%/+18.7%/+44.1%(相对 +5.2%/+8.3%/+22.0%)| RS:88(强)”
- I 组件:“6199 位持有人,持股比例 68.3% ⭐ 超级投资者”
在第 3.1 阶段的报告中,候选股票列表上方会新增一张汇总表,显示排名、代码、综合评分、评级、RS 评级和 RS 百分位,方便快速浏览。
第 5 步:分析排名靠前的候选股并提供建议
查看排名靠前的股票,并与知识库交叉参考:
需要查阅的参考文档:
references/interpretation_guide.md- 了解评级区间和投资组合仓位配置references/canslim_methodology.md- 深入了解各组成部分的含义(现已包含 S 和 I)references/scoring_system.md- 了解评分公式(第 3 阶段权重)
分析框架:
对于 Exceptional+ 股票(90–100 分):
- 所有组成部分都接近完美(C≥85,A≥85,N≥85,S≥80,L≥85,I≥80,M≥80)
- 建议:立即买入,积极配置仓位(占投资组合的 15–20%)
- 示例:“NVDA 得分 97.2——季度收益强劲增长(100),3 年增长强劲(95),股价创下新高(98),成交量呈现吸筹态势(85),相对强度领先(92),机构支持强劲(90),市场处于上升趋势(100)”
对于 Exceptional 股票(80–89 分):
- 基本面出色,且动能强劲
- 建议:强烈买入,按标准配置仓位(占投资组合的 10–15%)
对于 Strong 股票(70–79 分):
- 各组成部分表现稳健,存在轻微弱点
- 建议:买入,按标准配置仓位(占投资组合的 8–12%)
- 第 3 阶段示例:“股票得分 77.5——收益强劲(85),增长稳健(80),接近高点(70),吸筹态势(60),相对强度领先(75),机构持仓良好(60),市场处于上升趋势(90)”
对于 Above Average 股票(60–69 分):
- 达到门槛,但有一个组成部分表现较弱
- 建议:回调时买入,保守配置仓位(占投资组合的 5–8%)
熊市特别规则:
- 如果 M 项得分 = 0(检测到熊市),无论其他得分如何,都不要买入
- 建议:将现金仓位提高至 80–100%,等待市场复苏
- CANSLIM 不适用于熊市(四分之三的股票会跟随市场趋势)
第 6 步:生成面向用户的报告
为用户创建简洁、可执行的摘要:
报告格式:
# CANSLIM Stock Screening Results (Phase 3 - Full CANSLIM)
**Date:** YYYY-MM-DD
**Market Condition:** [Trend] - M Score: [X]/100
**Stocks Analyzed:** [N]
**Components:** C, A, N, S, L, I, M (7 of 7, 100% coverage)
## Market Summary
[2-3 sentences on current market environment based on M component]
[If bear market: WARNING - Consider raising cash allocation]
## Top 5 CANSLIM Candidates
### 1. [SYMBOL] - [Company Name] ⭐⭐⭐
**Score:** [X.X]/100 ([Rating])
**Price:** $[XXX.XX] | **Sector:** [Sector]
**Component Breakdown:**
- C (Earnings): [X]/100 - [EPS growth]% QoQ, [Revenue growth]% revenue
- A (Growth): [X]/100 - [CAGR]% 3yr EPS CAGR
- N (Newness): [X]/100 - [Distance]% from 52wk high
- S (Supply/Demand): [X]/100 - Up/Down Volume Ratio: [X.XX]
- L (Leadership): [X]/100 - 52wk: [+X.X]% ([+X.X]% vs S&P) RS: [XX]
- I (Institutional): [X]/100 - [N] holders, [X.X]% ownership [⭐ Superinvestor if present]
- M (Market): [X]/100 - [Trend]
**Interpretation:** [Rating description and guidance]
**Weakest Component:** [X] ([score])
**Data Source Note:** [If Finviz used: "Institutional data from Finviz"]
[Repeat for top 5 stocks]
## Investment Recommendations
**Immediate Buy List (90+ score):**
- [List stocks with exceptional+ ratings]
- Position sizing: 15-20% each
**Strong Buy List (80-89 score):**
- [List stocks with exceptional ratings]
- Position sizing: 10-15% each
**Watchlist (70-79 score):**
- [List stocks with strong ratings]
- Buy on pullback
## Risk Factors
- [Identify any quality warnings from components]
- [Market condition warnings]
- [Sector concentration risks if applicable]
- [Data source reliability notes if Finviz heavily used]
## Next Steps
1. Conduct detailed fundamental analysis on top 3 candidates
2. Check earnings calendars for upcoming reports
3. Review technical charts for entry timing
4. [If bear market: Wait for market recovery before deploying capital]
---
**Note:** This is Phase 3 (Full CANSLIM: C, A, N, S, L, I, M - 100% coverage).
资源
脚本目录(scripts/)
主要脚本:
-
screen_canslim.py- 主协调脚本- 筛选工作流的入口点
- 处理参数解析、API 协调、排名和报告生成
- 用法:
python3 screen_canslim.py --api-key KEY [options]
-
fmp_client.py- FMP API 客户端封装- 速率限制(每次调用间隔 0.3 秒)
- 429 错误处理,重试间隔为 60 秒
- 基于会话的缓存
- 方法:
get_income_statement()、get_quote()、get_historical_prices()、get_institutional_holders()
-
finviz_stock_client.py- Finviz 网页抓取客户端 ← NEW- 基于 BeautifulSoup 的 HTML 解析
- 从 Finviz.com 获取机构持股比例
- 速率限制(每次调用间隔 2.0 秒)
- 无需 API 密钥(免费网页抓取)
- 方法:
get_institutional_ownership()、get_stock_data()
计算器(scripts/calculators/):
-
earnings_calculator.py- C 组件(当前收益)- 季度 EPS/收入同比增长
- 评分:增长率 ≥50% = 100 分,30-49% = 80 分,18-29% = 60 分
-
growth_calculator.py- A 组件(年度增长)- 计算 3 年 EPS CAGR
- 稳定性检查(没有负增长年份)
- 评分:增长率 ≥40% = 90 分,30-39% = 70 分,25-29% = 50 分
-
new_highs_calculator.py- N 组件(新高)- 距离 52 周高点的幅度
- 检测经成交量确认的突破
- 评分:距离高点 5% 以内且出现突破 = 100 分,距离高点 10% 以内且出现突破 = 80 分
-
supply_demand_calculator.py- S 组件(供需) ← NEW- 基于成交量的吸筹/派发分析
- 上涨日成交量与下跌日成交量之比(回溯 60 天)
- 评分:比值 ≥2.0 = 100 分,1.5-2.0 = 80 分,1.0-1.5 = 60 分
-
leadership_calculator.py- L 组件(领导力/相对强度)- 股票 52 周表现与 S&P 500 基准的对比
- RS 排名估算(1-99 刻度,O'Neil 风格)
- 评分:RS ≥90 且跑赢市场 = 100 分,RS 80-89 = 80 分
-
institutional_calculator.py- I 组件(机构)- 机构持有者数量(来自 FMP)
- 持股比例(来自 FMP,或回退至 Finviz)
- 超级投资者检测(Berkshire Hathaway、Baupost 等)
- 评分:50-100 位持有者且持股比例为 30-60% = 100 分
-
market_calculator.py- M 组件(市场方向)- S&P 500 与 50 日 EMA 的对比
- 经 VIX 调整的评分
- 评分:强劲上升趋势 = 100 分,上升趋势 = 80 分,熊市 = 0 分
辅助模块:
-
scorer.py- 综合评分计算- 第 3 阶段加权平均:C×15% + A×20% + N×15% + S×15% + L×20% + I×10% + M×5%
- 评级说明(Exceptional+/Exceptional/Strong 等)
- 最低门槛验证(全部 7 个组件都必须达到基准)
-
report_generator.py- 输出生成- 导出 JSON(供程序使用)
- 导出 Markdown(便于阅读)
- 第 3 阶段组件明细表(全部 7 个组件)
- 汇总统计计算
参考资料目录(references/)
知识库:
-
references/canslim_methodology.md(27KB)- CANSLIM 完整说明- 全部 7 个组成部分及 O'Neil 的原始阈值
- S 部分(成交量累积/派发)详细说明
- L 部分(领先地位/相对强度)详细说明
- I 部分(机构持仓支持)详细说明
- 历史示例(AAPL 2009、NFLX 2013、TSLA 2019、NVDA 2023)
-
references/scoring_system.md(21KB)- 技术评分规范(第 3 阶段)- 第 3 阶段各组成部分的权重和公式(全部 7 个组成部分)
- 评分区间解读(90-100、80-89 等)
- 全部 7 个组成部分的最低阈值
- 综合评分计算示例
-
references/fmp_api_endpoints.md(18KB)- API 集成指南(第 3 阶段)- 全部 7 个组成部分所需的端点
- L 部分:52 周历史价格端点
- 机构持有人端点文档
- Finviz 回退策略说明
- 速率限制策略
- 成本分析(第 3 阶段:40 只股票约需调用 FMP 283 次,超过免费套餐的 250 次限额)
-
references/interpretation_guide.md(18KB)- 用户指南- 投资组合构建规则
- 按评级确定仓位规模
- 入场/退出策略
- 熊市保护规则
如何使用参考资料:
- 首先阅读
references/canslim_methodology.md,了解 O'Neil 的系统(现已包含 S 和 I) - 分析结果时参阅
references/interpretation_guide.md - 如果评分出乎意料,请参阅
references/scoring_system.md - 排查 API 问题或 Finviz 回退问题时,请查看
references/fmp_api_endpoints.md
故障排除
问题 1:超出 FMP API 速率限制
症状:
ERROR: 429 Too Many Requests - Rate limit exceeded
Retrying in 60 seconds...
原因:
- 在较短时间内运行多次筛选
- 超出每天 250 次调用(免费套餐限额)
- 其他应用使用相同的 API 密钥
解决方案:
- 等待后重试:脚本会在 60s 后自动重试
- 缩小股票池:使用
--max-candidates 30,减少 API 用量 - 检查每日用量:免费套餐在 UTC 午夜重置
- 升级套餐:FMP Starter($29.99/月)每天提供 750 次调用
问题 2:缺少所需库
症状:
ERROR: required libraries not found. Install with: pip install beautifulsoup4 requests lxml
解决方案:
# Install all required libraries
pip install requests beautifulsoup4 lxml
# Or install individually
pip install beautifulsoup4
pip install requests
pip install lxml
问题 3:Finviz 回退导致执行缓慢
症状:
Execution time: 2 minutes 30 seconds for 40 stocks (slower than expected)
原因:
- Finviz 速率限制(每次请求间隔 2.0s)
- 由于 FMP 数据缺失,所有股票都触发回退
解决方案:
- 接受延迟:Finviz 回退模式下,处理 40 只股票需要 1-2 分钟,属于正常情况
- 监控回退使用情况:查看日志中的“Using Finviz institutional ownership”消息
- 降低速率限制(高级):编辑
finviz_stock_client.py,将rate_limit_seconds=2.0改为1.5(风险:IP 封禁)
注意: Finviz 回退会为每只股票增加约 2 秒处理时间,但能显著提高 I 部分的准确性(从 35 分提高到 60-100 分)。
问题 4:Finviz 网页抓取失败
症状:
WARNING: Finviz request failed with status 403 for NVDA
⚠️ Using Finviz institutional ownership data - FMP shares outstanding unavailable. Finviz fallback also unavailable. Score reduced by 50%.
原因:
- Finviz 屏蔽了抓取请求(检测到 User-Agent)
- 超出速率限制(请求过多)
- 网络问题或 Finviz 服务中断
解决方案:
- 等待后重试:速率限制会在几分钟后重置
- 检查互联网连接:确认能够访问 finviz.com
- 接受回退结果:脚本会继续运行,仅使用 FMP 持有人数量(I 部分评分上限为 70/100)
- 手动验证:如果 IP 被封禁,请手动访问 Finviz 网站检查
平稳降级:
- Finviz 出现问题时,脚本不会失败
- 回退为仅使用 FMP 持有人数量
- 报告中会显示质量警告
问题 5:没有股票达到最低阈值
症状:
✓ Successfully analyzed 40 stocks
Top 5 Stocks:
1. AAPL - 58.3 (Average)
2. MSFT - 55.1 (Average)
...
原因:
- 熊市环境(M 组件较低)
- 所选股票池缺少成长股
- 市场轮动,资金流出成长股
解决方案:
- 检查 M 组件:如果 M=0(熊市),请按照 CANSLIM 规则提高现金持仓
- 扩大股票池:尝试不同的行业或市值范围
- 降低预期:在疲软市场中,平均分(55-65)仍可能具有操作价值
- 等待更好的机会:CANSLIM 在牛市中效果最佳
问题 6:数据质量警告
症状:
⚠️ Revenue declining despite EPS growth (possible buyback distortion)
⚠️ Using Finviz institutional ownership data (68.3%) - FMP shares outstanding unavailable.
解读:
- 这些不是错误,而是计算器发出的质量标记
- 营收警告:EPS 增长可能来自股票回购,而非内生增长
- Finviz 警告:数据源已从 FMP 切换到 Finviz(数据仍然准确)
操作:
- 在完整报告中查看各组件的详细信息
- 与基本面分析交叉核对
- 根据风险水平调整持仓规模
- Finviz 数据可靠;对于数据源警告无需采取任何操作
重要说明
第 3 阶段实施状态
这是第 3 阶段,已实现全部 7 项 CANSLIM 组件:
- ✅ C(当前盈利)- 已实现
- ✅ A(年度增长)- 已实现
- ✅ N(新颖性)- 已实现
- ✅ S(供需关系)- 已实现
- ✅ L(领导地位/RS 排名)- 已实现
- ✅ I(机构持仓)- 已实现
- ✅ M(市场方向)- 已实现
影响:
- 综合评分代表完整 CANSLIM 方法的100%
- 使用 O'Neil 原始组件权重(C 15%、A 20%、N 15%、S 15%、L 20%、I 10%、M 5%)
- L 组件(权重 20%)与 A 并列为最大单项因素,强调相对强度领先地位
- M 组件使用历史数据中的真实 50 日 EMA(而非回退估算值)
Finviz 集成的优势
自动回退系统:
- 当 FMP API 未提供
sharesOutstanding时,Finviz 会自动启用 - 从 Finviz.com 抓取机构持仓比例(免费,无需 API 密钥)
- 将 I 组件的准确度从 35/100(部分数据)提升至 60-100/100(完整数据)
数据源优先级:
- FMP API(主要):机构持有人数量 + 计算得出的流通股数
- Finviz(回退):网页直接提供的机构持仓比例
- 部分数据(最后手段):仅有持有人数量,扣减 50%
经测试的可靠性:
- 39/39 只股票均成功通过 Finviz 获取持仓比例(成功率 100%)
- 平均执行时间:每只股票 2.54 秒
- 测试期间未出现错误或 IP 封锁
未来增强
第 4 阶段(计划中):
- 集成 FINVIZ Elite 进行预筛选
- 执行时间:从 2 分钟缩短至 10-15 秒
- FMP API 使用量减少:90%
- 可处理更大的股票池(100+ 只股票)
数据来源说明
- FMP API:损益表、报价、历史价格、关键指标、机构持有人数据
- Finviz:机构持仓比例(回退)、市场数据
- 方法论:William O'Neil 的《How to Make Money in Stocks》(第 4 版)
- 评分系统:改编自 IBD MarketSmith 专有系统
免责声明
本筛选器仅供教育和信息参考。
- 不构成投资建议
- 过往表现不代表未来结果
- CANSLIM 方法在牛市中效果最佳(M 指标用于确认)
- 做出投资决策前,请自行研究并咨询财务顾问
- O'Neil 的历史赢家包括 AAPL(2009 年:+1,200%)、NFLX(2013 年:+800%),但许多股票表现不佳
版本: Phase 3.1(多周期 RS)
最后更新: 2026-05-03
API 要求: FMP API(免费层:最多 35 只股票;40 只股票建议使用 Starter 层)+ 用于 Finviz 的 BeautifulSoup/requests/lxml
执行时间: 40 只股票约需 2 分钟
输出格式: JSON + Markdown(现包含 Summary Table 和 schema_version: "3.1")
已实现组件: C、A、N、S、L、I、M(7 项中的 7 项,覆盖率 100%)
Phase 3.1 新增内容: 多周期 RS(3m/6m/12m)、--rs-benchmark、--disable-rs,
新增 RS 字段(rs_rating、rs_rank_percentile、rs_3m_return、rs_6m_return、
rs_12m_return、rs_benchmark、rs_benchmark_relative_return、rs_component_score、
benchmark_52w_performance)。