| name | value-invest |
| description | 个人价值投资分析工具。基于护城河、财务质量、行业风险的多模型估值(PE / P/S / DCF / DDM / SOTP),给出合理价 / 买入价 / 减仓价 / 清仓价四档锚点。Use when the user asks to value a stock, evaluate whether it's worth buying, mentions buy/sell anchor on a holding, requests an updated valuation chapter for a focus-list name, or asks "is X stock cheap / expensive". 适用于 A 股和港股的左侧长期投资者。 |
价值投资分析 Skill
面向左侧价值投资者的个股分析工具。核心输出:基于最新股价的投资价值判断和安全边际买入价。
When to Use
- 用户要求分析某只股票的投资价值
- 用户询问某只股票是否值得买入
- 用户要求评估持仓股的当前位置
- 用户要求更新 wiki 中个股的估值数据
投资者画像
- 价值投资为主,也关注成长
- 持仓周期月起步,偏长期,左侧风格
- 偏向资产配置,很少投机
- 非常看重安全边际,不做止损
- 市场:A股、港股
数据源与文件结构
skills/value-invest/
├── SKILL.md # 本文件:分析方法论
├── templates/stock-analysis.md # 输出模板(wiki页面格式)
└── scripts/
└── fetch_data.py # 数据获取编排(底层走 skills/_shared/marketdata)
数据获取脚本
scripts/fetch_data.py 一键拉取财务/行情/历史 PE 时序/研报一致预期/同行对比:
python3 scripts/fetch_data.py 600519 000858,000596
python3 scripts/fetch_data.py 0700.HK
输出:财务摘要(5年年报+最新季报)、行情快照(含 PE_TTM/PE动态/PE静态/PB/换手/5档)、
历史 PE/PB 区间(直接用 baostock 日级 peTTM 算中位/分位,无需手填 EPS)、
单季度扣非趋势、卖方研报一致预期(含未来 3 年 EPS/PE 预测)、同行对比。
数据源分工(2026-05 修订)
| 数据 | 主源 | 兜底 | 备注 |
|---|
| 财务摘要 | AKShare stock_financial_abstract (新浪) | — | 稳定,不动 |
| A 股行情快照 | 腾讯 qt.gtimg.cn (_shared/marketdata/quote_tencent.py) | yfinance | 比 yfinance 快 ~22x,含 PE动态/PE静态/换手/5档/量比/振幅;国内可达 |
| A 股历史日 K + PE/PB 时序 | baostock (peTTM + pbMRQ) | yfinance | baostock 自带日级 peTTM/pbMRQ,消除"分位反推中位"陷阱(CLAUDE.md 五项 sanity check 第 5 项) |
| 港股 / 美股行情 | yfinance 0700.HK / BABA | — | 腾讯/baostock 不覆盖境外 |
| 卖方一致预期 | AKShare stock_research_report_em | — | 新增,含未来 3 年 EPS/PE 预测 + PDF URL |
| TTM EPS | 自行计算(不用 yfinance.trailingEps) | — | 见 Step 1.3 |
为什么 A 股行情不再走 yfinance:东财 IP 封禁问题暂时不影响 yfinance(Yahoo 是境外源),但 yfinance 在国内访问偶有抖动 + 字段不全(无 PE 动态/静态、无 5 档、无换手)。腾讯接口稳定 5+ 年、HTTP 公开、字段更全,是 A 股快照的最优主源。
接口报错处理:脚本内置 fallback(A 股腾讯失败自动切 yfinance;baostock 失败也切 yfinance),无需手动干预。yfinance 失败再说明并跳过,用已获取数据继续分析。
分析流程
执行节奏:财报 / 个股分析一轮到位,不挤牙膏(教训:宁德 Q1 分析花 4 轮对话 / 13 次搜索,~40% 浪费在累积 context 重传)。收到"分析 XX"默认就做全套(核心数据对比 + 利润桥逐科目归因 + 资产负债表信号 + 好坏判断 + 可持续性拆解 + 对估值模型 EPS 上/下修影响),不要先给表面数据再等追问才深挖。有财报 PDF 优先 Read 全部报表,WebSearch 只补行业/市场(2-3 次);无 PDF 才并发搜财务(≤6 次,不同质化重复)。wiki 只读一次、规划所有 Edit 锚点后一轮改完,不改完再重读再改。
Step 0: 估值方法选择
为什么是第一步:长城汽车 v1→v2→v3 三轮重写就是因为先选错了估值方法(用 PE 估弱周期成长股),跑完发现合理价偏离市价 -30% 才返工。Step 0 用 5 分钟选对方法,能省下后续 Step 3-7 全部返工的成本——这就是它放在第一步、且不能跳过的原因。
操作顺序(默认走快速通道,决策树仅作兜底):
-
🚀 优先查快速通道(框架.md 默认入口):
- 分析对象的子行业是否在快速通道表中(汽车/啤酒/白酒/水泥/银行/券商/互联网/晶圆代工/光刻机/有色等 13 个已覆盖)?
- 命中 + 业务模式相似 → 直接套用主估值,跳到第 4 步输出
- 命中但业务模式差异大(如长城出海占比 38% vs 长安 22%)→ 套用方法但调整参数,跳到第 4 步
- 何时该 review 而不直接套用:参照标的 wiki 更新 >6 个月 / 重大事件 / 主业占比 <70% → 进入第 2 步重判,避免套用过时假设
-
🌳 未命中走决策树(仅新子行业用,框架.md 兜底入口):
- 拉取近 5-8 年营收 / 销量 / 净利率历史(akshare
stock_financial_abstract + 必要时 WebSearch 补充销量数据)
- 按 5 问决策树判断:
- Q1:行业是否金融?→ 是 → PB 主
- Q2:营收是否单边上行(5-10 年仅 1-2 年微跌 <5%)?是 → 跳 Q4(不问 Q3);否 → 进 Q3
- Q3:销量/产量是否同步周期波动?→ 是 → 真周期股 PB 主
- Q4:净利率是否长期稳态(5 年波动 ≤±20%,剔除单年极端值)?→ 是 → 稳态消费/成长 PE 主
- Q5:以上都否(营收单边 + 净利率周期 ±50%+)→ 弱周期成长 P/S 主
- 阈值口径:净利率波动 =
(max - min) / 中位数(先剔除 >2σ 的单年极端值)
-
特殊规则:主业占比 <70% 时单一主估值会失真——汽车 + 手机部件这种结构应改用 SOTP 分部估值
-
输出主估值 + 1-2 辅助方法
输出格式——记录到 wiki 的"企业类型与估值模型"章节,便于下次复盘时回看本次选了什么方法、为什么:
企业类型:[稳态消费/金融/真周期/弱周期成长/高成长]
主估值:[PE / PB / P/S / PEG]
辅助:[DCF / SOTP / DDM / 中周期 PE]
不适用:[列出明确不能用的方法及原因]
判断依据:[关键 1-2 个数据点,如"营收 8 年 +125% 仅 2019 -3% / 净利率 2-6.3% 区间波动"]
衔接规则:
- 不先做 Step 0 直接进 Step 1,会导致 Step 3 的合理 PE 推导可能完全是浪费——因为可能根本不该用 PE
- 如选 P/S 主,跳过 Step 3(合理 PE 因子推导),直接到 Step 4 P/S 模型
- 如选 PB 主(周期/金融),Step 3 简化为基础 PB 推导
- 如选 PE 主(稳态),按 Step 3 完整推导
- 引用 估值方法选择框架 的子行业 P/S 基准,避免 skill 与 wiki 数据脱节;wiki 没列的子行业自行补充同行可比表
反向健康检查(Step 0 完成后做):
完成 Step 1-7 跑出合理价值后回到 Step 0 做校验——任一项触发就复查方法选择,因为这意味着方法或参数可能选错了:
| 触发条件 | 含义 | 行动 |
|---|
| 合理价值 vs 当前市价偏离 > ±40% | 极有可能方法选错或参数失真 | 重新走 Step 0 决策树 + 复查同行可比 |
| 合理价值 vs 历史 1 年区间外 | 估值锚脱离市场实际定价 | 检查是否用了周期低位 EPS / 主题泡沫期数据 |
| 三模型(P/S/PE/SOTP)差距 > 30% | 主辅模型分歧 | 优先信营收锚(P/S),复查净利率假设 |
| 与"快速通道"参照标的差距 > 50% | 子行业内异常值 | 检查业务模式是否真的可比 |
校验示例(长城汽车 v1 的反例):
- v1 用 TTM PE 跑出合理价 14 元 vs 当前 20.23 元 = -30% 偏离(接近 -40% 阈值)
- 若加了反向健康检查,v1 会被自动拦截,不会等到 v3 才发现问题
Step 1: 获取数据
同时获取以下数据:
-
财务摘要(AKShare):近5年年报 + 最新季度的关键指标
- 营业总收入、归母净利润、经营现金流量净额
- 营业总收入增长率、归属母公司净利润增长率
- 毛利率、销售净利率、净资产收益率(ROE)、总资产报酬率(ROA)
- 基本每股收益、每股净资产、每股现金流
- 资产负债率、流动比率
- 存货周转天数
-
行情数据(A 股走腾讯,港股美股走 yfinance;脚本自动选源):
- 当前股价、PE_TTM/动态PE/静态PE、PB、总/流通市值、换手率、5 档盘口
- 52 周高低、年度高低(来自 baostock 历史 K)
- 股息率、分红历史(A 股从财务摘要算;港股美股从 yfinance.dividends)
-
TTM EPS 自行计算(不使用 yfinance 的 trailingEps):
- 公式:TTM净利润 = 最新累计 + 上年未覆盖季度(如:前三季累计 + 上年Q4)
- 1-4月用上年全年EPS;5-8月用最新累计+上年后续季度补齐;9-12月用前三季+上年Q4
- 注意季节性(啤酒Q4亏损、白酒Q4最强),TTM自动平滑
-
每股净资产(用于PB计算):优先使用最新季报的每股净资产,不用年报数据。券商等金融股净资产变动较快,用滞后数据会导致PB失真。
-
同行数据(AKShare):同行业2-3家核心公司的财务摘要,用于横向对比
Step 1B: 利润表分解与EPS基线(按需触发)
详细子流程见 references/step-1b-profit-decomposition.md。
何时执行(满足任一):
- 归母净利润与扣非净利润偏差 > 15%
- 存在终止经营/剥离业务
- 投资收益 / 公允价值变动占净利润比例 > 10%
- AKShare 的毛利率与 (1 - 营业成本/营业总收入) 计算值不一致
- 公司有大额 SBC(科技/CXO/创新药常见)
何时跳过:归母与扣非接近(偏差 < 10%)、利润结构简单的成熟企业(如茅台、海天)。
为什么单独成 Step:AKShare 只给汇总指标(毛利率、净利率),看不到利润表每行。复杂利润结构的公司仅靠汇总指标会让 EPS 基线失真——本 Step 通过读年报利润表逐行拆解,建立真实经营利润基线,输出选定的 EPS 值作为后续 Step 3(PE 模型)和 Step 4B(远期分析)的输入。
子步骤概要(详见 references):
- 1B.1 获取年报利润表逐行数据
- 1B.2 利润瀑布图(含真实毛利率、经营毛利)
- 1B.3 非经常性损益桥接(归母 → 扣非 → 经调整)
- 1B.4 核心经营利润验证(核心归母 ≈ 扣非归母,偏差 < 1%)
- 1B.5 利润驱动因子排序(前 5 大 driver)
- 1B.6 EPS 基线决策(归母 / 扣非 / 持续经营口径选哪个)
Step 2: 财务质量评估
对以下维度逐项评分,每项给出具体数据支撑:
盈利能力:
- 毛利率水平及5年稳定性
- 净利率水平及趋势
- ROE水平及趋势(杜邦分解:利润率 × 周转率 × 杠杆)
成长性:
- 近3年营收复合增速
- 近3年净利润复合增速
- 增速趋势(加速/稳定/减速)
现金流质量:
- 经营现金流 / 净利润(>1为优)
- 自由现金流是否充裕
财务安全:
- 资产负债率(<40%为优,<60%为良)
- 流动比率(>2为优,>1.5为良)
- 有息负债占比
本节是快速评分。现金流与资产负债表的深挖(OCF-净利勾稽归因 / 正常化 FCF / 净现金 + 扣现金估值 / 营运资本质量)见 Step 2D——现金大户、有财务公司类金融子公司、OCF 与净利背离时触发。现金流陷阱判据口径以 价值陷阱排雷.md 第二层为 single source。
分红能力:
Step 2B: 业务结构 + 竞争对手完整性 mapping(首次建档强制 + 按需刷新)
为什么是强制步骤:地平线机器人 v1 ingest 漏了地瓜机器人(全资子公司、独立 1 亿美元 A 轮)和 Momenta(HSD 方案层直接对手 + 港股 IPO 同期对手),导致 SOTP 严重低估非车业务 33 亿 → 95-130 亿 HKD 区间漏估、行业格局缺关键对手,主对话连续 6 轮 query + 3 轮 wiki 修订(v1.1 verify → v1.2 SOTP 重估 → v1.3 行业格局补全)才追平。
前置 mapping 防止下游返工,逻辑与 Step 0 同源:在 Step 2 财务质量评估后做完两个 mapping,能省下后续多轮 wiki 修订成本。
何时执行 vs 何时跳过:
| 场景 | 是否执行 | 理由 |
|---|
| 首次建档(wiki 不存在) | ✅ 强制执行 | 没有 Step 2B 就无法做 SOTP,行业格局也容易漏对手 |
| 估值章节大改(如新 P/S 范式 / SOTP 重估) | ✅ 强制执行 | 估值方法变了,分部和对手 mapping 都要重做 |
| 季报数据更新(不变估值方法) | ⚠️ 按需:距上次 Step 2B > 6 个月才刷新 | 业务结构相对稳定,但需周期性刷新 |
| 锚点修订 < 10% | ❌ 跳过 | 微调不涉及业务结构变化 |
| 业务结构稳定 18 个月无变化(茅台/招行/中信类) | ❌ 跳过 + wiki 标注"2B 上次刷新日期" | 稳态业务不需每次重做 |
实际工作量:业务简单 + 对手清晰的标的(如茅台、海螺)做 happy path 约 15-20 分钟;多分部 + 多维对手的复杂标的(如平安、地平线)做完整 mapping 约 30-45 分钟。
操作顺序:
- 业务结构完整性 mapping(2B.1)
- 竞争对手多维度 mapping(2B.2)
- 反向 sanity check(2B.3)
- 输出 → 喂给 Step 4 SOTP(分部估值输入)+ wiki "业务全景" / "行业格局" 章节
2B.1 业务结构完整性 mapping(4 个维度强制查)
| 维度 | 检查问题 | 数据源 | Fail 条件 |
|---|
| 合并报表层子公司 | 公司是否有独立运营 / 独立融资 / 独立 IPO 的全/控股子公司?是否在 SOTP 单独建分部? | 年报"子公司列表" + WebSearch "{公司名} 子公司 分拆 融资" | 漏报独立融资 / 独立估值的子公司 |
| 战略持股层 | 公司是否持有 ≥ 20% 关联公司 / 合资公司?这些股权是否在 SOTP 单独估值? | 年报"长期股权投资" + WebSearch "{公司名} 合资 持股" | 漏报 ≥ 20% 持股的合资公司 |
| 不产生营收但有期权价值的资产 | 开源项目 / 平台 / 数据资产 / 牌照 / IP 储备 | 公司新闻稿、CEO 公开讲话、产品发布会 | 漏报已发布且具战略意义的不产生营收资产 |
| 分部营收 ≥ 5% 单列 | 年报披露的分部营收是否每一块都拆?任何 ≥ 5% 营收的分部是否单列? | 年报"分部信息" | 把 ≥ 5% 营收的分部笼统归类为"其他" |
输出:业务结构地图(树状图)
{公司名} ({代码})
├─ 上市公司主体
│ ├─ 分部 1: XX 业务 (NN.N% 营收)
│ ├─ 分部 2: XX 业务 (NN.N% 营收)
│ └─ 分部 N: XX 业务 (≥ 5% 营收必须单列)
├─ 全资/控股子公司
│ └─ {子公司名} (持股 N%, 独立融资估值如有)
├─ 战略持股 ≥ 20%
│ └─ {合资公司名} (持股 N%, 估值锚)
└─ 不产生营收但有期权价值
├─ {资产 1: 开源/牌照/数据}
└─ {资产 2: 同上}
2B.2 竞争对手多维度 mapping
两层维度结构:
- 基础 2 维(强制列):产品/技术层 + 方案/服务层
- 扩展 2 维(按需触发):客户层 + 资本/IPO 同期
- 行业特定维度(按需补充):见下方"行业差异化维度"
基础 2 维(任何标的都必须列):
| 维度 | 含义 | 应列对手 | Fail 条件 |
|---|
| 产品/技术层 | 谁卖同样的硬件/产品/服务?同类市场份额排名 | 直接对手 + CR3/CR5 | 漏报排名前 3 的同类产品对手 |
| 方案/服务层 | 谁交付同样的整套方案(含算法+服务)?可能不卖硬件,只卖软件+服务 | 整体方案商对手 | 漏报方案层主要对手——这是 v1 ingest 最容易漏的维度,因为"硬件出货排名表"看不到纯软件对手 |
扩展 2 维(按触发条件列,避免强行凑数):
| 维度 | 含义 | 触发条件 | Fail 条件 |
|---|
| 客户层 | 谁抢同一个客户预算?包括客户自研团队 | 客户集中度 > 30%(CR3 客户营收占比)或客户已宣布自研 | 触发情况下漏报关键客户自研动态 |
| 资本/IPO 同期 | 谁同期上市 / 融资?估值倍数对比 | 所在子行业近 12 个月有 ≥ 1 家同期 IPO 公司 | 触发情况下漏报同期 IPO 对估值锚的冲击 |
行业差异化维度(应根据行业特点补充):
基础 2 维 + 扩展 2 维是最低要求,主作者应根据行业特点补充其他维度——例如:
| 行业类型 | 建议补充维度 |
|---|
| 周期股(钢铁/煤炭/水泥) | 产能区域:同一区域产能集中度、运距决定的市场分割 |
| 银行 | 同质化产品:存款/贷款/理财业务的零和竞争对手 |
| 消费品 | 价格带:同一价格段消费者预算共享对手(如茅台 vs 五粮液) |
| 汽车 | 价格带 + 渠道:4S 店覆盖 + 电商渠道(如比亚迪 vs 吉利) |
| 互联网平台 | 用户时长:用户注意力共享对手(如美团 vs 抖音本地生活) |
| 医药 | 同适应症:FDA / NMPA 同适应症已上市药 + 在研管线 |
不强求每个标的都凑齐 N 维度——结构合理 > 维度数量。
输出:对手 mapping 表 + 数据源 URL(每个对手必须有 ≥ 1 个数据源支撑)
| 维度 | 对手 1 | 对手 2 | 数据源 URL |
|---|---|---|---|
| 产品/技术层 | {名} ({份额}) | {名} ({份额}) | {URL} |
| 方案/服务层 | {名} | {名} | {URL} |
| 客户层(如触发)| {客户自研团队} | {第三方供应商} | {URL} |
| 资本同期(如触发)| {同期 IPO 公司} ({估值}) | — | {URL} |
| 行业特定(如适用)| {对手} | {对手} | {URL} |
2B.3 反向 sanity check(30 秒自查)
完成 2B.1 + 2B.2 后做以下 self-check,任一项触发就回去补:
| 自查项 | 触发问题 |
|---|
| 业务地图里 ≥ 5% 营收的分部是否都列了? | 漏 1 个就回去补 |
| 基础 2 维对手(产品层+方案层)是否每维至少 1 个? | 任一维为空,强制 WebSearch 补充 |
| 扩展 2 维触发条件是否检查(客户集中度 > 30% / 同期 IPO)? | 触发但未列,强制 WebSearch 补充 |
| 子公司是否独立估值? | 不能粗略归"其他业务 × P/S",必须单独锚定 |
| 战略持股是否独立估值? | 不能笼统并入主业,要给独立期权价值 |
反向 case 提醒(地平线 v1 失败案例,作为本步骤的"反面教材"):
| 漏 # | 内容 | 后果 | 应在 2B 哪一节捕捉 |
|---|
| 1 | 地瓜机器人是全资子公司 + 独立 1 亿美元 A 轮融资 | SOTP 漏 60-100 亿 HKD 估值 | 2B.1 合并报表层子公司 |
| 2 | HoloBrain / HoloMotion 是不产生营收的期权资产 | 长期护城河漏估 | 2B.1 不产生营收但有期权价值 |
| 3 | Momenta 是 HSD 直接对手(方案层)+ 港股 IPO 估值压制(资本同期) | 行业格局缺 / P/S 锚未校准 | 2B.2 方案层 + 资本同期 |
2B.4 输出落地
| 输出 | 喂给哪个 Step |
|---|
| 业务结构地图 | Step 4 SOTP(分部估值的完整列表)+ wiki "业务全景" |
| 对手 mapping(基础 2 维 + 扩展/行业维度如触发) | Step 4 P/S 同业可比表(含交叉业务模式对手)+ wiki "行业格局" |
| 客户层 / 资本同期对手(如触发) | Step 4-6 风险章节 + wiki "风险点" |
重要约束:Step 4 SOTP 输入必须从 2B.1 业务结构地图取——不允许 Step 4 "自己想到哪些分部就估哪些",避免遗漏。
Step 2C: 质化深度评估(按企业类型差异化执行)
为什么是独立步骤:地平线 v1-v1.3 wiki 漏报了创始团队(余凯+黄畅"百度 IDL 系" 11+ 年稳定)+ 人才密度(研发占比 73.1% 接近 Mobileye 80%)+ 研发投入演化(2025 研发增速首次反超营收 +5.6pct 是反向运营杠杆拐点),直到 v1.4 用户 query 才补——这些是不易量化但影响长期估值 5-10pct 的质化深度维度。Step 2B 防"覆盖完整",Step 2C 防"质化深度遗漏"。
核心契约:质化深度评估按企业类型差异化——不同企业类型查不同维度,不允许"创始团队"框架硬套央国企(结构性错位)。
2C.1 企业类型质化分级(治理结构维度,独立于 Step 0)
| 企业类型 | 质化深度依赖 | 核心查什么 | 不查什么 |
|---|
| AI / 科技创业型 | ★★★(强必查) | 创始人 + CTO 履历 / 人才密度 / 团队稳定性 / 战略 vision / 文化 | — |
| 民营成长股(一代+接班) | ★★(中度查) | 创始人风格 / 二代接班准备 / 员工激励 / 文化 | 团队稳定性(已稳态) |
| 民营巨头(创始团队已退) | ★(选查) | 接班传承稳定性 / 公司治理 / 大股东动作 | 创始人个人色彩 |
| 股份制金融 / 券商 / 保险 | ★★(特殊) | 合规文化 / 风控体系 / 高管稳定性 / 重大处罚 | 创始人 |
| 央国企 | ★(特殊查,框架完全不同) | 政策定位 / 国资委战略 / 上级部门关系 / 高管轮换节奏 / 股息率政策 | 创始人 / 团队稳定性(结构性错位) |
| 真周期 / 资源股 | ☆(按需) | 管理层成本控制能力 / 周期高峰扩张能力 | 创始团队个人色彩 |
与 Step 0 的关系(重要):
Step 0 7 类(按估值方法分:现金牛 / 利润改善 / 高成长 / 真周期 / 弱周期成长 / 高分红 / 困境反转)和 Step 2C 6 类(按治理结构分)维度正交——同一标的可能 Step 0 是"高成长型 PE 主"+ Step 2C 是"AI 科技创业型强质化"(如地平线);也可能 Step 0 是"高分红型 DDM 主"+ Step 2C 是"央国企质化"(如中移动 / 长江电力)。Step 2C 不是 Step 0 的延伸,而是独立的治理结构评估维度。
判断方法(6 类全覆盖):
| 判断条件 | → 质化框架 |
|---|
| 实控人是国资委 / 央企集团 / 国务院国资委 | → 央国企质化 |
| 主营银行 / 券商 / 保险 / 信托 + 制度化运营 | → 金融质化(即使实控人是央企,金融业特殊性强,优先金融质化) |
| 主营钢铁/煤炭/水泥/有色/化工/猪肉 + 营收随商品价格大幅波动 | → 真周期质化 |
| 主营 AI/芯片/具身智能 + 上市 < 10 年 + 科技 founder 仍任 CEO(学术/技术背景为主) | → AI 科技创业型强质化 |
| 个人/家族 ≥ 30% 控股 + 创始人在位 CEO 或董事长(实质控制) | → 民营成长股中质化 |
| 个人/家族 ≥ 30% 控股 + 创始人已退(不任 CEO 也不任董事长) | → 民营巨头弱质化 |
边缘 case 处理(避免分类困难时无所适从):
| Case | 处理方式 |
|---|
| 创始人退任 CEO 但仍任董事长(如比亚迪王传福 / 海尔张瑞敏退 CEO 转董事长一段时间) | 视为"创始人在位" → 民营成长股中质化(实质控制力还在) |
| 股份制银行实控人是央企集团(如招商银行 = 招商局集团) | 优先金融质化(金融业制度化运营 > 央企体制) |
| 港股科技股(腾讯 / 阿里) | 创始人色彩仍重但已巨头 → 民营巨头弱质化 + 创始人传承补充查(如马云退后阿里"合伙人制度"是否稳定) |
| A+H 双重上市的央企(如紫金 H、招行 H、中信 H) | 看实控人决定(实控人央企 = 央国企质化,无论上市地) |
| 混改企业(联通 + BAT 战投 / 光大集团等) | 实控人仍国资委 → 央国企质化为主 + 加注混改进度 |
| 科创板硬科技股(半导体设备 / 创新药 CXO) | 创始人若仍 CEO → AI 科技创业型强质化(即使上市 > 10 年,业务高成长性是核心) |
2C.2 六套差异化清单
强质化(创业型科技)—— 5 项必查:
- 创始人 + CTO 学术 + 大厂背景(IDL/百度/字节/华为等"黄埔系")
- 团队稳定性(5+ 年核心不变 / 重大离职事件 / 内部组织变动)
- 人才密度(员工总数 / 研发占比 / 人均薪酬)
- 校友网络 / 学术派系(清华系 / 中科院系 / IDL 系 / 阿里系)
- 战略 vision 一致性(CEO 多次公开发言连贯性 / 战略调整频次)
中质化(民营成长股)—— 4 项查:
- 创始人风格 + 行业地位(如王传福理工男 / 张瑞敏管理型 / 江南春销售型)
- 接班准备(二代接班 / 职业经理人)—— 这是民营企业最大单一变量
- 员工激励(股权 / 期权 / 限制性股票占比 + 兑现节奏)
- 文化关键词("狼性"/"敬天爱人"/"客户第一" 等)+ 体现度
弱质化(民营巨头)—— 3 项查:
- 接班传承稳定性(已经过几次 CEO 更替 / 平稳过渡?)
- 公司治理(独董比例 / 大股东占比 / 关联交易披露)
- 大股东动作(近 12 个月减持 / 增持 / 质押)
金融质化—— 4 项查:
- 合规文化(近 3 年重大处罚 / 内控事件 / 投诉率 vs 同业)
- 风控体系(银行:不良率 / 拨备 vs 同业;保险:COR / 偿付能力;券商:自营风控)
- 高管稳定性(行业正常轮换 vs 自身节奏;近 12 个月有无高管离职潮)
- 主要股东动作(大股东增减持 / 战投退出)
央国企质化—— 6 项查(与创始人框架完全不同):
⚠️ 结构性约束:央企管理层 = 国资委任命,3-5 年轮换是正常节奏。不查"创始团队"(结构性错位)。"创始人"对央企不存在(中移动来自电信拆分 / 中建来自建工部转制 / 中信证券是央企背景)。
- 政策定位:公司在国家战略中扮演什么角色?被列入哪些重大文件?(例:中移动是"算力国家队"+"东数西算" / 中建是基建主力 / 长江电力是"双碳能源" / 紫金 H 是"全球矿业第二")
- 国资委战略:主管部门 / 业绩考核口径 / 重组方向(如国资委央企总数 98 → 计划压缩到 80 / "市值管理"考核 KPI)
- 股息率政策:上级要求分红率 / 历史分红率 / 长期承诺(如国资委 2024 要求央企分红率 ≥ 70% / 长江电力 70%+ / 中神华 75%+)
- 上级部门关系:行业部委定价权 / 财政部分红权 / 国务院直接管的特殊性
- 高管轮换节奏:3-5 年常规 vs 异常信号(多任董事长同时退?董事长任期 < 2 年频繁更替?)
- 重大事件背景:政策驱动还是市场驱动?(影响估值锚的来源)
真周期质化—— 2 项查:
- 管理层成本控制能力(低谷期 OPEX 反应速度 / 砍 CapEx 决断力)
- 周期高峰扩张能力(是否过度举债 / 海外并购质量 / 套保策略)
2C.3 输出落地
| 评估输出 | 喂给哪个 wiki 章节 |
|---|
| 强/中质化结果 | 护城河章节"创始团队 + 人才密度"小节 |
| 央国企质化 | 护城河章节"政策定位 + 央企战略"小节(替代而非附加"创始团队"小节) |
| 金融质化 | 风险章节"合规文化 + 风控体系"小节 |
| 真周期质化 | 风险章节"管理层周期反应"小节 |
重要约束:质化深度评估是质化加分/减分项,不直接修改 SOTP 或 P/S 锚——但可强化护城河评级 + 新增风险维度。如果发现重大组织/治理 red flag(如高管集体离职、合规重大处罚、二代接班失败),可作为安全边际提升 5-10pct的依据。
2C.4 何时执行 vs 何时跳过
| 场景 | 是否执行 |
|---|
| 首次建档(wiki 不存在) | ✅ 强制执行 |
| 估值章节大改 | ✅ 强制执行 |
| 季报数据更新(不变估值方法) | ⚠️ 按需:距上次 2C > 12 个月才刷新(质化数据变化慢) |
| 锚点修订 < 10% | ❌ 跳过 |
| 已建档 wiki retrospective 补全 | ⚠️ 按需 |
硬触发条件(任一发生 → 即使距上次 < 12 个月也强制重做 Step 2C,不允许"业务结构稳定"借口跳过):
| 事件 | 影响 | 适用类型 |
|---|
| 创始人 / CEO 离任 / 任职变动 | 核心治理变化 | 强 / 中 / 弱质化 |
| 核心高管 / CTO 离职 | 团队稳定性变化 | 强 / 中质化 |
| 高管集体离职潮(3 个月内 ≥ 3 名高管离任) | 重大组织变动 | 所有类型 |
| 重大合规处罚 / 内控事件(监管立案 / 罚款 ≥ 千万) | 合规文化恶化 | 金融质化 / 上市公司 |
| 大股东重大减持(≥ 1% 股本 / 一次性套现 ≥ 5 亿) | 治理变化 | 民营巨头 / 中质化 |
| 战投退出 / 股权激励大规模行权 | 激励机制变化 | 中质化 |
| 国资委政策文件涉及该公司(重组 / 整合 / 分拆) | 政策驱动变化 | 央国企质化 |
| 周期高峰 / 低谷的重大决策(海外并购 / 砍 CapEx 决断) | 周期反应能力体现 | 真周期质化 |
实际工作量(实测):
- 央国企 / 真周期质化:20-30 分钟(要看政策文件 + 国资委公告 + 周期数据,比想象的慢)
- 民营巨头弱质化 / 中质化:25-35 分钟(接班传承 + 治理结构 + 大股东动作)
- 强质化(AI 创业型)/ 金融质化:30-60 分钟(要查创始人/CTO 背景 + 内部组织动态 + 合规历史)
Step 2D: 现金流与资产负债表质量深挖(按需触发)
详细子流程见 references/step-2d-cashflow-balancesheet.md。
为什么单独成 Step:对称于 Step 1B(利润表逐行分解)——1B 深挖利润表,2D 深挖现金流量表 + 资产负债表。AKShare 汇总只给"OCF/净利""资产负债率"裸评分,看不到逐行。茅台 v1.2 重估(2026-06-04)暴露三个盲点:① 2025 OCF -33% 实为控股财务公司"吸收集团成员存款减少"的会计扰动(年报 p.6 明确归因),裸评分会误判主业现金恶化;② 净现金 ~1700 亿 / 136 元/股(占股价 11%)的下行托底 + 趴账现金折价/催化全漏;③ DCF 1130-1340 区间过宽,因 FCF 没正常化。本 Step 建立真实现金生成基线 + 净现金口径,喂 Step 4 DCF(正常化 FCF)/ Step 6 安全边际(下行托底校验)。
single source(不重复定义口径):OCF/净利含量、自由现金流、分红/FCF 覆盖度的判据与门槛以 价值陷阱排雷.md 第二层(line 75-111)为 single source。2D 只做"个股化深挖 + 喂估值",不另立口径,避免两份文档漂移(同 CLAUDE.md single-source 原则)。
何时执行(满足任一):
- 货币资金 + 类现金金融资产 占总资产 ≥ 20%(现金大户)
- OCF/净利润 近 3 年均值 < 0.85 或 > 1.2,或任一年 < 0.6 / > 1.5(极端单年;用均值滤季节噪音、极端单年兜真异常)
- 合并报表含财务公司 / 类金融子公司(出现"吸收存款 / 拆出资金 / 发放贷款及垫款"科目)——注意这是实业主业 + 财务公司(如茅台),是 2D 的核心目标客户,非金融股
- 合同负债 / 预收款 大幅波动(> ±30% YoY)且影响 OCF
- DCF 被赋予 ≥ 30% 定价权重 且 现金占比 > 15%(纯参考型 DCF 不触发整套,只调用 2D.2 的正常化 FCF 单项)
何时跳过:
- 主业即金融(银行 / 券商 / 保险,Step 0 判为金融型)→ 跳过整套(现金概念完全不同,走 PB/DDM)。判定锚点用 Step 0 企业类型,不是"是否出现吸收存款科目"——否则茅台这类实业+财务公司会被误判跳过
- 轻资产 + 净利 ≈ OCF(近 3 年 OCF/净利 0.85-1.2)+ 无金融子公司 + 现金占比 < 15% 的简单标的
- 锚点修订 < 10% / 30 天内已做过 2D
口径契约(硬约束,防双重计算):
| 维度 | 口径 | 用途 |
|---|
| 四档锚点(合理价值/买入/减仓/清仓) | 含现金 PE 口径 | 与个股历史 PE 中枢同口径可比,是定锚唯一依据 |
| 净现金 / 扣现金 PE / 扣现金 EV | 辅助维度 | (a) 判经营主业贵贱;(b) Step 6/8 事后交叉验证下行托底;(c) 识别趴账折价/催化 |
硬规则(净现金只当安全边际,不抬估值):净现金 / 扣现金 EV 不进合理价值、不上调任何锚点或安全边际比例,只作 ① 下行托底校验(如"悲观价对应主业 EV 是否已便宜")② 主业贵贱判断。资本返还催化(公司明确启动特别分红 / 大幅提分红率时)只作为独立的"价值兑现路径"叙事写进催化章节(净现金 × 3-5 折估解锁空间),同样不计入合理价值 / 四档锚点。
子步骤概要(详见 references):
- 2D.1 OCF-净利润勾稽 + 收现比 + 营运资本质量:OCF/净利 3 年趋势 + 背离归因(营运资本 / 合同负债 swing / 财务公司存款流 / 大额非现金项);收现比(销售商品收到的现金 / 营收)作背离归因抓手;应收 / 存货 / 应付周转趋势 + 营运资本占用率。破除裸评分误读。
- 2D.2 正常化 FCF + 分红覆盖:OCF − 维持性 capex(剔扩张性,维持性 ≈ 近 3-5 年折旧摊销均值代理 + confidence 标注)− 一次性营运资本扰动 / 金融子公司流;输出正常化 FCF 喂 Step 4 DCF;算分红 / 正常化 FCF 覆盖度([价值陷阱排雷] 判据,> 1 = 借钱分红陷阱)。
- 2D.3 净现金口径:现金 + 类现金金融资产 − 有息负债 − 金融子公司对外负债(吸收存款)− 受限/质押货币资金 − 少数股东归属;逐项列 + 占总资产/市值 %。金融子公司口径提醒(拆出资金 = 自有现金塞财务公司赚息 = 资产;吸收存款 = 对集团成员负债 = 扣减项)。优先读年报合并资产负债表正表(MD&A 变动表会漏科目,如茅台买入返售 88.80 亿不在变动表)。
- 2D.4 扣现金估值:扣现金 PE = (市值 − 净现金) / (净利 − 现金税后收益),分子分母同口径(必剔现金收益,否则虚低);判主业贵贱。重申口径契约。
- 2D.5 净现金双重角色:① 下行托底(喂 Step 6.6:净现金/股 ÷ 股价 = 资产安全垫;悲观价对应扣现金 EV 校验;受限资金不算可支配托底);② 趴账折价/催化(低收益现金被表观倍数低估;资本返还加速可解锁,3-5 折估)。
输出落地:
| 输出 | 喂给 |
|---|
| 正常化 FCF | Step 4 DCF(当期 FCF 基数;4B 远期利润与 DCF 平行,不在 FCF 基数层互喂) |
| 分红 / 正常化 FCF 覆盖度 | Step 2 财务质量 / 风险(价值陷阱判据) |
| 净现金/股 + 扣现金 EV | Step 6 安全边际(下行托底校验,不改四档主锚口径) |
| 趴账折价 / 催化 | wiki 风险 / 催化章节 |
| 全部 | 输出模板"净现金与现金流质量"小节 |
实际工作量:现金大户 / 有财务公司标的 15-25 分钟;简单标的直接跳过。
Step 3: 合理PE定价模型(按需触发)
详细子流程见 references/step-3-pe-factors.md。
何时执行:仅当 Step 0 判定主估值 = PE 时执行本节。
何时跳过:
- P/S 主估值(弱周期成长,如汽车/家电)→ 跳到 Step 4 的 P/S 模型
- PB 主估值(真周期/金融)→ 跳到 Step 4 的 PB 模型
- PEG 主估值(高成长)→ 跳到 Step 4 的 PEG 模型
为什么需要因子推导:单纯查"消费 20x / 周期 8x"行业基础 PE 不足以反映个股差异。同样可选消费基础 PE 15x,茅台护城河+ROE+品牌力堆叠后合理 PE 可到 22x,普通家电股可能反而是 13x——靠的就是因子加减。
合理 PE 公式:
合理PE = 行业基础PE + 加分合计 + 减分合计
下限保护 8x(避免基本面尚可的公司被打到地板价);上限保护 50x(防过度乐观)。
子步骤概要(详见 references):
- 3.1 行业基础 PE(11 类行业基准表)
- 3.2 加分因子(护城河 / ROE / 现金流 / 成长 / 分红)
- 3.3 减分因子(财务风险:增速 / 现金流 / 负债 / 应收)
- 3.4 减分因子(行业风险:白酒 / 医药 / 科技 / 地产 / 周期 / 金融 各自预设)
- 3.5 公司特有风险微调
- 3.6 合理 PE 计算(含上下限保护)
Step 4: 多模型估值与交叉验证
详细子流程见 references/step-4-multi-model.md。
为什么需要多模型:单一估值方法对不同企业类型适用度不同——茅台用 DCF 比 PE 更稳,长江电力用 DDM 比 PE 准,长城汽车用 P/S 比 PE 准。Step 0 已选定主估值,Step 4 把主估值与 1-2 个辅助模型加权交叉验证,避免单一假设失真。
7 类企业 → 主+辅模型对应表(详见 references 4.1):
| 企业类型 | 主模型 | 辅助 |
|---|
| 现金牛型(茅台、长电) | PE | DCF(高可靠性,等权) |
| 利润改善型(青啤、海天转型期) | PE | DCF(参考) |
| 高成长型(早期新能源) | PEG | PE 校验 |
| 真周期型(钢铁/煤炭/水泥) | PB | PE 仅周期底部参考 |
| 弱周期成长型 ★(汽车/家电) | P/S | 中周期 PE + SOTP(三模型加权 50/30/20) |
| 高分红型(银行、高速公路) | DDM | PE(等权) |
| 困境反转型 | 目标利润 × 合理 PE | — |
关键交叉验证规则(详见 references 4.3):
- 模型间差距 > 30% → 检查假设是否合理,报告中说明分歧
- 弱周期成长股三模型差距 > 50% → 强制复查可比表 / 净利率假设 / SOTP 分部
- 综合估值 vs 市场实际定价偏离 > ±20% → 触发 Step 0 反向健康检查
注意:本节是 Step 0 判完类后的"查表确认",不是独立判类——若与 Step 0 矛盾,回到 Step 0 重判,不在 Step 4 自行改变主估值。
SOTP 分部来源契约:如果主估值或辅助方法使用 SOTP(如弱周期成长股 / 主业占比 < 70%),分部列表必须从 Step 2B.1 业务结构地图取——不允许 Step 4 自行枚举分部,避免遗漏独立融资子公司 / 战略持股 / 不产生营收的期权资产(地平线 v1 SOTP 漏地瓜机器人就是此约束未建立时的反例)。同样,同业可比 P/S 表必须包含 Step 2B.2 中"产品/技术层"和"方案/服务层"两维对手——不允许只列同质对手。
DCF 的正常化 FCF 来源契约:若使用 DCF,其当期 FCF 基数必须取自 Step 2D.2 的正常化 FCF(剔一次性营运资本扰动 + 金融子公司现金流 + 区分维持性/扩张性 capex),不允许直接用未正常化的当年 OCF−capex(茅台 DCF 区间 1130-1340 过宽就是没正常化的反例)。DCF 与 Step 4B 是平行的两个辅助模型:4B 的远期利润不直接喂 DCF 的 FCF 基数(一个是现金口径、一个是利润口径),两者只在 Step 4B.6 的加权综合层面交叉验证,不在 FCF 基数层互喂,避免口径串味。超额净现金不进 SOTP——现金类资产走 Step 2D.5 折价处理(下行托底 + 趴账折价/催化),不作为 SOTP 分部,避免与净现金托底重复计价。
Step 4B: 远期分析(1-2年前瞻估值,按需触发)
详细子流程见 references/step-4b-forward-analysis.md。
何时执行(任一):
- 公司正在经历业务结构显著变化(新业务收入占比快速提升或下降)
- 存在已知的临时性费用/收入(闪购补贴、一次性减值、并购整合费用)
- 核心业务增速与新业务增速方向相反(如电商放缓但云加速)
- 当前 PE 因临时因素显著偏离合理 PE
- 弱周期成长型企业(汽车/家电/部分制造)—— 营收单边上行但利润率周期波动,远期分析重点是营收建模,配合 Step 4 P/S 主估值
何时跳过:
- 业务结构稳定、增速平稳的成熟企业(如茅台、长江电力),静态 PE 足够
- 真周期型企业(煤炭、钢铁、猪肉、大宗化工)—— 利润随行业周期大幅波动,1-2 年线性外推会严重失真。周期股用 PB 定价+周期位置判断即可
为什么单独成 Step:静态 PE 模型用的是 TTM/最近年报 EPS。对业务结构正在变化的公司(AI 转型、新业务放量、补贴退出),TTM EPS 不代表稳态盈利能力——本 Step 通过分业务建模估算 1-2 年后的利润水平和合理 PE,折现回当前与静态模型交叉验证。
子步骤概要(详见 references):
- 4B.1 分业务营收建模(3-5 个板块,FY+1/FY+2 增速)
- 4B.2 利润率预测(按板块 OPM)
- 4B.3 远期 EPS 计算(含 SBC、回购)
- 4B.4 因子调整 SOTP PE(增速调整 + 因子吸收审查)
- 4B.5 远期目标价与隐含回报率(含息年化)
- 4B.6 与静态模型交叉验证(综合估值 = 静态 40% + FY+1 40% + FY+2 20%)
- 4B.7b 底部 P&L 重建交叉验证(前置条件:Step 1B 已执行)
Step 4C: 格雷厄姆参考尺(可选)
纯参考,不影响 Step 6/7/8 的任何结论。详细公式、7 条清单、输出格式见 references/graham-filter.md。
触发:Step 4B 之后、Step 5 之前。跳过条件:亏损股 / BVPS 为负 / 金融股。
Step 5: 预期差评估
市场下跌的核心驱动力不是"基本面差",而是"基本面比预期差"。同样的6%增速,如果市场原本预期18%,PE会暴跌;如果市场原本就预期5%,PE反而可能稳住。安全边际的宽窄应该反映这种预期差风险。
5.1 判断当前PE隐含的增长预期
将当前PE与不同增速假设下的"合理PE"对比,反推市场在定价什么水平的增长:
当前PE对应的隐含增速 ≈ 查看合理PE模型中,需要什么增速假设才能得到当前PE
示例(茅台):
- 当前PE 20x,模型中增速18%时合理PE=29x,增速6%时合理PE=22x
- 当前20x < 22x → 市场甚至在定价比6%更差的预期
- 说明悲观预期已经充分Price in
5.2 逐季度增速趋势分析
不只看最新一期增速,而是看趋势方向:
5.3 预期差分类
综合当前PE位置和增速趋势,判断预期差状态:
| 状态 | 条件 | 含义 | 对安全边际的影响 |
|---|
| 预期过高 | 当前PE > 合理PE × 1.1,且增速在减速 | 市场还没反应过来,下行风险大 | 安全边际比例 +10%(更严格) |
| 预期合理 | 当前PE 在合理PE ±10%范围内 | 市场定价基本到位 | 安全边际比例 不调整 |
| 预期偏低 | 当前PE < 合理PE × 0.9,且增速稳定或加速 | 市场过度悲观 | 安全边际比例 -5%(可适当放宽) |
| 预期已崩 | 当前PE < 合理PE × 0.8,增速减速但未失速 | 最坏预期已充分反映 | 安全边际比例 -5%,且标注"悲观预期已Price in,进一步大跌概率较低" |
| 基本面恶化 | 增速失速(单季<3%或负增长),且趋势未见拐点 | 不确定是否见底 | 安全边际比例 +5%,并标注"趋势未明,建议观望或小仓试探" |
5.4 预期差调整示例
茅台2024年初(回测):
- 当时PE约30x,合理PE 29x → 预期合理
- 但增速处于减速初期(尚未反映在PE中)
- 判定:预期过高(PE还在定价18%增速,实际已开始减速)
- 安全边际 +10% → 从20%变为30%
茅台当前(2026年4月):
- 当前PE 20x,合理PE 22x → 当前PE < 合理PE × 0.9
- 增速减速中(25Q3单季仅0.3%),但属于"失速"级别
- 判定:基本面恶化 vs 预期已崩 的边界
- 如果认为0.3%是季节性/一次性 → 预期已崩,安全边际-5%
- 如果认为是趋势性恶化 → 基本面恶化,安全边际+5%
- 需要4月17日年报Q4数据来判断 → 当前暂按"预期偏低"处理,安全边际不调整,但标注不确定性
5.5 市场定价校验
预期差评估关注的是"当前PE vs 合理PE"的瞬时偏差。但如果市场长期给出的PE中枢远低于模型合理PE,需要反思模型是否偏乐观。
校验方法:用 baostock 日级 peTTM 直接算近半年中枢
fetch_data.py 的 calc_pe_band(df) 在 df 含 peTTM 列时(baostock 数据),会自动输出:
- 全样本 PE 中位 / P25 / P75 / min / max
- 按年的 PE 中位与价格区间
- 近半年 PE 中枢(120 个交易日)
- 当前 PE
- 同步给出 PB 区间
无需手填 TTM EPS——baostock 已按日做完 TTM 计算。直接读 recent_pe.median() 即"近半年 PE 中枢"。
(港股/美股仍走旧逻辑:yfinance 取年高低价 + 手填 EPS 反推 PE。)
校验流程:发现分歧 → 分析原因 → 判断谁对 → 决定修正
第一步:量化分歧程度
| 市场PE中枢 vs 模型合理PE | 分歧程度 |
|---|
| 偏差在 +/-15% 以内 | 无显著分歧,跳过后续分析 |
| 偏差 15-25% | 中度分歧,需分析原因 |
| 偏差 25% 以上 | 严重分歧,必须深入分析 |
第二步:分析市场定价的原因(核心步骤)
发现分歧后,不能机械修正,必须回答:市场为什么给这个PE?市场看到了什么模型没捕捉到的?
需要分析的维度:
-
利润率改善空间分析(针对利润改善型企业)
- 毛利率提升空间:对标行业天花板(如啤酒行业重庆啤酒高端化成熟期毛利率~48%)
- 费用率压缩空间:当前费用率是否已到合理下限
- 净利率天花板:参照同行最优水平,估算还剩多少提升空间
- 剪刀差趋势:营收增速 vs 净利增速的差值是否在收窄(收窄意味着利润率改善的加成效应在减弱)
-
增长可持续性分析
- 营收增长是靠量还是价?量增逻辑是否见顶?
- 提价空间还有多大?消费者对价格敏感度如何?
- 行业总量是增长、平稳还是萎缩?
-
可比公司定价参照
- 同类型(零增长+高分红)公司市场给多少PE?
- 银行股(零增长+高分红):5-7x
- 公用事业(零增长+稳定分红):10-12x
- 消费品(低增长+品牌溢价):15-20x
- 消费品(稳定增长):20-25x
- 当前企业更像哪一类?
第三步:判断谁对并决定修正
| 分析结论 | 修正方式 | 示例 |
|---|
| 市场合理:模型加分项过于乐观,或未充分反映增长放缓/天花板 | 合理PE直接采用市场中枢PE(±1x微调) | 青啤:利润率改善接近天花板,营收零增长,市场18-19x定价合理 → 合理PE采用19x |
| 市场略悲观:基本面没那么差,但市场担忧有一定道理 | 合理PE = (模型PE + 市场PE) / 2 | 某公司短期利空但长期逻辑未破 |
| 市场显著悲观:市场因短期恐慌过度杀跌,基本面不支持这么低的PE | 合理PE保持模型值,不修正 | 2024年茅台PE杀到20x,但品牌和盈利能力未受损 |
| 市场偏贵:市场PE高于模型 | 合理PE保持模型值(本模型偏保守,不上修) | 牛市中消费股PE普遍偏高 |
关键原则:修正必须附理由。不允许无分析的机械修正。
第四步:修正联动
修正合理PE后,以下全部重新计算:
- 合理价值
- 安全边际买入价(锚点A和锚点B上限)
- 减仓价和清仓价
示例(青岛啤酒):
- 模型合理PE: 24x,市场近半年PE中枢: 18.5x,偏差-23% → 中度分歧
- 原因分析:
- 净利率从8%→14%,但对标重庆啤酒天花板约18%,剩余空间仅3-4个百分点
- 费用率已从22%压至17%,继续压缩空间有限
- 剪刀差从+35%收窄至+4%,利润率改善加成效应接近耗尽
- 营收零增长,一旦净利率见顶,利润增速≈营收增速≈0%
- 定价参照:零增长消费品公司通常15-20x
- 结论:市场合理,18-19x充分反映了"增长故事接近尾声"的现实
- 修正:合理PE从24x修正为 19x(采用市场中枢,品牌溢价给+0.5x取整)
预期差评估的输出格式见末尾"## 输出格式"统一模板。
Step 6: 安全边际计算
重要说明:如果执行了远期分析(Step 4B),则 Step 6、Step 7、Step 8 中所有提到的"综合合理价值"统一替换为 Step 4B.6 的综合估值结果(即含远期分析的加权综合估值),而非 Step 4 的纯静态估值。
安全边际不能只用合理价值打固定折扣,必须结合历史估值区间做现实性校验。一个永远到不了的买入价没有实操意义。
6.1 获取历史估值区间
A 股直接读 baostock 日级 peTTM/pbMRQ。直接跑脚本即可一次性看到全部 PE/PB 区间(fetch_data.py 主流程内已调用 fetch_history_with_pe + calc_pe_band):
python3 skills/value-invest/scripts/fetch_data.py 600600
输出含:全样本 / 按年的 PE 中位 / 区间,近半年 PE 中枢,当前 PE,PB 同步输出。
港股/美股 yfinance 不带 PE 时序,需手填 EPS 后用 calc_pe_band(df, eps_data={...}) 退化路径反推(在 Python REPL 中调用,从 skills/value-invest/scripts/ 目录起 import)。
然后用当年EPS计算各年低点PE和高点PE,得出:
- 历史低点PE区间:取近5年低点PE的中位数
- 历史高点PE区间:取近5年高点PE的中位数
6.2 三锚定价法
安全边际买入价由三个锚点综合决定:
| 锚点 | 计算方式 | 含义 |
|---|
| 锚点A:固定折扣法 | 综合合理价值 × (1 - 安全边际比例) | 基于内在价值的理论买入价 |
| 锚点B:历史低点PE法 | 历史低点PE中位数 × 当前TTM EPS | 市场实际给过的低估值 |
| 锚点C:悲观情景法 | 综合合理价值 × 0.7 | 考虑极端下行情况 |
定价规则:
# 锚点B受最低折扣约束,防止安全边际形同虚设
锚点B上限 = 综合合理价值 × (1 - 最低折扣)
有效锚点B = min(锚点B原始值, 锚点B上限)
安全边际买入价 = max(锚点A, 有效锚点B)
最低折扣(锚点B的硬约束):
| 确定性等级 | 最低折扣 | 含义 |
|---|
| 高确定性 | 10% + 预期差调整 | 预期过高时+10%,预期偏低时-5% |
| 中确定性 | 15% + 预期差调整 | 同上 |
| 低确定性 | 20% + 预期差调整 | 同上 |
预期差调整量来自 Step 5 的预期差评估结果。最低折扣下限为5%(即使预期已崩也保留最少5%折扣)。
取值逻辑:
- 锚点A是理论最优买入价,基于固定折扣
- 有效锚点B用历史数据做现实性校验,但不允许突破最低折扣门槛
- 取两者较高者,兼顾安全边际充足性和价格可达性
- 锚点C仅作参考展示,不参与定价
示例(青岛啤酒,中确定性):
- 合理价值 74元,锚点B原始值 = 20.8x × 3.36 = 70元
- 锚点B上限 = 74 × 0.85 = 63元(最低折扣15%)
- 有效锚点B = min(70, 63) = 63元
- 锚点A = 74 × 0.75 = 55元
- 安全边际买入价 = max(55, 63) = 63元(而非之前的70元)
6.3 安全边际比例(用于锚点A)
根据企业确定性浮动:
| 确定性等级 | 安全边际 | 适用条件 |
|---|
| 高确定性 | 20% | 合理PE加分项>=10x,且无-3x的单项减分 |
| 中确定性 | 25% | 默认级别 |
| 低确定性 | 35% | 减分合计绝对值>加分合计,或有多个-3x减分 |
Step 2C red flag 联动(强约束):
如果 Step 2C 质化深度评估发现以下 red flag,安全边际比例 +5-10pct(在上表基础上加紧):
| Red flag 信号 | 安全边际调整 | 适用类型 |
|---|
| 创始人 / 核心高管离任 / 重大组织变动 | +5pct | 强质化 / 中质化 |
| 二代接班失败 / 接班人争议 | +10pct | 中质化(民营成长股) |
| 近 3 年重大合规处罚 / 内控事件 | +5-10pct | 金融质化 |
| 央企高管 1-2 年内频繁更替(< 2 年任期) | +5pct | 央国企质化 |
| 上一轮周期低谷管理层应对失误 | +5pct | 真周期质化 |
调整后安全边际下限 5%、上限 40%(避免过度调整)。多个 red flag 同时触发时,取最高单项调整 + 累加上限 10pct,不简单叠加。
Step 2C 加分项不调整安全边际(仅 red flag 才调整)——质化深度优质(如百度 IDL 系强血统)已通过护城河评级体现,不重复加分。
6.4 盈利趋势修正
对于盈利能力处于明确改善趋势的公司(净利率或ROE连续3年提升),合理PE额外+2x。这反映了当前EPS可能低估了未来的盈利中枢。
6.5 价格计算
综合合理价值 = 由 Step 4 多模型交叉验证得出
锚点A = 综合合理价值 × (1 - 安全边际比例)
锚点B = 历史低点PE中位数(近5年) × TTM EPS (周期型用历史低点PB × 每股净资产)
锚点C = 综合合理价值 × 0.7 # 悲观情景,仅展示不参与定价
安全边际买入价 = max(锚点A, 锚点B)
如果有最新季度数据,用年化EPS计算更贴近实际:
- 前三季度数据:年化EPS = 前三季度EPS / (近3年前三季度占全年EPS比例均值)
示例:白酒Q4占比约30%,则前三季度占比70%,年化EPS = 前三季EPS / 0.70
- 半年报数据:年化EPS = 半年报EPS / (近3年上半年占全年EPS比例均值)
6.6 净现金下行托底校验(仅 Step 2D 触发的现金大户)
若跑了 Step 2D,用其净现金做下行托底的事后校验(不参与定锚):
- 资产安全垫 = 可支配净现金/股 ÷ 当前股价(剔除受限/质押资金 + 少数股东归属后的口径,取自 Step 2D.3)。占比越高,深跌时资产托底越厚。
- 悲观价 EV 校验 = (悲观价 × 总股本 − 净现金) ÷ (净利 − 现金税后收益) = 悲观情景下经营主业的扣现金 EV 倍数。若该倍数已显著低于主业合理水平,说明悲观价对主业的隐含定价很便宜,悲观价成色足。
硬规则(防双重计算):本节净现金/扣现金 EV 只做事后背书,严禁反向上调锚点 A/B/C、减仓/清仓价或安全边际比例——四档锚点的口径是含现金 PE(与历史 PE 同口径),净现金价值已隐含其中,再加一次就是重复计价。净现金的"解锁价值"仅在公司明确启动大额资本返还时,于远期/催化章节单列(打 3-5 折),不并入四档。
Step 7: 高估卖出价计算
市场有时会非理性定价(如2021年茅台PE 70x),需要有纪律性地卖出。
7.1 卖出价格计算(双锚校验)
与买入价类似,卖出价也用双锚定价:
| 锚点 | 计算方式 | 含义 |
|---|
| 锚点D:溢价倍数法 | 合理价值 × 减仓/清仓倍数 | 基于内在价值的理论卖出价 |
| 锚点E:历史高点PE法 | 历史高点PE中位数(近5年) × TTM EPS | 市场实际给过的高估值 |
减仓价 = min(锚点D减仓, 锚点E) 附近取值(取较低者,偏保守)
清仓价 = 锚点D清仓(超过合理价值的大幅溢价,纪律性卖出)
7.2 溢价系数
根据企业确定性浮动,高确定性企业可以多给一些溢价空间:
| 确定性等级 | 减仓倍数 | 清仓倍数 | 理由 |
|---|
| 高确定性 | ×1.3 | ×1.5 | 优质企业可适当容忍溢价,但不追高 |
| 中确定性 | ×1.25 | ×1.4 | 确定性一般,溢价空间更窄 |
| 低确定性 | ×1.2 | ×1.3 | 不确定性大,稍有高估就应离场 |
Step 8: 投资价值判断
根据当前价格与计算结果的关系,给出明确结论:
| 当前价位 | 结论 | 标签 |
|---|
| 当前价 ≤ 安全边际买入价 | 显著低估,安全边际充足 | 买入区间 |
| 安全边际买入价 < 当前价 ≤ 合理价值×0.9 | 低估,但安全边际不足 | 关注区间 |
| 合理价值×0.9 < 当前价 ≤ 合理价值×1.1 | 合理定价 | 持有区间 |
| 合理价值×1.1 < 当前价 ≤ 减仓价 | 偏贵 | 谨慎区间 |
| 减仓价 < 当前价 ≤ 清仓价 | 高估,分批减仓 | 减仓区间 |
| 当前价 > 清仓价 | 显著高估,考虑清仓 | 清仓区间 |
Step 9: 独立校验(subagent,按需触发)
为什么是独立校验:主 LLM 是"数据采集 + 建模 + 写作"角色,对自己产出的数字看不到盲点(确认偏差)。CLAUDE.md 五项 sanity check 是纪律存在但执行靠自觉。独立 subagent 提供"另一双不带上下文的眼睛",是结构性的解决方案。过去案例:中国建筑 v1(PE 反推错 16% 高估)/ 平安银行 5/9(PB 漏扫)/ 招行 v1.0(-3bp 接受、0.85 PB 心算)/ 焦点科技 v1(Q1 -12% 没追一阶原因)。
触发与跳过条件 —— single source 见 skills/value-invest-verify/SKILL.md 的 "何时触发" 章节。本节不重复列出,避免两份文档失同步。简言之:首次建档 / 锚点修订 > 10% / 多模型差距 > 30% 触发;轻量更新或 < 30 天内已校验则跳过。
实施方式:调用独立 sub-skill value-invest-verify,它会用 Agent 工具调起 general-purpose subagent 执行零上下文校验(subagent 不读主对话历史,只读最终 wiki 文件、独立跑脚本、独立 WebSearch)。
详细规范见 skills/value-invest-verify/SKILL.md + skills/value-invest-verify/prompt-template.md。
Step 9 在主流程中的执行顺序:
Step 1-8 完成 → 写 wiki/raw articles → [Step 9 校验] → 根据校验报告决定是否修订 → 提交
↑
这里调起独立 subagent
重要:Step 9 是在 wiki 已写好之后执行——校验员核对已写定的最终版本,而不是分析过程。这保证了"独立性"(subagent 不被主作者的思路引导)。
禁止行为:
- ❌ 跳过 Step 9 仅因为"我自己核对过了"——这违背独立校验的本意
- ❌ 在 subagent prompt 里塞主分析的结论("市场过度悲观"、"NIM -5bp"、"合理价 46 元")——破坏零上下文
- ❌ 未经层次 1 独立 fetch 核对就直接信任 subagent 报告——这是"用一个偏差替换另一个偏差"。subagent 报告不是终态,必须走 Step 3.5 层次 1 仲裁后才能定终态(详见
value-invest-verify/SKILL.md Step 3.5)
- ❌ 未经层次 1 独立 fetch 核对就直接驳回 subagent 报告——主 agent 不能凭"我觉得 sub 错了"修改结论;必须独立 fetch 后给出仲裁结论
校验报告处理:
| 校验结果 | 主 agent 行动 |
|---|
| ✅ Pass 全部 | 直接提交,校验报告归档至 raw/articles/stocks/<name>/<date>_verify_report.md(verified: true) |
| ⚠️ Warning 项 | 标注但不强制修订,问用户是否修订 |
| ❌ Fail 项 | 必须修订 wiki 对应章节,frontmatter 加 v1.x 校验修订,log.md 加 LINT 条目 |
输出格式
按 templates/stock-analysis.md 模板输出。模板包含:投资结论价格表、合理PE推导表、多模型估值、远期分析(如适用)、利润分解与交叉验证(如已执行Step 1B)、安全边际与买卖价锚点、核心财务数据、同行对比、风险提示、关键关注点。
与 Wiki 联动
分析完成后询问用户是否更新 wiki:
- 如果
wiki/stocks/{股票名}.md 已存在 → 更新估值章节
- 如果不存在 → 按 CLAUDE.md 中的个股模板创建新页面
- 更新
wiki/index.md 和 wiki/log.md
区间术语规范(自检)
为什么需要严格白名单:区间判定术语会被下游 skill(periodic-review、portfolio-review 等)和 wiki 索引消费——同一只股票今天写"买入区间"、下周写"加仓区间"、月末写"低估区间",会让下游 grep 不到一致信号、误判持仓位置。所以这里做契约化约束:写 wiki 时从下方白名单选词,下游就能稳定 parse。遵循 wiki/strategies/价值投资区间判定框架.md,写 wiki 前对照下列清单自检:
标准术语白名单
个股 6 档(wiki/stocks/*.md 中区间判定的白名单):
买入区间、关注区间、持有区间、谨慎区间、减仓区间、清仓区间
- 位置修饰允许:
XX 区间下沿/上沿/中段/中位
分散 ETF / 指数 5 档(wiki/funds/*.md 中指数型 ETF 适用):
特殊档位(在该 wiki 明确定义触发条件后才可使用):
悲观价、极端买入 — 仅针对个别标的(如茅台悲观价 985、中信极端买入 19)
禁用词(违规术语)
| 违规术语 | 正确替换 |
|---|
深度买入(在个股 wiki 中) | 跌破买入价 × 0.85 触发重做估值的逻辑,不机械加仓 |
加仓区间(在个股 wiki 中) | 买入区间 |
高估区间、低估区间 | 从 6 档中选对应项(如 清仓区间 / 关注区间) |
合理PE区间(表示价格档位时) | 从 6 档中选对应项;若表示"PE 取值范围"则改写为"合理 PE 范围"避免歧义 |
| 无锚点的模糊说法("有点贵"、"偏低") | 映射到 6 档之一 |
写入 wiki 前的自检步骤
- 确认档位:当前价是否落在锚点 {买入价/合理价×0.9/合理价×1.1/减仓价/清仓价} 切分的哪一段?
- 查白名单:该档位在个股/ETF 的对应术语是否在上表白名单?
- grep 违规词:写入前对该 wiki 文件 grep 禁用词,有则重写
- 跌破 B×0.85 特殊处理:当前价 < 买入价 × 0.85 时,不要写"深度买入"或自动加仓——这种深度下跌往往意味着基本面有问题,应改为"已跌破买入价 ×0.85,需重做估值(可能是基本面问题)"
Step 8 区间判定的术语输出
Step 8 的区间标签从 6 档白名单中取(这是契约化约束的核心,下游 skill 依赖此一致性)。典型场景示例:
- 当前价 ≤ 买入价 →
买入区间
- 当前价 ≤ 买入价 × 0.85 →
买入区间(已跌破 B×0.85,建议重做估值)(而非"深度买入")
- 当前价 > 清仓价 →
清仓区间(而非"高估区间")
- 合理价附近 ±10% →
持有区间(可加"下沿/上沿"修饰位置)