利润-市值背离筛选器 v1.0.0
一、功能概述
对 A股全部上市公司 + 港股通标的 做全市场量化筛选,找出「利润持续增长、但市值增长显著跑输利润增长」的公司:
- 主口径:
市值增长倍数 ÷ 利润增长倍数 < 0.8即入选(估值相对利润压缩 ≥ 20%) - 年化口径:市值 CAGR 与利润 CAGR 对比,作为展示列(不参与入选判断)
- 数据零幻觉:所有定量数据来自数据源查询结果;计算全部由
scripts/screen_divergence.py执行,禁止心算 - 输出:HTML 汇总报告(单列可打印,风格对齐 company-one-pager:白底、深蓝标题、金色强调)
二、输入说明
| 输入项 | 必填 | 说明 | |--------|------|------| | 背离阈值 | 否 | 默认 0.8;可指定(如"低于利润增长的一半"→ 0.5) | | 上市年数门槛 | 否 | 默认 ≥ 5 年 | | 股票池 | 否 | 默认 A股全量 + 港股通;可限定(如"只看消费行业") | | 数据来源 | 三选一 | ① MCP connector(腾讯自选股 westock / Wind / 同花顺,见第五节)② 用户提供数据 ③ 公开渠道检索 | | 结果上限 | 否 | 默认全量输出;可指定 Top N |
触发示例:「帮我筛出上市以来市值增长低于利润增长0.8倍的公司」「A股+港股通里哪些公司利润涨了市值没涨」「跑一次估值压缩筛选」
三、口径定义(核心,不得偏离)
3.1 主口径公式
利润增长倍数 = (最新年度归母净利润 − 上市后首个完整年度归母净利润) ÷ 首个完整年度归母净利润
市值增长倍数 = (当前总市值 − 上市首日收盘总市值) ÷ 上市首日收盘总市值
背离比值 = 市值增长倍数 ÷ 利润增长倍数 < 0.8 ⇒ 入选
例:利润增长 300%(倍数 3.0),市值增长 180%(倍数 1.8),比值 1.8÷3.0 = 0.6 < 0.8 → 入选。
3.2 基期定义
| 项目 | 基期 | 末期 | |------|------|------| | 利润 | 上市后首个完整年度年报归母净利润(如 2001-08 上市 → 2002 年报) | 最新已披露年度归母净利润 | | 市值 | 上市首日收盘总市值(不是发行市值!) | 最新交易日总市值 |
- 全体公司统一使用年度口径;若改用季报/TTM,须全池统一并标注
- 港股市值与利润同为本币(HKD),倍数为无量纲比值,不受汇率影响
- A+H 两地上市:单一市场口径计算并标注;需合并口径时用数据源提供的总市值
3.3 门槛规则(剔除噪声,防倍数失真)
- 上市 ≥ 5 年(可配置)
- 基期利润 > 0 且最新利润 > 0(负数/由亏转盈倍数失真,剔除)
- 利润为正增长(利润下滑公司不属于本筛选目标)
- 上市首日市值取不到的,剔除并统计——禁止用发行市值替代
3.4 已知口径边界(报告中必须提示)
- 市值增长已含增发/配股的股本扩张 → 入选者是「即便可能融资扩张、市值仍跑输利润」的更强信号子集
- 估值压缩可能是合理风险定价(行业衰退/治理缺陷/周期见顶),入选 ≠ 低估,结论须附此边界
四、执行流程
Step 1 检查数据源连接状态(westock / wind / 同花顺 connector)
├─ 已连接 → 继续;未连接 → 提示用户连接或改用已连接源;全断 → 停止说明,禁止编数据
Step 2 构建股票池:A股全量 + 港股通名单 → output/universe.json
Step 3 分批取数(每批 50 家,写 output/batch_XX.json 断点,失败批可重跑):
① list_date + mcap_now(快照,快)
② profit_first_year + profit_latest_year(财报,慢)
③ mcap_at_ipo(上市首日历史行情)
Step 4 跑计算引擎(见 5.2)→ 得到入选清单
Step 5 仅对入选公司补充:industry / industry_rank / roe_latest / roe_avg5(省 90% 调用量)
Step 6 关键数字双源交叉验证(首年利润、最新利润、首日市值、当前市值)
Step 7 套用模板生成 HTML 报告 → output/利润市值背离筛选报告_YYYYMMDD.html
行业地位判定纪律:优先「行业内总市值排名」(如「白酒行业市值第 2/20」);数据源提供营收排名或市占率时一并列出;均不可得标「数据暂缺」——禁止无排名支撑的定性词(如「行业龙头」)。
五、数据源与计算
5.1 数据源优先级
腾讯自选股(westock-mcp / westock-data)→ Wind(wind-finance)→ 同花顺(kuaicha-search)→ 通达信 / 东方财富妙想 → 公司 IR/交易所披露(仲裁源)。建议 ≥ 2 源交叉验证;单源时报告标注「⚠️ 单源数据」。
字段映射、接入方式、常见坑(港股货币、A+H、老股首日市值缺失、非自然年财年)详见 references/data-source-guide.md——取数前必读。
5.2 计算纪律(脚本强制)
- 把取数结果整理为 JSON 数组(字段见下表),保存为
output/companies.json - 执行:
python scripts/screen_divergence.py output/companies.json --ratio 0.8 --min-years 5 - 脚本输出
screen_result.json(含 selected / all_results / 剔除统计),报告数字以脚本输出为准 - 纯标准库,Python 3.8+ 可运行;同一输入同一输出
输入字段表:
| 字段 | 必填 | 类型 | 说明 | |------|------|------|------| | code / name / market | ✓ | str | 代码 / 名称 / A或HK | | list_date | ✓ | str | 上市日期 YYYY-MM-DD | | mcap_at_ipo / mcap_now | ✓ | number | 上市首日收盘市值 / 最新市值(亿,本币) | | profit_first_year / profit_latest_year | ✓ | number | 首个完整年度 / 最新年度归母净利润(亿,本币) | | profit_latest_year_label | ✓ | str | 如 "2025年报" | | industry / industry_rank | 仅入选 | str | 行业 / 行业地位 | | roe_latest / roe_avg5 | 仅入选 | number | 最新 ROE % / 近5年均值 % | | currency / data_source | 建议 | str | 本币 / 来源标注 |
5.3 配置文件
将 config/config.example.json 复制为 config/config.json:数据源 connector id、阈值、门槛、批大小、输出目录。connector 密钥只能经 WorkBuddy 连接器授权注入,禁止明文写入任何文件。
六、输出说明
- 文件:
output/利润市值背离筛选报告_YYYYMMDD.html(模板见templates/report-template.html,替换占位符时保留 CSS 与布局) - 必含要素(顺序固定):页眉(基准日/股票池/入选数/阈值/数据源)→ 指标卡(总数/通过门槛/入选/最深背离/两组中位数)→ 方法论(公式+口径+门槛+边界提示)→ 入选公司汇总表(按背离深度升序:名称、代码、市场、行业、行业地位、背离比值、利润增长倍数与年化、市值增长倍数与年化、ROE 最新与5年均值、上市年数)→ 剔除统计 → 免责页脚
- 数值格式:倍数
0.75x、年化23.5%、ROE15.3;正增长用红色(中国市场惯例:涨红跌绿);数据缺失写「数据暂缺」,禁止编造 - 报告用词纪律:定量优先,禁止「严重低估」「黄金坑」类无数据支撑的判断词
七、目录结构
profit-cap-divergence-screener/
├── SKILL.md # 本文件
├── scripts/
│ ├── screen_divergence.py # 计算引擎(倍数/比值/CAGR/门槛/排序)
│ └── test_companies.json # 测试样例(7家,覆盖各剔除路径)
├── references/
│ └── data-source-guide.md # 数据源优先级/字段映射/常见坑(取数前必读)
├── templates/
│ └── report-template.html # HTML 汇总报告模板(含占位符)
└── config/
└── config.example.json # 配置模板
八、检查点
- CP1 取数后:股票池是否覆盖 A股全量+港股通?市值是否同一交易日?首年利润是否"完整年度"?不合格重取该批
- CP2 计算后:抽样 3 家手验倍数比与脚本输出一致?剔除原因分布合理(次新/亏损转盈占比应可观)?
- CP3 交付前:入选表按背离深度排序?行业地位有排名支撑?单源数据已标注?口径边界提示在报告内?港股货币已标注?
九、版本记录
- v1.0.0(2026-08-27):首版。主口径(倍数比<0.8)+ 年化展示口径;门槛规则(≥5年/基期为正/正增长);分批取数与断点续跑;脚本化计算引擎(含 7 家测试样例覆盖全部剔除路径);HTML 汇总报告模板;数据源优先级与字段映射指南
Scan to join WeChat group