mcpField
C
canslim-screener

canslim-screener

github.com/mphinance其他3287 次安装3 天前更新
代码仓库

关于 canslim-screener

使用 William O'Neil 七项 CANSLIM 方法筛选美国股票的 Python 技能。它结合市场、盈利、增长、价格和机构数据评分排名,并生成 JSON 与 Markdown 报告。

主要功能

  1. 01评估全部七项 CANSLIM 指标
  2. 02按加权综合分数排列股票
  3. 03机构数据不全时使用 Finviz 补充
  4. 04逐步筛选候选股票
  5. 05生成 JSON 和 Markdown 报告
  6. 06标记熊市状况

适用场景

  1. 01筛选自定义美国股票列表
  2. 02排列成长股候选项
  3. 03查看股票各项指标得分

安装

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

$npx skills add https://github.com/mphinance/alpha-skills --skill canslim-screener

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

包含的文件

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

README.md
references/
canslim_methodology.md
fmp_api_endpoints.md
interpretation_guide.md
scoring_system.md
scripts/
check_institutional_endpoint.py
finviz_stock_client.py
fmp_client.py
report_generator.py
scorer.py
screen_canslim.py
scripts/calculators/
earnings_calculator.py
growth_calculator.py
institutional_calculator.py
leadership_calculator.py
market_calculator.py
new_highs_calculator.py
supply_demand_calculator.py
scripts/tests/
conftest.py
test_canslim_fixes.py
test_fmp_fallback.py

详细介绍

CANSLIM 股票筛选器 - Phase 3(完整 CANSLIM)

概述

此技能使用 William O'Neil 久经验证的 CANSLIM 方法筛选美国股票。该方法采用系统化方式,识别基本面强劲且价格势头良好的成长型股票。CANSLIM 分析 7 个关键组成部分:Current Earnings(当前收益)、Annual Growth(年度增长)、Newness/New Highs(新动向/新高)、Supply/Demand(供需)、Leadership/RS Rank(领导力/相对强度排名)、Institutional Sponsorship(机构持股)和 Market Direction(市场方向)。

Phase 3 实现了 7 个组成部分中的全部 7 个(C、A、N、S、L、I、M),涵盖完整方法论的 100%。

两阶段方法:

  1. 阶段 1(FMP API + Finviz):使用全部 7 个 CANSLIM 组成部分分析股票池
  2. 阶段 2(报告生成):按综合评分排序并生成可执行报告

主要功能:

  • 综合评分(0-100 分),包含加权组成部分
  • Finviz 回退机制,用于获取机构持股数据(FMP 数据不完整时自动启用)
  • 渐进式筛选,以优化 API 使用
  • JSON + Markdown 输出格式
  • 评分区间:Exceptional+(90+)、Exceptional(80-89)、Strong(70-79)、Above Average(60-69)
  • 熊市保护(M 组成部分门控)

Phase 3 组成部分权重(O'Neil 原始权重):

  • C(当前收益):15%
  • A(年度增长):20%
  • N(新动向):15%
  • S(供需):15%
  • L(领导力/相对强度排名):20%
  • I(机构持股):10%
  • M(市场方向):5%

后续阶段:

  • Phase 4:集成 FINVIZ Elite → 执行速度提升 10 倍

何时使用此技能

明确触发语:

  • “查找 CANSLIM 股票”
  • “使用 O'Neil 的方法筛选成长型股票”
  • “哪些股票的收益和势头强劲?”
  • “找出接近 52 周高点且收益加速增长的股票”
  • “对 [行业/股票池] 运行 CANSLIM 筛选器”

隐式触发情形:

  • 用户想要找出潜在的多倍回报股票
  • 用户正在寻找基本面经得起验证的成长型股票
  • 用户希望根据历史赢家进行系统化选股
  • 用户需要一份符合 O'Neil 标准的股票排名列表

不适用情形:

  • 侧重价值投资(改用 value-dividend-screener)
  • 侧重收入/股息(改用 dividend-growth-pullback-screener)
  • 熊市环境(M 组成部分会发出警示——可考虑提高现金持有比例)

先决条件

API 要求:

  • FMP API 密钥(免费层级:每天 250 次调用,足以筛选 35 只股票;Starter 层级每月 $29.99,可筛选 40 只以上股票)

Python 依赖项:

  • Python 3.7+
  • 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 评分、警告)
  • CANSLIM 候选股票 Top N(按综合评分排序)
  • 每只股票的组成部分明细(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.7+ 及所需库:
    • requests(用于调用 FMP API)
    • beautifulsoup4(用于抓取 Finviz 网页)
    • lxml(用于解析 HTML)

安装:

pip install requests beautifulsoup4 lxml

如果缺少 API 密钥,请引导用户:

  1. 在 https://site.financialmodelingprep.com/developer/docs 注册
  2. 获取免费的 API 密钥(每天 250 次调用)
  3. 设置环境变量:export FMP_API_KEY=your_key_here
步骤 2:确定股票范围

选项 A:默认范围(推荐) 使用市值最高的 40 只标普 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 周历史数据):调用 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 ../../../

