一、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 即打回。
16 KiB
投资研究:巴菲特-芒格-段永平-李录 四大师综合分析框架
对 $ARGUMENTS 进行系统化投资研究分析。
研究框架
基于巴菲特、芒格、段永平、李录四位投资大师的方法论,按以下七个模块顺序执行研究:
前置步骤:AI研究偏见自觉(必须执行)
在开始研究前,先评估该公司的"AI可研究性",识别潜在的数据偏见:
信息丰富度评级:
| 等级 | 特征 | AI研究陷阱 | 应对策略 |
|---|---|---|---|
| A级(信息充裕) | 上市多年、券商覆盖多、媒体报道密集 | 共识过强,AI输出趋同于市场定价,alpha有限 | 重点做反面检验:聪明人为什么不买?被忽略的风险是什么? |
| B级(信息适中) | 上市1-3年、覆盖有限、部分数据需推算 | AI可能用"合理推测"填补空白,看起来完整实则虚假确定性 | 每个推算数据标注置信度,区分"有据推算"和"凭空填充" |
| C级(信息稀缺) | 刚上市/冷门股/新兴市场、几乎无覆盖 | AI会因资料不足而过度保守,误判为"看不清=不好" | 用第一性原理提问(见下方),从有限信息中提取商业本质 |
C级公司的第一性原理研究法: 当公开资料不足时,不要试图拼凑出"看起来完整"的报告,而是聚焦以下底层问题:
- 客户是谁?为什么付钱?有没有替代选择?
- 复购靠什么驱动?是习惯、锁定、还是持续创造新价值?
- 竞争对手拿100亿能复制这门生意吗?
- 管理层做过什么关键决策?这些决策反映了什么判断力和价值观?
偏见自查清单(研究全程保持警惕):
- 我的"确定性"感受是来自生意本质,还是来自资料数量?
- 如果把这家公司的资料量减少一半,我的结论会变吗?
- AI输出的分析是否与市场共识高度雷同?如果是,我的信息优势在哪?
- 是否存在"公开资料很少但生意本质极好"的可能性被低估了?
将信息丰富度评级结果写入报告开头,并在最终结论中注明"AI研究置信度"与"实际投资确定性"的区别。
第一步:数据收集
数据源规范:参见
skills/financial-data.md。所有财务数据必须来自两个独立来源,误差>1%须标记。
- 美股:macrotrends(主)+ stockanalysis(副)
- 港股:aastocks(主)+ macrotrends ADR(副)
- A股:东方财富(主)+ 巨潮资讯(副)
使用 Task 工具启动后台 Agent,从网络收集以下数据:
- 收入结构:最近财年及近4季度分部收入、增速、毛利率
- 财务指标:近5年收入、净利润、毛利率、经营利润率、自由现金流、现金储备
- 竞争格局:市场份额、主要竞争对手对比
- 商业模式与护城河:核心竞争优势来源
- 技术能力:核心技术栈、研发投入
- 管理层:创始人/CEO履历、持股比例、关键决策记录
- 行业前景:TAM(总可寻址市场)、增长预测
- 风险因素:地缘政治、监管、供应链等
- 当前估值:市值、PE、PS、PEG、EV/Revenue
- 多空双方核心论点
数据交叉验证(必须执行,使用金融严谨性工具)
数据收集完成后,必须调用 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 {每股股息}
验证规则:
- 每个关键数据点至少2个独立来源
- 发现来源间有差异时,优先采用公司年报/交易所数据,并注明差异原因
- 所有涉及计算的数据必须通过工具验算,禁止LLM心算
- 工具输出结果直接嵌入报告附录"关键数据交叉验证记录"
- 如果工具报告 ❌ 偏差过大,必须排查原因后才能继续分析
常见错误防范:
- 市值单位:港币亿 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 | 分母 r−g ≥ 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 — 报告里必须写出的四件事:
- r 取值、币种、以及配对的 g 上限。不写明 r 就报 IRR,报的是自己的偏好。
- 至少两档 r 的敏感性,以及排序在各档下是否稳定。绝对数字受 r 支配,排序才是稳健结论。
- 每一档的 r−g 分母宽度,凡低于 5pct 的必须标注"仅作情景参考"。
- 未建模的离散风险清单(audit 里标
未建模的),写进"限制"章节。
巴菲特式追问:这个 r 如果错 2 个百分点,我的结论会翻转吗?如果会,我的结论买的是公司还是折现率?
段永平式追问:如果股市明天关闭5年,你愿意以这个价格持有吗?
第八步:综合决策备忘录
汇总表格:
| 维度 | 结论 | 信心度 |
|---|---|---|
| 生意质量(段永平) | ||
| 护城河(巴菲特) | ||
| 管理层(段永平+巴菲特) | ||
| 最大风险(芒格) | ||
| 文明趋势(李录) | ||
| 估值(巴菲特+段永平) |
最终决策表格:
| 策略 | 建议 |
|---|---|
| 空仓者 | |
| 持仓者 | |
| 卖出信号 | |
| 加仓信号 |
四位大师的模拟点评(用引用格式)。
输出要求
- 所有分析必须有数据支撑,附数据来源
- 使用 Markdown 表格呈现关键数据
- 每个模块末尾必须有对应大师的"追问"
- 最终将完整报告写入
~/[公司名]投资研究报告.md - 结论要明确,不回避给出买入/观望/回避的建议
- 估值部分必须给出具体的价格区间
- 报告开头必须包含"信息丰富度评级"(A/B/C)和"AI研究局限性声明"
- 报告结尾必须区分"AI分析置信度"与"投资确定性"——前者取决于资料量,后者取决于生意本质。明确告知读者:本报告的哪些结论基于充分数据,哪些基于有限信息的推理
- 如果公司属于C级(信息稀缺),报告末尾必须列出"需要一手验证的问题清单"——建议读者通过田野调查、产品体验、供应链访谈等方式补充AI的盲区
数据抽检(准出流程)
报告写入文件后,必须执行数据抽检,通过后方可发布:
Step 1 — 提取抽检清单(15%随机抽样):
python3 tools/report_audit.py extract \
--report <报告文件路径>
输出 JSON 模板,每项含 fetched_value(待填)。
Step 2 — 取数核验:
对清单中每个数据点,按 skills/financial-data.md 规范从可靠信源取数
(美股:macrotrends+stockanalysis;港股:aastocks+macrotrends;A股:东方财富+巨潮资讯),
填入 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 才是对报告负责的那一次。