跳到主要内容

DCF 模型

在 Excel 中构建机构级别的 DCF 估值模型——营收预测、FCF 构建、WACC、终值、看跌/基准/看涨情景、5×5 敏感性表格。与 excel-author 配合使用。适用于内在价值的股权分析。

技能元数据

来源可选 — 使用 hermes skills install official/finance/dcf-model 安装
路径optional-skills/finance/dcf-model
版本1.0.0
作者Anthropic (由 Nous Research 改编)
许可协议Apache-2.0
平台linux, macos, windows
标签finance, valuation, dcf, excel, openpyxl, modeling, investment-banking
相关技能excel-author, pptx-author, comps-analysis, lbo-model, 3-statement-model

参考:完整的 SKILL.md

信息

以下是 Hermes 在该技能触发时加载的完整技能定义。当技能激活时,Agent 会看到这份说明。

环境

本技能假设使用 headless openpyxl — 您在磁盘上生成一个 .xlsx 文件。 遵循 excel-author 技能关于单元格颜色、公式、命名范围和敏感性表格的约定。 交付前重新计算:python /path/to/excel-author/scripts/recalc.py ./out/model.xlsx

DCF 模型构建器

概述

本技能遵循投资银行标准,为股权估值创建机构级别的 DCF 模型。每次分析都会生成一个详细的 Excel 模型(在 DCF 工作表底部包含敏感性分析)。

工具

  • 默认使用用户提供的所有信息以及用于数据获取的 MCP 服务器。

关键约束 - 请先阅读

以下约束适用于所有 DCF 模型构建。开始前请仔细阅读:

公式优先于硬编码(不可协商):

  • 每一个预测数据、利润率、折现因子、现值以及敏感性单元格都必须是活动的 Excel 公式——绝不允许用 Python 计算后直接写入数字
  • 使用 openpyxl 时:ws["D20"] = "=D19*(1+$B$8)" 是正确的;ws["D20"] = calculated_revenue 是错误的
  • 唯一允许的硬编码数字是:(1) 原始历史数据,(2) 假设驱动因子(增长率、WACC 输入、永续增长率),(3) 当前市场数据(股价、债务余额)
  • 如果你发现自己用 Python 计算了某个值并直接写入结果——立刻停止。模型必须在用户更改假设时能够灵活调整。