脚本工作流(阶段 3 - 完整 CANSLIM):

  1. 市场方向(M):分析标普 500 相对于 50 日 EMA 的趋势(使用真实历史数据以准确计算 EMA)
    • 如果检测到熊市(M=0),提醒用户提高现金持有比例
  2. 标普 500 历史数据:获取 52 周数据,用于 M 组成部分的 EMA 和 L 组成部分的 RS 计算
  3. 股票分析:为每只股票计算:
    • C 组成部分:季度 EPS/营收同比增长
    • A 组成部分:3 年 EPS CAGR 和稳定性
    • N 组成部分:与 52 周高点的距离、突破检测
    • S 组成部分:基于成交量的吸筹/派发(上涨日与下跌日的成交量)
    • L 组成部分:相对于标普 500 的 52 周相对强度
    • I 组成部分:机构持有者数量 + 持股比例(Finviz 备用数据源)
  4. 综合评分:加权平均,并细分全部 7 个组成部分
  5. 排名:按综合得分排序(从高到低)
  6. 报告:生成 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 指标:“52 周:+45.2%(较 S&P 高 +22.1%)相对强度:88”
  • I 指标:“6199 名持有人,持股比例 68.3% ⭐ 超级投资者”
步骤 5:分析排名靠前的候选股并提供建议

查看排名靠前的股票,并与知识库交叉参考:

需要查阅的参考文档:

  1. references/interpretation_guide.md - 了解评级区间和投资组合仓位
  2. references/canslim_methodology.md - 深入了解各指标的含义(现已包含 S 和 I)
  3. 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 只股票约需 283 次 FMP 调用,超过免费套餐的 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 密钥

解决方案:

  1. 等待后重试:脚本会在 60 秒后自动重试
  2. 缩小筛选范围:使用 --max-candidates 30 降低 API 使用量
  3. 检查每日用量:免费套餐在 UTC 午夜重置
  4. 升级套餐: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.0 秒)
  • FMP 数据缺失导致所有股票都触发备用方案

解决方案:

  1. 接受延迟:使用 Finviz 备用方案时,处理 40 只股票耗时 1-2 分钟属正常情况
  2. 监控备用方案的使用情况:检查日志中是否有“Using Finviz institutional ownership”消息
  3. 降低速率限制(高级操作):编辑 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 服务中断

解决方案:

  1. 等待后重试:速率限制会在几分钟后重置
  2. 检查互联网连接:确认网络可以访问 finviz.com
  3. 接受备用方案:脚本仅使用 FMP 持仓者数量继续运行(I 评分最高为 70/100)
  4. 手动验证:检查 Finviz 网站,确认 IP 是否被屏蔽

优雅降级:

  • 脚本不会因 Finviz 问题而失败
  • 自动改为仅使用 FMP 持仓者数量
  • 用户会在报告中看到质量警告
问题 5:没有股票达到最低阈值

症状:

✓ Successfully analyzed 40 stocks
Top 5 Stocks:
  1. AAPL  -  58.3 (Average)
  2. MSFT  -  55.1 (Average)
  ...

原因:

  • 熊市环境(M 组件偏低)
  • 所选股票范围缺少成长股
  • 市场风格轮动,资金流出成长股

解决方案:

  1. 检查 M 组件:如果 M=0(熊市),请按照 CANSLIM 规则提高现金比例
  2. 扩大股票范围:尝试不同的行业或市值区间
  3. 降低预期:在疲弱市场中,平均得分(55-65)仍可能具有操作价值
  4. 等待更好的市场条件: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(数据仍然准确)

处理措施:

  1. 在完整报告中查看各项组件的详情
  2. 结合基本面分析进行交叉验证
  3. 根据风险水平调整仓位规模
  4. Finviz 数据可靠;对于数据源警告无需采取措施

重要说明

第 3 阶段实施状态

这是第 3 阶段,已实现 7 个 CANSLIM 组件中的全部 7 个:

  • ✅ C(当前盈利)- 已实现
  • ✅ A(年度增长)- 已实现
  • ✅ N(新颖性)- 已实现
  • ✅ S(供需)- 已实现
  • ✅ L(领先地位/相对强度排名)- 已实现
  • ✅ 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(完整数据)

数据源优先级:

  1. FMP API(主要):机构持有人数量 + 流通股数计算
  2. Finviz(备用):直接从网页获取机构持股比例
  3. 部分数据(最后手段):仅有持有人数量,应用 50% 惩罚

可靠性测试:

  • 通过 Finviz 成功获取 39/39 只股票的持股比例(成功率 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%),但许多股票未能取得良好表现

版本: 第 3 阶段 最后更新: 2026-02-20 API 要求: FMP API(免费套餐:最多 35 只股票;建议处理 40 只股票时使用 Starter 套餐)+ 用于 Finviz 的 BeautifulSoup/requests/lxml 执行时间: 筛选 40 只股票约需 2 分钟 输出格式: JSON + Markdown 已实现组件: C、A、N、S、L、I、M(7 个中的 7 个,覆盖率 100%)

评论

支持 Markdown