Files
xbtlin 8ab676f18c terminal_value.py 新增 audit 准出检查;接进 investment-research skill 成为流程硬约束
一、tools/terminal_value.py 新增 audit 子命令
把三条纪律从"文档里的提醒"变成程序判定的【准出】/【打回】(退出码 0/1):

  C1 币种一致性 — r 落在别的币种区间、或基准档 g 超过本币上限即打回。
     内置护栏:CNY r∈[6%,9%] g≤2% Rf=1.70%;USD/HKD r∈[9%,11.5%] g≤4% Rf=4.70%。
     两个币种 r 区间差的3个百分点全部是国债利差,不含风险判断差异。
     乐观档按设计是基准+1pct,故额外放宽1pct。
  C2 分母宽度 — 任一档 r-g < 5pct 即打回,≤0 判模型失效。
     确需做上行/下行情景可加 --upside-only 显式声明,但报告须写明"是情景不是估值"。
  C3 离散风险归属 — 风险归属写成 折现率/r/beta 一律打回;未建模仅警告但须进"限制"章节。
     β 偏离 1.0 必须给 --beta-justification。

二、skills/investment-research.md 第七步新增"长期折现估值(十年尺度)"
四步流程:定输入(r/ROIC/g 三张判断表 + 常见错误)→ audit 准出 → 出数 → 报告必写四件事。
明确终值倍数只有永续增长模型一个合法来源,不许用同业类比(循环论证)。
明确 g 不随 r 变:g 是对终值年后经济的判断,r 是要求回报,做敏感性时只动 r。

三、准出流程新增 Step 4 估值口径复检
第七步的 audit 在算数之前,而写报告时常回头调 g 或 r——准出前最后一次 audit
才是对报告负责的那一次。退出码 1 即打回。
2026-08-17 03:18:42 +08:00

16 KiB
Raw Permalink Blame History

投资研究:巴菲特-芒格-段永平-李录 四大师综合分析框架

对 $ARGUMENTS 进行系统化投资研究分析。

研究框架

基于巴菲特、芒格、段永平、李录四位投资大师的方法论,按以下七个模块顺序执行研究:

前置步骤:AI研究偏见自觉(必须执行)

在开始研究前,先评估该公司的"AI可研究性",识别潜在的数据偏见:

信息丰富度评级

等级 特征 AI研究陷阱 应对策略
A级(信息充裕) 上市多年、券商覆盖多、媒体报道密集 共识过强,AI输出趋同于市场定价,alpha有限 重点做反面检验:聪明人为什么不买?被忽略的风险是什么?
B级(信息适中) 上市1-3年、覆盖有限、部分数据需推算 AI可能用"合理推测"填补空白,看起来完整实则虚假确定性 每个推算数据标注置信度,区分"有据推算"和"凭空填充"
C级(信息稀缺) 刚上市/冷门股/新兴市场、几乎无覆盖 AI会因资料不足而过度保守,误判为"看不清=不好" 用第一性原理提问(见下方),从有限信息中提取商业本质

C级公司的第一性原理研究法: 当公开资料不足时,不要试图拼凑出"看起来完整"的报告,而是聚焦以下底层问题:

  1. 客户是谁?为什么付钱?有没有替代选择?
  2. 复购靠什么驱动?是习惯、锁定、还是持续创造新价值?
  3. 竞争对手拿100亿能复制这门生意吗?
  4. 管理层做过什么关键决策?这些决策反映了什么判断力和价值观?

偏见自查清单(研究全程保持警惕):

  • 我的"确定性"感受是来自生意本质,还是来自资料数量?
  • 如果把这家公司的资料量减少一半,我的结论会变吗?
  • AI输出的分析是否与市场共识高度雷同?如果是,我的信息优势在哪?
  • 是否存在"公开资料很少但生意本质极好"的可能性被低估了?

将信息丰富度评级结果写入报告开头,并在最终结论中注明"AI研究置信度"与"实际投资确定性"的区别。

第一步:数据收集

数据源规范:参见 skills/financial-data.md。所有财务数据必须来自两个独立来源,误差>1%须标记。

  • 美股:macrotrends(主)+ stockanalysis(副)
  • 港股:aastocks(主)+ macrotrends ADR(副)
  • A股:东方财富(主)+ 巨潮资讯(副)