逐步与用户确认(不要一次性构建到底):

  • 数据获取后 → 向用户展示原始输入区块(营收、利润率、股票数量、净债务),确认后再进行预测
  • 营收预测后 → 展示预测的营收和增长率,确认后再构建利润率
  • 自由现金流构建后 → 展示完整的自由现金流时间表,在计算 WACC 前确认逻辑
  • WACC 计算后 → 展示计算过程及输入值,确认后再进行折现
  • 终值和现值计算后 → 展示股权桥梁(EV → 股权价值 → 每股价值),确认后再构建敏感性表格
  • 在每个阶段捕捉错误——如果在敏感性表格构建完成后才发现利润率假设错误,那么下游所有东西都需要重建 敏感性表格:
  • 使用奇数行和奇数列(标准:5×5,有时7×7)——这能确保有一个真正的中心单元格
  • 中心单元格 = 基准情形。 构建轴值,使中间行标题和中间列标题恰好等于模型的实际假设(例如,如果基准 WACC = 9.0%,则中间行为 9.0%;如果终值增长率 g = 3.0%,则中间列为 3.0%)。因此,中心单元格的输出必须等于模型实际隐含的股价——这是检验表格构建正确性的合理性检查。
  • 用中蓝色填充(#BDD7EE)+ 粗体字突出显示中心单元格,以便一眼就能看出哪个单元格是基准情形。
  • 填充所有单元格(通常 3 个表格 × 25 个单元格 = 75 个),使用完整的 DCF 重新计算公式
  • 使用 openpyxl 循环以编程方式写入公式
  • 无占位文本,无线性近似,无需手动步骤
  • 每个单元格必须针对该假设组合重新计算完整的 DCF

单元格注释:

  • 在创建每个硬编码值时,立即添加单元格注释
  • 格式:"来源:[系统/文档],[日期],[参考],[URL(如适用)]"
  • 每个蓝色输入在进入下一部分之前都必须有注释
  • 不要推迟到末尾,也不要写"TODO:添加来源"

模型布局规划:

  • 在编写任何公式之前,先定义所有部分的行位置
  • 首先编写所有标题和标签
  • 其次编写所有部分分隔线和空行
  • 然后使用固定的行位置编写公式
  • 创建后立即测试公式

公式重新计算:

  • 交付前运行 python recalc.py model.xlsx 30
  • 修复所有错误,直到状态为"success"
  • 要求零公式错误(#REF!、#DIV/0!、#VALUE! 等)

情景块:

  • 为熊市/基准/牛市情形创建独立的块
  • 在每个块内,跨预测年份水平显示假设
  • 使用 IF 公式:=IF($B$6=1,[熊市单元格],IF($B$6=2,[基准单元格],[牛市单元格]))
  • 验证公式引用了正确的情景块单元格

DCF 流程工作流

步骤 1:数据检索与验证

从 MCP 服务器、用户提供的数据以及网络获取数据。

数据来源优先级:

  1. MCP 服务器(如果已配置)——来自 Daloopa 等提供商的结构化财务数据
  2. 用户提供的数据——其研究中的历史财务数据
  3. 网络搜索/获取——需要时的当前价格、贝塔值、债务和现金

验证清单:

  • 核实净债务与净现金(对估值至关重要)
  • 确认稀释后流通股数(检查近期回购/发行)
  • 验证历史利润率与业务模式一致
  • 交叉核对收入增长率与行业基准
  • 验证税率是否合理(通常为 21-28%)

步骤 2:历史分析(3-5 年)

分析并记录:

  • 收入增长趋势:计算 CAGR,识别驱动因素
  • 利润率变化:追踪毛利率、EBIT 利润率、FCF 利润率
  • 资本密集度:折旧摊销和资本支出占收入的百分比
  • 营运资本效率:净营运资本变动占收入增长的百分比
  • 回报指标:ROIC、ROE 趋势 创建汇总表格,展示:
历史指标(近十二个月):
收入:X 百万美元
收入增长率:X% 复合年增长率
毛利率:X%
EBIT 利润率:X%
折旧摊销占收入比例:X%
资本支出占收入比例:X%
自由现金流利润率:X%

第三步:建立收入预测

方法:

  1. 以最新实际收入(近十二个月或最近财年)为起点
  2. 为每个预测年份应用增长率
  3. 同时展示金额和计算出的增长百分比

增长率框架:

  • 第1-2年:较高增长,反映近期可见度
  • 第3-4年:逐步回归行业平均水平
  • 第5年及以后:趋近终期增长率

公式结构:

  • 收入(第N年)= 收入(第N-1年)× (1 + 增长率)
  • 增长百分比(第N年)= 收入(第N年)/ 收入(第N-1年) - 1

三情景方法:

熊市情景:保守增长(例如 8-12%)
基准情景:最可能情景(例如 12-16%)
牛市情景:乐观增长(例如 16-20%)

第四步:营业费用建模

固定/可变成本分析:

营业费用应模拟现实的经营杠杆:

  • 销售与营销:通常占收入的 15-40%,视业务模式而定
  • 研发:科技公司通常占收入的 10-30%
  • 一般与行政:通常占收入的 8-15%,随公司规模扩大而体现杠杆效应

关键原则:

  • 所有百分比均基于收入,而非毛利润
  • 对经营杠杆进行建模:随着收入增长,百分比应下降
  • 单独列示销售与营销、研发、一般与行政等科目
  • EBIT = 毛利润 - 总营业费用

利润率扩张框架:

当前状态 → 目标状态(第5年)
毛利率:X% → Y%(基于规模和效率说明理由)
EBIT 利润率:X% → Y%(收入增长 + 营业费用杠杆的结果)

第五步:自由现金流计算

按正确顺序构建自由现金流:

EBIT
(-) 税费(EBIT × 税率)
= NOPAT(税后净营业利润)
(+) 折旧摊销(非现金费用,占收入百分比)
(-) 资本支出(占收入百分比,通常 4-8%)
(-) 营运资本变动(占收入变化百分比)
= 无杠杆自由现金流

营运资本建模:

  • 按收入变动(收入增量)的百分比计算
  • 典型范围:收入变动的 -2% 到 +2%
  • 负数为现金来源(营运资本释放)
  • 正数为现金使用(营运资本增加)

维持性 vs. 增长性资本支出:

  • 维持性资本支出:维持现有运营(约占收入 2-3%)
  • 增长性资本支出:支持扩张(另占收入 2-5%)
  • 总资本支出应与公司的增长战略一致

第六步:资本成本(WACC)研究

权益成本的 CAPM 方法:

权益成本 = 无风险利率 + Beta × 股权风险溢价

其中:
- 无风险利率 = 当前10年期国债收益率
- Beta = 相对市场指数的5年月度股票贝塔值
- 股权风险溢价 = 5.0-6.0%(市场标准)

债务成本计算:

税后债务成本 = 税前债务成本 ×(1 - 税率)

确定税前债务成本的来源:
- 信用评级(若有)
- 公司债券的当前收益率
- 财务数据中的利息费用 / 总债务

资本结构权重:

市场价值股权 = 当前股价 × 流通股数
净负债 = 总负债 - 现金及等价物
企业价值 = 市值 + 净负债

股权权重 = 市值 / 企业价值
负债权重 = 净负债 / 企业价值

加权平均资本成本 = (股权成本 × 股权权重) + (税后债务成本 × 负债权重)

特殊情况:

  • 净现金头寸:如果现金 > 负债,净负债为负数
    • 负债权重可能为负
    • WACC 计算相应调整
  • 无负债:WACC = 股权成本

典型 WACC 范围:

  • 大盘蓝筹、稳定型:7-9%
  • 成长型公司:9-12%
  • 高增长/高风险:12-15%

第 7 步:折现率的应用(5-10 年预测)

年中惯例:

  • 假设现金流发生在年中
  • 折现期:0.5, 1.5, 2.5, 3.5, 4.5 等
  • 折现因子 = 1 / (1 + WACC)^期数

现值计算:

每个预测年:
FCF 现值 = 无杠杆 FCF × 折现因子

示例(第 1 年):
FCF = $1,000
WACC = 10%
期数 = 0.5
折现因子 = 1 / (1.10)^0.5 = 0.9535
现值 = $1,000 × 0.9535 = $954

预测期选择:

  • 5 年:大多数分析的标准
  • 7-10 年:具有较长增长跑道的高成长公司
  • 3 年:成熟稳定型企业

第 8 步:终值计算

永续增长法(首选):

终期 FCF = 最后一年 FCF × (1 + 终期增长率)
终值 = 终期 FCF / (WACC - 终期增长率)

关键约束:终期增长率 < WACC(否则价值无穷大)

终期增长率选择:

  • 保守型:2.0-2.5%(GDP 增长率)
  • 温和型:2.5-3.5%
  • 激进型:3.5-5.0%(仅适用于市场领导者)

不得超过:无风险利率或长期 GDP 增长率

退出倍数法(替代方案):

终值 = 最后一年 EBITDA × 退出倍数

退出倍数来源:
- 行业可比交易倍数
- 先例交易倍数
- 典型范围:8-15 倍 EBITDA

终值的现值:

终值现值 = 终值 / (1 + WACC)^最终期数

最终期数考虑时间:
5 年模型,年中惯例:期数 = 4.5

终值合理性检查:

  • 应占企业价值的 50-70%
  • 如果 >75%,模型可能过度依赖终值假设
  • 如果 <40%,检查终值假设是否过于保守

第 9 步:企业价值到股权价值桥接

估值汇总结构:

(+) 预测 FCF 现值之和 = X 百万美元
(+) 终值现值 = Y 百万美元
= 企业价值 = Z 百万美元

(-) 净负债 [如果为负则为净现金] = A 百万美元
= 股权价值 = B 百万美元

÷ 稀释后流通股数 = C 百万股
= 隐含每股价格 = XX.XX 美元

当前股价 = YY.YY 美元
隐含回报 = (隐含价格 / 当前价格) - 1 = XX%

关键调整:

  • 净负债 = 总负债 - 现金及等价物
    • 如果为正:从企业价值中减去(减少股权价值)
    • 如果为负(净现金):加到企业价值中(增加股权价值)
  • 使用稀释后股数:包括期权、限制性股票、可转换证券
  • 其他调整(如适用):
    • 少数股东权益
    • 养老金负债
    • 经营租赁义务 估值输出格式:
Valuation Component,Amount ($M)
PV Explicit FCFs,X.X
PV Terminal Value,Y.Y
Enterprise Value,Z.Z
(-) Net Debt,A.A
Equity Value,B.B
,,
Shares Outstanding (M),C.C
Implied Price per Share,$XX.XX
Current Share Price,$YY.YY
Implied Upside/(Downside),+XX%

步骤10:敏感性分析

在DCF工作表底部构建三个敏感性表格,展示不同假设下估值的变化:

  1. WACC vs 终值增长率 - 显示企业价值对折现率和永续增长率的敏感性
  2. 营收增长率 vs EBIT利润率 - 显示收入增长和经营杠杆的影响
  3. Beta vs 无风险利率 - 显示权益资本成本的敏感性

实现方式:这些是简单的二维网格(不是Excel的“数据表”功能),每个单元格包含公式。每个单元格必须对该特定假设组合进行完整的DCF重新计算。有关使用openpyxl以编程方式填充全部75个单元格的详细要求,请参见“关键约束”部分。

<correct_patterns>

本部分包含了构建DCF模型时需要遵循的所有正确模式。

场景块选择模式——请遵循此方法

假设按每个场景分别组织在单独的块中:

关键结构——每个区块标题下三行:

BEAR CASE ASSUMPTIONS (section header, merge cells across)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),12%,10%,9%,8%,7%
EBIT Margin (%),45%,44%,43%,42%,41%

BASE CASE ASSUMPTIONS (section header, merge cells across)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),16%,14%,12%,10%,9%
EBIT Margin (%),48%,49%,50%,51%,52%

BULL CASE ASSUMPTIONS (section header, merge cells across)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),20%,18%,15%,13%,11%
EBIT Margin (%),50%,51%,52%,53%,54%

每个场景块必须在区块标题下方有一个列标题行,显示预测年度(如FY2025E、FY2026E等)。缺少它,用户就无法知道哪个假设值对应哪一年。

如何引用假设——创建归并列:

  1. 场景选择器单元格(例如B6)包含1=熊市、2=基准或3=牛市
  2. 使用INDEX或OFFSET公式创建归并列,从正确的场景块中提取数据
  3. 预测公式引用归并列(干净单元格引用)
  4. 每个场景块包含跨预测年度的完整DCF假设集

推荐的归并列模式(使用INDEX): =INDEX(B10:D10, 1, $B$6)

不要这样做——散布在各处的IF语句: =IF($B$6=1,[Bear block cell],IF($B$6=2,[Base block cell],[Bull block cell]))

归并列方法将逻辑集中化,使模型更易于审计。

正确的营收预测模式

使用INDEX公式创建归并列,然后在预测中引用它:

步骤1 - FY1增长率的归并列: =INDEX([Bear FY1 growth]:[Bull FY1 growth], 1, $B$6) 第 2 步 - 收入预测引用整合列:
第一年收入:=D29*(1+$E$10)

其中:

  • D29 = 上一年收入
  • $E$10 = FY1 增长的整合列单元格(包含 INDEX 公式)
  • $B$6 = 情景选择器(1=悲观,2=基准,3=乐观)

这种方法比在每个预测公式中嵌入 IF 语句更清晰,并且更容易审计使用了哪些情景假设。

正确的自由现金流公式模式

使用包含 INDEX 公式的整合列,然后在自由现金流计算中引用它们:

整合列方法:

项目,公式,参考
折旧与摊销,=E29*$E$21,$E$21 = 折旧与摊销%的整合列
资本支出,=E29*$E$22,$E$22 = 资本支出%的整合列
净营运资本变动,=(E29-D29)*$E$23,$E$23 = 净营运资本变动%的整合列
无杠杆自由现金流,=E57+E58-E60-E62,E57=税后净营业利润 E58=折旧与摊销 E60=资本支出 E62=净营运资本变动

每个整合列单元格包含一个 INDEX 公式,该公式根据情景选择器从对应的情景块中提取数据。这使预测公式保持干净且可审计。

在编写公式之前,先确认情景块行位置,并设置好整合列。

正确的单元格批注格式

每个硬编码值都需要这种格式:

“来源:[系统/文档],[日期],[参考],[URL(如有)]”

示例:

项目,来源批注
股票价格,来源:市场数据脚本 2025-10-12 收盘价
流通股数,来源:10-K FY2024 第45页 注释12
历史收入,来源:10-K FY2024 第32页 合并报表
贝塔系数,来源:市场数据脚本 2025-10-12 5年月度贝塔
一致预期,来源:管理层指引 Q3 2024 财报电话会议

正确的假设表格结构

关键:每个情景块需要三个结构要素:

  1. 章节标题行(合并单元格):例如“悲观情景假设”
  2. 列标题行显示年份 - 必填,不可跳过
  3. 数据行包含假设值

结构:

悲观情景假设(章节标题 - 跨 A:G 列合并)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),X%,X%,X%,X%,X%
EBIT利润率(%),X%,X%,X%,X%,X%
终值增长率,X%,,,,
加权平均资本成本,X%,,,,

基准情景假设(章节标题 - 跨 A:G 列合并)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),X%,X%,X%,X%,X%
EBIT利润率(%),X%,X%,X%,X%,X%
终值增长率,X%,,,,
加权平均资本成本,X%,,,,

乐观情景假设(章节标题 - 跨 A:G 列合并)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),X%,X%,X%,X%,X%
EBIT利润率(%),X%,X%,X%,X%,X%
终值增长率,X%,,,,
加权平均资本成本,X%,,,,

如果没有显示预测年份(FY2025E、FY2026E 等)的列标题行,用户就无法判断哪个假设值对应哪一年。这一行是强制性的。

然后创建整合列(通常是右侧下一列),使用 INDEX 公式根据情景选择器从所选情景块中提取数据。预测公式引用的正是这个整合列。

正确的行规划流程

1. 先写所有的表头和标签:

Row,Content
1,[Company Name] DCF Model
2,Ticker | Date | Year End
4,Case Selector
7,KEY ASSUMPTIONS
26,Assumption headers
27-31,Growth assumptions
...,...

2. 写所有章节分隔线和空白行

3. 然后根据锁定行位置写公式

4. 创建公式后立即测试

可以把它想成施工:

  • 好的:先打地基,再砌墙(结构稳定)
  • 不好的:先砌墙,再打地基(墙会塌)

Excel 版本:

  • 好的:先添加表头,再写公式(公式稳定)
  • 不好的:先写公式,再添加表头(公式会坏)

正确的敏感性表格实现

重要:这些不是 Excel 的“数据表”功能。它们是简单的网格,你使用 openpyxl 写入常规公式。是的,这意味着总共约 75 个公式(3 个表格 × 每个 25 个单元格),但这很直接且是必需的。