使用 Task 工具启动后台 Agent,从网络收集以下数据:

  1. 收入结构:最近财年及近4季度分部收入、增速、毛利率
  2. 财务指标:近5年收入、净利润、毛利率、经营利润率、自由现金流、现金储备
  3. 竞争格局:市场份额、主要竞争对手对比
  4. 商业模式与护城河:核心竞争优势来源
  5. 技术能力:核心技术栈、研发投入
  6. 管理层:创始人/CEO履历、持股比例、关键决策记录
  7. 行业前景:TAM(总可寻址市场)、增长预测
  8. 风险因素:地缘政治、监管、供应链等
  9. 当前估值:市值、PE、PS、PEG、EV/Revenue
  10. 多空双方核心论点

数据交叉验证(必须执行,使用金融严谨性工具)

数据收集完成后,必须调用 tools/financial_rigor.py 对关键数据进行程序化验证,杜绝LLM心算误差。

必须验证的数据点

  • 总股本(从交易所、Yahoo Finance、StockAnalysis 等至少2个源确认)
  • 当前股价和市值(手动计算 股价×总股本 并与报告市值对比,防止单位错误
  • 最近财年收入和净利润(从公司年报+至少1个第三方源确认)
  • 现金储备和净现金(现金+短期投资-总债务,注意口径差异)
  • 管理层持股比例(区分经济权益和投票权,注意AB股结构)

强制验证步骤(使用Bash调用工具)

Step 1 — 市值验算(精确十进制,非浮点):

python3 tools/financial_rigor.py verify-market-cap \
  --price {股价} --shares {总股本} --reported {报告市值} --currency {币种}

Step 2 — 关键数据多源交叉验证:

python3 tools/financial_rigor.py cross-validate \
  --field {字段名} --values '{"来源1": 数值, "来源2": 数值}' --unit {单位}

对收入、净利润、现金储备分别执行。

Step 3 — 估值指标精确验算(PE/PB/ROE/FCF Yield 等):

python3 tools/financial_rigor.py verify-valuation \
  --price {股价} --eps {EPS} --bvps {每股净资产} --fcf-per-share {每股FCF} --dividend {每股股息}

验证规则

  1. 每个关键数据点至少2个独立来源
  2. 发现来源间有差异时,优先采用公司年报/交易所数据,并注明差异原因
  3. 所有涉及计算的数据必须通过工具验算,禁止LLM心算
  4. 工具输出结果直接嵌入报告附录"关键数据交叉验证记录"
  5. 如果工具报告 偏差过大,必须排查原因后才能继续分析

常见错误防范

  • 市值单位:港币亿 vs 人民币亿 vs 美元亿,容易漏写/多写一个零
  • FCF口径:不同来源对资本支出的定义可能不同(是否含租赁、收购等)
  • 债务口径:是否包含经营租赁负债
  • 持股比例:AB股公司的经济权益 ≠ 投票权

第二步:生意本质分析 — 段永平"对的生意"

分析要点:

  • 用一句话定义这门生意的本质
  • 收入结构拆解(图表)
  • 5年盈利能力趋势(图表)
  • 商业模式画布:一次性销售 vs 订阅/复购?硬件 vs 软件 vs 平台?
  • 生态粘性/客户锁定强度
  • 毛利率水平与同行对比,解释为什么高/低
  • 经营杠杆分析
  • 段永平式追问:这门生意好在哪?如果只能用一句话描述,是什么?

第三步:护城河评估 — 巴菲特"经济护城河"

逐一验证五类护城河:

护城河类型 验证方法
品牌/定价权 是否能在不损失销量的情况下提价?
转换成本 客户迁移到竞品的成本有多高?
网络效应 用户越多产品越好吗?
规模效应 规模带来的成本优势有多大?
技术/专利壁垒 技术领先几年?能否被复制?

分析护城河趋势:过去5年变宽还是变窄?未来5年预判。

巴菲特式追问:10年后这条护城河还在吗?什么能摧毁它?

第四步:逆向思考与风险清单 — 芒格"反过来想"

  • 列出"这家公司可能失败的所有路径"(表格:路径/概率/影响程度)
  • 历史类比:找到历史上处于相似位置的公司,结局如何?
  • 跨学科分析:用网络效应理论、技术采纳曲线、竞争博弈等模型交叉验证
  • 偏误自查:叙事偏差、锚定效应、幸存者偏差
  • 收集空方核心论点

芒格式追问:我最可能在哪里犯错?聪明人为什么会不买/做空这家公司?

第五步:管理层评估 — 段永平"对的人" + 巴菲特"管理层诚信"

  • CEO/创始人关键决策复盘(表格:时间/决策/结果/评分)
  • 资本配置能力:研发回报率、并购成功率、回购时机
  • 股东利益一致性:管理层持股、薪酬结构、减持记录
  • 组织能力:团队稳定性、关键人才风险
  • 企业文化特征

段永平式追问:如果CEO退休,这家公司还能保持竞争力吗?

第六步:行业与文明趋势 — 李录"文明演进框架"

  • 判断所在行业是否处于"文明级范式转移"
  • 历史技术革命类比(蒸汽机/电力/互联网/AI)
  • TAM增长曲线与天花板分析
  • 公司在产业价值链中的位置
  • 技术路线风险
  • 客户/供应商集中度分析

李录式追问:站在20年后回看,这家公司是"这个时代的标准石油"还是"昙花一现的3Com"

第七步:估值与安全边际 — 巴菲特"内在价值" + 段永平"对的价格"

  • 当前市场定价(关键估值指标表格)—— 必须通过工具验算
  • 反向DCF:当前股价隐含了什么增长预期?
  • 三情景估值 —— 必须通过工具精确计算,禁止心算
python3 tools/financial_rigor.py three-scenario \
  --price {股价} --eps {EPS} --shares {总股本亿} \
  --growth {乐观增速} {中性增速} {悲观增速} \
  --pe {乐观PE} {中性PE} {悲观PE} --years 3 --currency {币种}
  • 与自身历史估值对比
  • 与同行估值对比

长期折现估值(十年尺度,必须执行)

三年三情景回答"贵不贵",十年折现回答"值不值得重仓"。凡是给出十年期 IRR 或终值倍数的研究,必须走这套流程,用 tools/terminal_value.py

终值倍数只有一个合法来源——永续增长模型,不许用同业类比

PE_{终值} = \frac{1 - g/ROIC}{r - g}

"帝亚吉欧 13 倍所以茅台给 16 倍"是循环论证:用别人今天的价格,证明我假设的价格合理。市场今天整体贵,类比法就把这份贵原封不动搬到十年后。

Step 1 — 定三个输入,逐个写出理由(这一步全是判断,不是计算,必须在报告里交代):

输入 怎么定 常见错误
r 资本成本 无风险利率 + β × ERP。币种必须与现金流一致:人民币口径 6%–9%(主用 8%),美元/港元口径 9%–11.5%(主用 10% 跟着国债利率跑。中国国债 1.70% 折出来的 PE 会到 50 倍以上,那不是估值是放大偏见
ROIC 稳态增量资本回报 夹在存量 ROIC(含不上表的无形护城河,偏高)与派息反解的隐含增量 ROIC(假设 capex 回报为零,偏低)之间 直接用存量 ROIC。等于假设新投的每块钱都能复制建立微信时的回报
g 永续增速 不是未来十年增速(那已在终值利润里),是终值年之后到永远。硬天花板是长期名义 GDP:人民币口径基准档 ≤2%,美元口径 ≤4% 用美元的 g 配人民币的 r。3% 名义增长在美国是 0.5% 实际(保守),在中国是 2% 实际(激进)

g 不随 r 变——g 是对终值年之后经济的判断,r 是你要求的回报,两件独立的事。做敏感性时只动 r。

Step 2 — 三条硬约束准出检查(不通过不许把估值写进报告):

python3 tools/terminal_value.py audit \
  --currency {CNY|USD|HKD} --r {资本成本} --roic {稳态ROIC} \
  --g {悲观g},{基准g},{乐观g} --rf {无风险利率} --beta 1.0 \
  --discrete-risks "{风险名}:{情景|尾部档|概率|未建模},..."

三条检查的内容与打回条件:

# 检查 打回条件
C1 r 与 g 必须同币种 r 落在别的币种区间、或基准档 g 超过本币上限。工具会直接指出"这是 USD 的量级——r 用了本币而 g 用了外币"
C2 分母 rg ≥ 5 个百分点 任一档不足 5pct。分母越窄 g 动一点点估值就翻天;分母 ≤0 直接判模型失效。确实要做上行/下行情景时加 --upside-only 显式声明,但报告里必须写明"这是情景不是估值"
C3 离散风险不得进 r 或 β 任一风险归属写成 折现率/r/beta 一律打回。退市、VIE 失效、地缘断供、监管重击必须归 情景尾部档。β 偏离 1.0 必须给 --beta-justification

C3 为什么是硬的:抬 r 三个百分点,对第 10 年现金流的惩罚是第 1 年的 2.6 倍;而退市风险是大致均匀甚至前置的年度危害率。用折现率处理离散风险,会系统性地把风险的时间分布搞反。 正确做法是单列一个尾部情景档并给它一个概率。

C1/C2/C3 的完整论证见 reports/7公司10年投资价值横评-确定性调整后回报-20260814.md 第 3.4–3.6 节——三条都是那份报告实际踩过的坑。

Step 3 — 出数(准出后才能跑):

# 单点退出 PE,打印完整算式(留存率/分子/分母全部展开,便于报告引用)
python3 tools/terminal_value.py pe --roic {ROIC} --g {g} --r {r}

# 从零算 IRR
python3 tools/terminal_value.py irr \
  --profit {终值年利润} --mcap {今日市值} --pe {退出PE} \
  --years 10 --payout {股息率-稀释率}

多公司横评时把参数写成 JSON 传 --config,再用 table / sweep / check

Step 4 — 报告里必须写出的四件事:

  1. r 取值、币种、以及配对的 g 上限。不写明 r 就报 IRR,报的是自己的偏好。
  2. 至少两档 r 的敏感性,以及排序在各档下是否稳定。绝对数字受 r 支配,排序才是稳健结论。
  3. 每一档的 rg 分母宽度,凡低于 5pct 的必须标注"仅作情景参考"。
  4. 未建模的离散风险清单audit 里标 未建模 的),写进"限制"章节。

巴菲特式追问:这个 r 如果错 2 个百分点,我的结论会翻转吗?如果会,我的结论买的是公司还是折现率?

段永平式追问:如果股市明天关闭5年,你愿意以这个价格持有吗?

第八步:综合决策备忘录

汇总表格:

维度 结论 信心度
生意质量(段永平)
护城河(巴菲特)
管理层(段永平+巴菲特)
最大风险(芒格)
文明趋势(李录)
估值(巴菲特+段永平)

最终决策表格:

策略 建议
空仓者
持仓者
卖出信号
加仓信号

四位大师的模拟点评(用引用格式)。

输出要求

  1. 所有分析必须有数据支撑,附数据来源
  2. 使用 Markdown 表格呈现关键数据
  3. 每个模块末尾必须有对应大师的"追问"
  4. 最终将完整报告写入 ~/[公司名]投资研究报告.md
  5. 结论要明确,不回避给出买入/观望/回避的建议
  6. 估值部分必须给出具体的价格区间
  7. 报告开头必须包含"信息丰富度评级"A/B/C)和"AI研究局限性声明"
  8. 报告结尾必须区分"AI分析置信度"与"投资确定性"——前者取决于资料量,后者取决于生意本质。明确告知读者:本报告的哪些结论基于充分数据,哪些基于有限信息的推理
  9. 如果公司属于C级(信息稀缺),报告末尾必须列出"需要一手验证的问题清单"——建议读者通过田野调查、产品体验、供应链访谈等方式补充AI的盲区

数据抽检(准出流程)

报告写入文件后,必须执行数据抽检,通过后方可发布:

Step 1 — 提取抽检清单(15%随机抽样):

python3 tools/report_audit.py extract \
  --report <报告文件路径>

输出 JSON 模板,每项含 fetched_value(待填)。

Step 2 — 取数核验: 对清单中每个数据点,按 skills/financial-data.md 规范从可靠信源取数 (美股:macrotrends+stockanalysis;港股:aastocks+macrotrendsA股:东方财富+巨潮资讯), 填入 fetched_value / fetched_source / fetched_value2 / fetched_source2

Step 3 — 输出判决:

python3 tools/report_audit.py verdict \
  --results '<填好的JSON>' \
  --report <报告文件名>
  • 【准出】:所有抽检点偏差 ≤ 1% → 报告可发布
  • 【打回】:任意点偏差 > 1% → 修正对应数据后重新抽检,直到准出

Step 4 — 估值口径复检(含十年折现估值的报告必须执行):

如果报告里出现了十年期 IRR 或终值倍数,把最终定稿用的参数再跑一遍 audit,确认写进报告的数字与准出时的一致:

python3 tools/terminal_value.py audit \
  --currency {币种} --r {r} --roic {ROIC} --g {三档g} --rf {无风险利率} \
  --beta {β} --discrete-risks "{风险归属清单}"
  • 【准出】(退出码 0)→ 报告可发布
  • 【打回】(退出码 1)→ 修正后重跑,直到准出

这一步不能跳过的原因:第七步的 audit 是在算数之前做的,而写报告的过程中经常会回头调 g 或 r。准出前的最后一次 audit 才是对报告负责的那一次。