用公式进行程序化填充:

每个敏感性表格都必须完全用公式填充,这些公式根据假设的每一种组合重新计算隐含股价。不要使用 Excel 的数据表功能(它需要人工干预,无法通过 openpyxl 自动化)。

实现方法——具体示例:

表格结构 — 5×5 网格(奇数维度,基础情况居中):

如果模型的基础 WACC = 9.0%,基础终端增长率 = 3.0%,请围绕这些值对称构建坐标轴:

WACC vs Terminal Growth,  2.0%,  2.5%,  3.0%,  3.5%,  4.0%
8.0%, [fml], [fml], [fml], [fml], [fml]
8.5%, [fml], [fml], [fml], [fml], [fml]
9.0%, [fml], [fml], [★ ], [fml], [fml] ← 中间行 = 基础 WACC
9.5%, [fml], [fml], [fml], [fml], [fml]
10.0%, [fml], [fml], [fml], [fml], [fml]

中间列 = 基础终端增长率

★ = 中心单元格。 该单元格的公式输出必须等于模型实际隐含股价(来自估值汇总)。对该单元格应用中蓝色填充(#BDD7EE)和粗体字体,以便基础情况在视觉上得到锚定。

坐标轴值的规则: axis_values = [base - 2*step, base - step, base, base + step, base + 2*step] — 围绕基础对称,奇数个数保证中心存在。

公式模式 — 单元格 B88(WACC=8.0%,终端增长率=2.0%):

B88 中的公式应使用以下参数重新计算隐含价格:

  • 行表头中的 WACC:$A88 (8.0%)
  • 列表头中的终端增长率:B$87 (2.0%)

推荐方法: 引用主要的 DCF 计算,但替换这些值。

示例公式结构: =([使用 $A88 作为折现率的 PV FCFs 之和] + [使用 B$87 作为增长率、$A88 作为 WACC 的终值] - [净债务]) / [股数]

关键 — 为 5×5 网格中的每个单元格写一个公式(每个表格 25 个单元格,总共 75 个单元格)。 使用 openpyxl 在循环中程序化地写入这些公式。不要跳过此步骤或留下占位文本。 Python 实现模式:

# 填充敏感性表格的伪代码
for row_idx, wacc_value in enumerate(wacc_range):
for col_idx, term_growth_value in enumerate(term_growth_range):
# 构建使用 wacc_value 和 term_growth_value 的公式
formula = f"=<使用 {wacc_value}{term_growth_value} 重新计算 DCF>"
ws.cell(row=start_row+row_idx, column=start_col+col_idx).value = formula

敏感性表格在模型打开时必须立即可用,无需用户执行任何手动步骤。

</correct_patterns>

<common_mistakes>

本节列出了构建 DCF 模型时应避免的所有 错误 模式。

错误:简化敏感性表格近似或占位文本

不要使用线性近似:

// 错误 - 线性近似
B97: =B88*(1+(0.096-0.116)) // 假设线性关系

// 错误 - 除法捷径
B105: =B88/(1+(E48-0.07)) // 未重新计算完整 DCF

不要留下占位文本:

// 错误 - 占位注释
"注意:请使用 Excel 数据表功能(数据 → 假设分析 → 数据表)填充敏感性表格。"

// 错误 - 空单元格
[因为“这很复杂”而留空单元格]

不要混淆术语:

  • ❌ "敏感性表格需要用到 Excel 的数据表功能"(错误——那是我们无法使用的特定 Excel 工具)
  • ✅ "敏感性表格是每个单元格中都包含公式的简单网格"(正确——这是我们要构建的)

为什么这些捷径是错的:

  • 线性近似公式实际上并没有重新计算 DCF——它们只是做了简单的数学调整
  • 关系不是线性的,因此结果将不准确
  • 占位文本需要用户手动干预
  • 交付时模型无法立即可用
  • 不够专业,无法直接交付给客户
  • 空白单元格 = 未完成的交付物

应拒绝的常见合理化说辞: “编写 75 个以上的公式感觉很复杂,所以我给用户留个注释,让他们手动完成。”

现实: 当你使用 Python 的 openpyxl 通过循环编写时,编写 75 个公式非常简单。每个公式都遵循相同的模式——只需替换行/列的值。这是交付物中必需的一部分。

正确做法: 用公式填充每个敏感性单元格,这些公式针对特定的假设组合重新计算完整的 DCF

错误:缺少单元格注释

不要这样做:

  • 创建所有硬编码输入但不加注释
  • 想着“我以后再添加”
  • 写“TODO: 添加来源”
  • 留下蓝色输入但无文档说明

为什么是错的:

  • 无法验证数据来源
  • 不符合 xlsx 技能要求
  • 无法直接审计
  • 浪费后期修复时间

正确做法: 在创建每个硬编码值的同时添加单元格注释

错误:公式中的行引用偏移

症状: FCF 部分引用了错误的假设行: D&A: =E29*$E$34 // 应为 $E$21,但引用了错误行 CapEx: =E29*$E$41 // 应为 $E$22,但行偏移了

为什么会发生:

  1. 先写公式
  2. 然后插入表头
  3. 所有行引用都偏移了
  4. 现在公式指向错误单元格 → #REF! 错误

--- 文档结束 --- 正确做法: 先锁定行布局,再写公式

错误:每个假设在不同情景下使用单行

不要这样构建假设:

Assumption,Bear,Base,Bull
Revenue Growth FY1,10%,13%,16%
Revenue Growth FY2,9%,12%,15%

这种垂直布局难以查看每个情景下各年的进展。

为什么这样是错的:

  • 难以看到每个情景中假设在各年间的演变
  • 更难在整个预测期内比较情景假设
  • 审查情景逻辑时不够直观

正确做法:

  • 为每个情景(熊市、基准、牛市)创建独立的区块
  • 在每个区块内,横向展示各预测年份的假设
  • 这样每个情景的假设更容易作为一个整体审查

错误:没有边框

不要交付没有边框的模型:

  • 没有区域划分
  • 所有单元格混在一起
  • 难以阅读且不专业

为什么这样是错的:

  • 不适合交付客户
  • 难以导航
  • 看起来像业余作品

正确做法: 在所有主要区域周围添加边框

错误:错误的字体颜色或无字体颜色区分

不要这样做:

  • 所有文本都是黑色
  • 只使用填充色(不改变字体颜色)
  • 混淆哪些单元格是蓝色 vs 黑色

为什么这样是错的:

  • 无法区分输入项与公式
  • 审计变得不可能
  • 违反 xlsx 技能要求

正确做法: 所有硬编码输入使用蓝色文本,所有公式使用黑色文本,工作表链接使用绿色文本

错误:基于毛利润计算营业费用

不要这样做: S&M: =E33*0.15 // E33 = 毛利润 (错误)

为什么这样是错的:

  • 营业费用与收入成正比,而非毛利润
  • 产生不现实的利润率变化
  • 不是企业实际运营的方式

正确做法: S&M: =E29*0.15 // E29 = 收入 (正确)

五大错误总结

  1. 公式行引用错误 → 在编写公式之前定义所有行位置
  2. 缺少单元格注释 → 在创建单元格时添加注释,而不是最后
  3. 简化的敏感性表格 → 用完整的DCF重新计算公式填充所有单元格,而不是近似值
  4. 情景块引用错误 → 确保IF公式从正确的熊市/基准/牛市区块中取值
  5. 没有边框 → 添加专业的区域边框,使模型可以交付客户

此外,还要注意以下错误:

WACC 计算错误

  • 在资本结构中混淆账面价值和市场价值
  • 错误地使用权益贝塔而非资产/无杠杆贝塔
  • 对债务成本应用错误的税率
  • 无风险利率错误(必须使用当前10年期国债收益率)
  • 未能调整净债务与净现金头寸

增长假设缺陷

  • 终端增长率 > WACC(创造无限价值)
  • 预测增长率与历史业绩不一致
  • 忽略行业增长约束
  • 收入增长与单位经济不匹配
  • 利润率扩张缺乏运营依据

终值错误

  • 使用错误的增长方法(永续增长 vs 退出倍数)
  • 终值占企业价值超过80%(暗示过度依赖)
  • 终端利润率与稳态假设不一致
  • 终值的折现期间错误

现金流预测常见错误

  • 运营费用基于毛利润而非营收
  • 折旧摊销/资本支出比例与业务模式不匹配
  • 营运资本变动未正确计算
  • 不同年份间税率不一致
  • NOPAT(税后净营业利润)计算错误

这些错误最为常见。在开始构建任何 DCF 模型前,请重新阅读本节。

</common_mistakes>

创建 Excel 文件

本技能使用 xlsx 技能进行所有电子表格操作。 xlsx 技能提供:

  • 标准化的公式构建规则
  • 数字格式规范
  • 通过 recalc.py 脚本自动重新计算公式
  • 全面的错误检查与验证

本技能创建的所有 Excel 文件必须遵循 xlsx 技能要求,包括零公式错误和正确的重新计算。

质量评分标准

每个 DCF 模型必须最大化满足以下条件:

  1. 现实的营收与利润率假设,基于历史表现
  2. 合适的资本成本计算,采用正确的 CAPM 方法
  3. 全面的敏感性分析,展示估值范围
  4. 清晰的终值计算,附带支持性理由
  5. 专业的模型结构,支持情景分析
  6. 所有关键假设的透明文档

输入要求

最低输入要求

  1. 公司标识:股票代码或公司名称
  2. 增长假设:预测期内的营收增长率(或选择“使用一致预期”)
  3. 可选参数
    • 预测期(默认:5 年)
    • 情景案例(悲观/基准/乐观增长与利润率假设)
    • 终值增长率(默认:2.5-3.0%)
    • 如果不使用 CAPM,可提供特定 WACC 输入

Excel 模型结构

工作表架构

创建两个工作表

  1. DCF - 主估值模型,底部包含敏感性分析
  2. WACC - 资本成本计算

关键:敏感性表格放在 DCF 工作表的底部(而非单独工作表),以便将所有估值输出集中在一起。

公式重新计算(强制要求)

创建或修改 Excel 模型后,必须使用 excel-author 技能中的 recalc.py 脚本重新计算所有公式

python recalc.py [path_to_excel_file] [timeout_seconds]

示例:

python recalc.py AAPL_DCF_Model_2025-10-12.xlsx 30

该脚本将:

  • 使用 LibreOffice 重新计算所有工作表中的所有公式
  • 扫描所有单元格以查找 Excel 错误(#REF!、#DIV/0!、#VALUE!、#NAME?、#NULL!、#NUM!、#N/A)
  • 返回包含错误位置和数量的详细 JSON

预期输出格式:

{
"status": "success", // 或 "errors_found"
"total_errors": 0, // 错误总数
"total_formulas": 42, // 文件中的公式数量
"error_summary": {} // 仅当发现错误时出现
}

如果发现错误,输出将包含详细信息:

{
"status": "errors_found",
"total_errors": 2,
"total_formulas": 42,
"error_summary": {
"#REF!": {
"count": 2,
"locations": ["DCF!B25", "DCF!C25"]
}
}
}

修复所有错误,并重新运行 recalc.py,直到状态为 "success" 后,再交付模型。

格式标准

重要:请遵循 xlsx 技能中关于公式构建规则和数字格式约定的要求。DCF 技能增加了特定的视觉呈现标准。

配色方案 - 两层结构

第 1 层:字体颜色(xlsx 技能强制要求)

  • 蓝色文本(RGB: 0,0,255):所有硬编码输入(股价、股份数、历史数据、假设)
  • 黑色文本(RGB: 0,0,0):所有公式和计算结果
  • 绿色文本(RGB: 0,128,0):指向其他工作表的链接(WACC 工作表引用)

第 2 层:填充颜色 — 专业蓝/灰调色板(除非用户另有指定,否则为默认值)

  • 保持简洁 — 仅使用蓝色和灰色进行填充。不要引入绿色、黄色、橙色或多种强调色。颜色过多的模型看起来不专业。
  • 默认填充调色板:
    • 章节标题:深蓝色(RGB: 31,78,121 / #1F4E79)背景,白色加粗文本
    • 子标题/列标题:浅蓝色(RGB: 217,225,242 / #D9E1F2)背景,黑色加粗文本
    • 输入单元格:浅灰色(RGB: 242,242,242 / #F2F2F2)背景,蓝色字体 — 或者如果你追求极简,也可以只用白色背景加蓝色字体
    • 计算单元格:白色背景,黑色字体
    • 输出/汇总行(每股价值、企业价值等):中蓝色(RGB: 189,215,238 / #BDD7EE)背景,黑色加粗字体
  • 仅此而已 — 3 种蓝色 + 1 种灰色 + 白色。 克制住添加更多颜色的冲动。
  • 用户提供的模板或明确的颜色偏好始终优先于这些默认值。

两层结构如何协同工作:

  • 输入单元格:蓝色字体 + 浅灰色填充 = "硬编码输入"
  • 公式单元格:黑色字体 + 白色背景 = "计算值"
  • 工作表链接:绿色字体 + 白色背景 = "来自其他工作表的引用"
  • 关键输出:黑色加粗字体 + 中蓝色填充 = "这是答案"

字体颜色告诉你它是什么(输入/公式/链接)。填充颜色告诉你在哪里(标题/数据/输出)。

边框标准(专业外观必需)

粗边框(1.5pt)用于主要区域:

  • 关键输入区域
  • 预测假设区域
  • 5年现金流预测区域
  • 终值区域
  • 估值汇总区域
  • 每个敏感性分析表格

中等边框(1pt)用于子区域之间:

  • 公司详情 vs 历史表现
  • 增长假设 vs 息税前利润率 vs 自由现金流参数

细边框(0.5pt)用于数据表格:

  • 情景假设表格(悲观 | 基准 | 乐观 | 选定)
  • 历史与预测财务数据矩阵

无边框: 表格内的单个单元格(保持整洁、易于浏览)

边框是强制性的 - 没有专业边框的模型无法交付给客户。

数字格式(遵循 xlsx 技能标准):

  • 年份:格式化为文本字符串(例如,"2024" 而不是 "2,024")
  • 百分比0.0%(一位小数)
  • 货币:百万单位用 $#,##0;每股用 $#,##0.00 - 始终在标题中注明单位("收入(百万美元)")
  • 零值:使用数字格式将所有零显示为 "-"(例如,$#,##0;($#,##0);-
  • 大数字#,##0 并带千位分隔符
  • 负数:用括号 (#,##0) 表示(不要用减号) 单元格注释(所有硬编码输入必填)

按照 xlsx 技能要求,所有硬编码值必须附有记录来源的单元格注释。格式:来源:[系统/文档],[日期],[参考],[URL(如适用)]

关键:在创建单元格的同时添加注释,不要留到最后再做。

DCF 工作表详细结构

第 1 部分:表头

行,内容
1,[公司名称] DCF 模型
2,股票代码:[XXX] | 日期:[日期] | 会计年度截止日:[FYE]
3,空行
4,场景选择器单元格(1=悲观 2=基准 3=乐观)
5,场景名称显示(公式:=IF([选择器]=1,"悲观",IF([选择器]=2,"基准","乐观")))

第 2 部分:市场数据(不随场景变化)

项目,数值
当前股价,$XX.XX
流通股数(百万),XX.X
总市值(百万美元),[公式]
净债务(百万美元),XXX [若为净现金则显示负数]

第 3 部分:DCF 场景假设

为每个场景(悲观、基准、乐观)分别创建假设块,其中包含 DCF 特有的假设(收入增长率、EBIT 利润率、税率、D&A 占收入比、资本支出占收入比、净营运资本变动占收入变动比、终值增长率、加权平均资本成本),并按预测年份水平排列。每个块必须包含区域标题、显示预测年份(FY1、FY2 等)的列标题行,以及数据行。具体布局请参见 &lt;correct_patterns&gt; 部分中的“正确的假设表结构”。

第 4 部分:历史及预测财务报表

引用一个汇总列(例如“所选场景”),该列从场景假设块中拉取数据,而不是在每个预测行中散落 IF 公式。

利润表(百万美元),2020A,2021A,2022A,2023A,2024E,2025E,2026E
收入,XXX,XXX,XXX,XXX,[=E29*(1+$E$10)],[=F29*(1+$E$11)],[=G29*(1+$E$12)]
% 增长,XX%,XX%,XX%,XX%,[=E29/D29-1],[=F29/E29-1],[=G29/F29-1]
,,,,,,
毛利润,XXX,XXX,XXX,XXX,[=E29*E33],[=F29*F33],[=G29*G33]
% 毛利率,XX%,XX%,XX%,XX%,[=E33/E29],[=F33/F29],[=G33/G29]
,,,,,,
营业费用:,,,,,,
销售与营销,XXX,XXX,XXX,XXX,[=E29*0.15],[=F29*0.14],[=G29*0.13]
研发,XXX,XXX,XXX,XXX,[=E29*0.12],[=F29*0.11],[=G29*0.10]
管理费用,XXX,XXX,XXX,XXX,[=E29*0.08],[=F29*0.07],[=G29*0.07]
营业费用合计,XXX,XXX,XXX,XXX,[=E36+E37+E38],[=F36+F37+F38],[=G36+G37+G38]
,,,,,,
EBIT,XXX,XXX,XXX,XXX,[=E33-E39],[=F33-F39],[=G33-G39]
% 利润率,XX%,XX%,XX%,XX%,[=E41/E29],[=F41/F29],[=G41/G29]
,,,,,,
税费,(XX),(XX),(XX),(XX),[=E41*$E$24],[=F41*$E$24],[=G41*$E$24]
税率,XX%,XX%,XX%,XX%,[=E43/E41],[=F43/F41],[=G43/G41]
,,,,,,
NOPAT,XXX,XXX,XXX,XXX,[=E41-E43],[=F41-F43],[=G41-G43]

关键公式模式

  • 收入增长:=E29*(1+$E$10) 其中 $E$10 是第一年增长的汇总列
  • 不要写成:=E29*(1+IF($B$6=1,$B$10,IF($B$6=2,$C$10,$D$10)))

这种方法更简洁,便于检查,并且通过集中场景逻辑来防止公式错误。

第 5 部分:自由现金流搭建

关键:验证行引用是否指向正确的假设行。创建公式后立即测试。

现金流量表(百万美元),2020A,2021A,2022A,2023A,2024E,2025E,2026E
NOPAT,XXX,XXX,XXX,XXX,[=E45],[=F45],[=G45]
(+) D&A,XXX,XXX,XXX,XXX,[=E29*$E$21],[=F29*$E$21],[=G29*$E$21]
% of Rev,XX%,XX%,XX%,XX%,[=E58/E29],[=F58/F29],[=G58/G29]
(-) 资本支出,(XX),(XX),(XX),(XX),[=E29*$E$22],[=F29*$E$22],[=G29*$E$22]
% of Rev,XX%,XX%,XX%,XX%,[=E60/E29],[=F60/F29],[=G60/G29]
(-) 净营运资本变动,(XX),(XX),(XX),(XX),[=(E29-D29)*$E$23],[=(F29-E29)*$E$23],[=(G29-F29)*$E$23]
% of Δ Rev,XX%,XX%,XX%,XX%,[=E62/(E29-D29)],[=F62/(F29-E29)],[=G62/(G29-F29)]
,,,,,,
无杠杆自由现金流,XXX,XXX,XXX,XXX,[=E57+E58-E60-E62],[=F57+F58-F60-F62],[=G57+G58-G60-G62]

行引用示例(基于布局规划):

  • $E$21 = 折旧与摊销 % 假设(合并列,第21行)
  • $E$22 = 资本支出 % 假设(合并列,第22行)
  • $E$23 = 净营运资本 % 假设(合并列,第23行)
  • E29 = 当年收入(第29行)
  • E45 = 当年税后净营业利润(第45行)

编写公式前:确认这些行号与实际布局一致。先测试一列,再横向复制。

第6节:折现与估值

DCF Valuation,2024E,2025E,2026E,2027E,2028E,Terminal
Unlevered FCF ($M),XXX,XXX,XXX,XXX,XXX,
Period,0.5,1.5,2.5,3.5,4.5,
Discount Factor,0.XX,0.XX,0.XX,0.XX,0.XX,
PV of FCF ($M),XXX,XXX,XXX,XXX,XXX,
,,,,,,
Terminal FCF ($M),,,,,,,XXX
Terminal Value ($M),,,,,,,XXX
PV Terminal Value ($M),,,,,,,XXX
,,,,,,
Valuation Summary ($M),,,,,,
Sum of PV FCFs,XXX,,,,,
PV Terminal Value,XXX,,,,,
Enterprise Value,XXX,,,,,
(-) Net Debt,(XX),,,,,
Equity Value,XXX,,,,,
,,,,,,
Shares Outstanding (M),XX.X,,,,,
IMPLIED PRICE PER SHARE,$XX.XX,,,,,
Current Stock Price,$XX.XX,,,,,
Implied Upside/(Downside),XX%,,,,,

WACC 工作表结构

COST OF EQUITY CALCULATION,,
Risk-Free Rate (10Y Treasury),X.XX%,[黄色输入]
Beta (5Y monthly),X.XX,[黄色输入]
Equity Risk Premium,X.XX%,[黄色输入]
Cost of Equity,X.XX%,[计算值-蓝色]
,,
COST OF DEBT CALCULATION,,
Credit Rating,AA-,[黄色输入]
Pre-Tax Cost of Debt,X.XX%,[黄色输入]
Tax Rate,XX.X%,[链接至 DCF 工作表]
After-Tax Cost of Debt,X.XX%,[计算值-蓝色]
,,
CAPITAL STRUCTURE,,
Current Stock Price,$XX.XX,[链接至 DCF]
Shares Outstanding (M),XX.X,[链接至 DCF]
Market Capitalization ($M),"X,XXX",[计算值]
,,
Total Debt ($M),XXX,[黄色输入]
Cash & Equivalents ($M),XXX,[黄色输入]
Net Debt ($M),XXX,[计算值]
,,
Enterprise Value ($M),"X,XXX",[计算值]
,,
WACC CALCULATION,Weight,Cost,Contribution
Equity,XX.X%,X.X%,X.XX%
Debt,XX.X%,X.X%,X.XX%
,,
WEIGHTED AVERAGE COST OF CAPITAL,X.XX%,[绿色输出]

关键WACC公式:

Market Cap = Price × Shares
Net Debt = Total Debt - Cash
Enterprise Value = Market Cap + Net Debt
Equity Weight = Market Cap / EV
Debt Weight = Net Debt / EV
WACC = (Cost of Equity × Equity Weight) + (After-tax Cost of Debt × Debt Weight)

敏感性分析(DCF工作表底部)

术语提醒:“敏感性表格”= 简单的二维网格,包含行标题、列标题以及每个数据单元格中的公式。不是Excel的“数据表”功能(数据 → 模拟分析 → 数据表)。你将使用openpyxl将常规Excel公式写入每个单元格。

位置:DCF工作表的第87行及之后(不是单独的工作表)

三个敏感性表格,纵向堆叠:

  1. WACC vs 终值增长率(第87-100行)- 5x5网格 = 25个单元格含公式
  2. 收入增长 vs EBIT 利润率(第102-115行)- 5x5网格 = 25个单元格含公式
  3. Beta vs 无风险利率(第117-130行)- 5x5网格 = 25个单元格含公式

需写入的公式总数:75(这是必需的,非可选)

关键:所有敏感性表格单元格必须通过编程方式用 openpyxl 写入公式。不要使用线性近似快捷方式。不要留下占位文本或关于手动步骤的说明。不要以“太复杂”为由让单元格留空——使用 Python 循环生成公式。 表格设置:

  1. 创建带行/列标题的表格结构(待测试的假设值)
  2. 在每个数据单元格中填入公式,该公式:
    • 使用行标题值(例如 WACC = 9.0%)
    • 使用列标题值(例如终值增长率 = 3.0%)
    • 用这些特定假设重新计算完整的 DCF
    • 返回该情景下的隐含股价
  3. 交付时,所有单元格必须包含可正常工作的公式
  4. 使用条件格式设置单元格:较高值用绿色渐变,较低值用红色渐变
  5. 将基准情形的单元格加粗
  6. 表格之间留 1-2 行空行

无需手动干预——用户打开文件时,敏感性表格必须完全可用。

案例选择器实现

三案例框架:

悲观情形

  • 保守的收入增长(历史范围的低端)
  • 利润率压缩或无扩张
  • 更高的 WACC(风险溢价增加)
  • 更低的终值增长率
  • 更高的资本支出假设

基准情形

  • 共识或管理层指引的收入增长
  • 基于经营杠杆的适度利润率扩张
  • 当前市场隐含的 WACC
  • 与 GDP 一致的终值增长率(2.5-3.0%)
  • 标准的资本支出假设

乐观情形

  • 乐观的收入增长(预测的高端)
  • 显著利润率扩张
  • 更低的 WACC(风险溢价降低)
  • 更高的终值增长率(3.5-5.0%)
  • 降低资本支出强度

公式实现:

不要到处使用嵌套的 IF 公式。相反,创建一个合并列,使用 INDEX 或 OFFSET 公式从相应情景块中提取值。

推荐模式(使用 INDEX): =INDEX(B10:D10, 1, $B$6),其中 B10:D10 = 悲观/基准/乐观值,1 = 行偏移,$B$6 = 案例选择器单元格(1、2 或 3)

然后在所有预测中引用该合并列: 收入 第1年: =D29*(1+$E$10),其中 $E$10 是第1年增长率的合并列值。

这种方法集中了情景逻辑,使模型更易于审计和维护。

交付物结构

文件命名[Ticker]_DCF_Model_[Date].xlsx

两个工作表

  1. DCF - 包含悲观/基准/乐观情形的完整模型 + 底部三个敏感性表格(WACC vs 终值增长率,收入增长 vs EBIT 利润率,Beta vs 无风险利率)
  2. WACC - 资本成本计算

关键特性:案例选择器(1/2/3),使用 INDEX/OFFSET 公式的合并列,颜色编码的单元格,所有输入均有单元格注释,专业的边框

最佳实践

模型构建

  1. 逐步构建:完成每个部分后再进入下一部分
  2. 边建边测试:输入示例数字以验证公式
  3. 使用一致的结构:类似的计算遵循类似的模式
  4. 注释复杂公式:为不寻常的计算添加注释
  5. 内置检查:在适用处进行求和检查与平衡检查

文档说明

  1. 记录所有假设:解释关键输入背后的推理
  2. 引用数据来源:注明每个数据点的来源
  3. 解释方法论:描述任何非标准的方法
  4. 标出不确定性:突出显示可见性有限的领域

质量控制

  1. 交叉验证计算:通过多种方式复核数学计算
  2. 压力测试假设:进行敏感性分析以确保模型稳健
  3. 同行评审:请其他人检查公式
  4. 版本控制:随着工作进展保存不同版本

常见变体

高增长科技公司

  • 更长的预测期(7-10年)
  • 更高的初始增长率(20-30%)
  • 长期显著扩张的利润率
  • 更高的加权平均资本成本(WACC,12-15%)
  • 建模单位经济性(用户数、每用户平均收入等)

成熟/稳定公司

  • 较短的预测期(3-5年)
  • 适度的增长率(GDP +1-3%)
  • 稳定的利润率
  • 较低的WACC(7-9%)
  • 重点关注现金生成和资本配置

周期性公司

  • 建模需贯穿整个经济周期
  • 以周期中期水平对利润率进行正常化
  • 考虑低谷和高峰情景
  • 根据周期性调整贝塔系数

多业务分部公司

  • 对每个业务单元分别进行折现现金流模型
  • 不同分部的增长率和利润率各不相同
  • 分项加总估值
  • 考虑协同效应

故障排除

如果遇到错误或不合理结果,请阅读 TROUBLESHOOTING.md 获取详细调试指导。

工作流集成

开始构建DCF模型时

  1. 收集市场数据

    • 检查是否有可用的MCP服务器来获取当前市场数据
    • 使用网络搜索/抓取获取股价、贝塔系数及其他市场指标
    • 如果需要特定数据,向用户请求
  2. 收集历史财务数据

    • 检查是否有可用的MCP服务器(如Daloopa等)
    • 若MCP不可用,向用户请求
    • 必要时从10-K报告中手动提取
  3. 按照本技能详述的DCF方法论开始构建模型

模型构建过程中

  1. 使用openpyxl构建Excel模型,公式应使用公式引用(而非硬编码值)
  2. 遵循xlsx技能约定进行公式构建和格式设置
  3. 仅在用户要求或提供了特定品牌指南时才应用填充颜色

交付模型前(必须执行)

  1. 验证结构

    • 熊市/基准/牛市情景块,包含跨预测期的假设
    • 情景选择器功能正常,公式引用正确的场景块
    • 敏感性表格位于DCF工作表底部(而非独立工作表)
    • 字体颜色:蓝色为输入值,黑色为公式,绿色为工作表链接
    • 所有硬编码输入均添加单元格批注
    • 主要区域周围添加专业边框
  2. 重新计算公式:运行 python recalc.py model.xlsx 30

  3. 检查输出

    • 如果 status"success" → 继续到第4步
    • 如果 status"errors_found" → 检查 error_summary 并阅读 TROUBLESHOOTING.md 获取调试指导
  4. 修正错误并重新运行 recalc.py,直至状态为 "success"

  5. 抽查公式

    • 测试一个自由现金流公式——它是否正确引用了相应的假设行?
    • 切换情景选择器——合并列是否正确更新?
    • 验证收入公式引用的是合并列(而非嵌套的IF公式)
  6. 交付模型

可用数据源

  • MCP 服务器:如果配置了(如 Daloopa 用于历史财务数据)
  • 网络搜索/获取:用于当前股价、Beta 系数和市场数据
  • 用户提供的数据:历史财务数据、一致预期
  • 手动提取:SEC EDGAR 文件作为备选

最终输出检查清单

在交付 DCF 模型之前:

必需项:

  • 运行 python recalc.py model.xlsx 30 直到状态显示为 "success"(零公式错误)
  • 两个工作表:DCF(底部包含敏感性分析)、WACC
  • 字体颜色:蓝色=输入项,黑色=公式,绿色=工作表链接
  • 所有硬编码输入项都添加单元格注释
  • 敏感性表格完全填充公式
  • 主要部分周围添加专业的边框

验证项:

  • 运营支出基于收入(而非毛利润)
  • 终值占企业价值的 50-70%
  • 终值增长率 < WACC
  • 税率 21-28%
  • 文件命名:[Ticker]_DCF_Model_[Date].xlsx

数据源——优先使用 MCP,网络作为备选

下面许多段落中提到了“使用 S&P Kensho MCP / Daloopa MCP / FactSet MCP”。这些是来自原始 Cowork 插件上下文中的商业金融数据 MCP。在 Hermes 中:

  • 如果你配置了任何结构化金融数据的 MCP(Hermes 支持 MCP——参见 native-mcp 技能),请优先使用它来获取可比公司、先例交易和文件。
  • 否则,回退到:
    • 使用 web_search / web_extract 查询 SEC EDGAR(https://www.sec.gov/cgi-bin/browse-edgar)获取美国文件
    • 公司投资者关系页面获取新闻稿、财报资料
    • 使用 browser_navigate 访问交互式数据门户
    • 用户提供的数据(当上下文中没有时,明确向用户询问)
  • 绝不捏造数据。如果某个倍数、先例或文件编号无法获取,请将该单元格标记为 [UNSOURCED] 并告知用户。

归属说明

本技能改编自 Anthropic 的 Claude for Financial Services 插件套件(Apache-2.0 许可证)。已移除 Office-JS / Cowork 实时 Excel 路径;此版本通过 excel-author 技能的约定,针对无头 openpyxl 进行适配。原始来源:https://github.com/anthropics/financial-services