跳到主要内容

DCF 模型

在 Excel 中构建机构级质量的 DCF(现金流折现)估值模型——包括收入预测、自由现金流(FCF)构建、加权平均资本成本(WACC)、终值、悲观/基准/乐观情景以及 5x5 敏感性表。与 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 在触发此技能时加载的完整技能定义。这是技能激活时代理所看到的指令。

环境

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

DCF 模型构建器

概述

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

工具

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

关键约束 - 请先阅读这些内容

这些约束适用于所有 DCF 模型构建过程。开始前请审阅:

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

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

逐步与用户验证(不要端到端构建):

  • 数据检索后 → 向用户展示原始输入块(收入、利润率、股份数、净债务)并在进行预测前确认
  • 收入预测后 → 展示预测的收入顶线和增长率,在构建利润率明细前确认
  • FCF 构建后 → 展示完整的 FCF 时间表,在计算 WACC 前确认逻辑
  • WACC 后 → 展示计算过程和输入,在折现前确认
  • 终值 + 现值后 → 展示股权价值桥接(企业价值 EV → 股权价值 → 每股价值),在敏感性表前确认
  • 在每个阶段捕捉错误——如果在构建敏感性表后发现错误的利润率假设,意味着需要重建下游所有内容

敏感性表:

  • 使用奇数行和列(标准:5×5,有时 7×7)——这保证有一个真正的中心单元格
  • 中心单元格 = 基准情景。 构建轴值,使中间行标题和中间列标题完全等于模型的实际假设(例如,如果基准 WACC = 9.0%,则中间行为 9.0%;如果终值增长率 g = 3.0%,则中间列为 3.0%)。因此,中心单元格的输出必须等于模型的实际隐含股价——这是验证表格构建正确的健全性检查。
  • 高亮显示中心单元格,使用中蓝色填充 (#BDD7EE) + 粗体字体,以便立即识别哪个单元格是基准情景。
  • 用完整的 DCF 重计算公式填充 所有 单元格(通常 3 个表 × 25 个单元格 = 75 个)
  • 使用 openpyxl 循环以编程方式写入公式
  • 占位符文本, 线性近似, 需要的手动步骤
  • 每个单元格必须针对该假设组合重新计算完整的 DCF

单元格批注:

  • 在创建每个硬编码值 添加单元格批注
  • 格式:“来源:[系统/文档], [日期], [参考], [URL 如果适用]”
  • 每个蓝色输入在移至下一部分之前必须有批注
  • 不要推迟到最后或写“TODO: 添加来源”

模型布局规划:

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

公式重算:

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

情景模块:

  • 为悲观/基准/乐观情况创建独立的模块
  • 在每个模块内,横向展示各预测年份的假设
  • 使用 IF 公式:=IF($B$6=1,[Bear cell],IF($B$6=2,[Base cell],[Bull cell]))
  • 验证公式是否引用了正确的情景模块单元格

DCF 流程工作流

第 1 步:数据检索与验证

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

数据源优先级:

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

验证清单:

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

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

分析并记录:

  • 收入增长趋势:计算复合年均增长率 (CAGR),识别驱动因素
  • 利润率演变:追踪毛利率、EBIT 利润率、自由现金流 (FCF) 利润率
  • 资本密集度:折旧与摊销 (D&A) 和资本支出 (CapEx) 占收入的百分比
  • 营运资本效率:净营运资本 (NWC) 变化占收入增长的百分比
  • 回报指标:投入资本回报率 (ROIC)、净资产收益率 (ROE) 趋势

创建显示以下内容的汇总表:

Historical Metrics (LTM):
Revenue: $X million
Revenue growth: X% CAGR
Gross margin: X%
EBIT margin: X%
D&A % of revenue: X%
CapEx % of revenue: X%
FCF margin: X%

第 3 步:构建收入预测

方法论:

  1. 从最新的实际收入开始(最近十二个月 LTM 或最近一个财年)
  2. 为每个预测年份应用增长率
  3. 同时显示美元金额和计算出的增长百分比

增长率框架:

  • 第 1-2 年:较高的增长率,反映近期可见性
  • 第 3-4 年:逐渐缓和至行业平均水平
  • 第 5 年及以后:接近永续增长率

公式结构:

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

三种情景方法:

Bear Case: Conservative growth (e.g., 8-12%)
Base Case: Most likely scenario (e.g., 12-16%)
Bull Case: Optimistic growth (e.g., 16-20%)

第 4 步:运营费用建模

固定/可变成本分析:

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

  • 销售与营销 (S&M):通常占收入的 15-40%,具体取决于商业模式
  • 研发 (R&D):科技公司通常占 10-30%
  • 一般及行政 (G&A):通常占收入的 8-15%,随着公司规模扩大显示出杠杆效应

关键原则:

  • 所有百分比均基于收入,而非毛利
  • 模拟经营杠杆:随着收入规模扩大,百分比应下降
  • 为 S&M、R&D、G&A 保持单独的明细项目
  • 计算 EBIT = 毛利 - 总运营费用

利润率扩张框架:

Current State → Target State (Year 5)
Gross Margin: X% → Y% (justify based on scale, efficiency)
EBIT Margin: X% → Y% (result of revenue growth + opex leverage)

第 5 步:自由现金流计算

按正确顺序构建 FCF:

EBIT
(-) Taxes (EBIT × Tax Rate)
= NOPAT (Net Operating Profit After Tax)
(+) D&A (non-cash expense, % of revenue)
(-) CapEx (% of revenue, typically 4-8%)
(-) Δ NWC (change in working capital)
= Unlevered Free Cash Flow

营运资本建模:

  • 计算为收入变化量(delta revenue)的百分比
  • 典型范围:收入变化量的 -2% 到 +2%
  • 负数 = 现金来源(营运资本释放)
  • 正数 = 现金使用(营运资本积累)

维护性资本支出与增长性资本支出:

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

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

用于股权成本的 CAPM 方法论:

Cost of Equity = Risk-Free Rate + Beta × Equity Risk Premium

Where:
- Risk-Free Rate = Current 10-Year Treasury Yield
- Beta = 5-year monthly stock beta vs market index
- Equity Risk Premium = 5.0-6.0% (market standard)

债务成本计算:

After-Tax Cost of Debt = Pre-Tax Cost of Debt × (1 - Tax Rate)

Determine Pre-Tax Cost of Debt from:
- Credit rating (if available)
- Current yield on company bonds
- Interest expense / Total Debt from financials

资本结构权重:

Market Value Equity = Current Stock Price × Shares Outstanding
Net Debt = Total Debt - Cash & Equivalents
Enterprise Value = Market Cap + Net Debt

Equity Weight = Market Cap / Enterprise Value
Debt Weight = Net Debt / Enterprise Value

WACC = (Cost of Equity × Equity Weight) + (After-Tax Cost of Debt × Debt Weight)

特殊情况:

  • 净现金头寸:如果现金 > 债务,净债务为负数
    • 债务权重可能为负
    • 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)^期数

现值计算:

For each projection year:
PV of FCF = Unlevered FCF × Discount Factor

Example (Year 1):
FCF = $1,000
WACC = 10%
Period = 0.5
Discount Factor = 1 / (1.10)^0.5 = 0.9535
PV = $1,000 × 0.9535 = $954

预测期选择:

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

第 8 步:终值计算

永续增长法(首选):

Terminal FCF = Final Year FCF × (1 + Terminal Growth Rate)
Terminal Value = Terminal FCF / (WACC - Terminal Growth Rate)

Critical Constraint: Terminal Growth < WACC (otherwise infinite value)

永续增长率选择:

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

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

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

Terminal Value = Final Year EBITDA × Exit Multiple

Where Exit Multiple comes from:
- Industry comparable trading multiples
- Precedent transaction multiples
- Typical range: 8-15x EBITDA

终值的现值:

PV of Terminal Value = Terminal Value / (1 + WACC)^Final Period

Where Final Period accounts for timing:
5-year model with mid-year convention: Period = 4.5

终值合理性检查:

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

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

估值摘要结构:

(+) Sum of PV of Projected FCFs = $X million
(+) PV of Terminal Value = $Y million
= Enterprise Value = $Z million

(-) Net Debt [or + Net Cash if negative] = $A million
= Equity Value = $B million

÷ Diluted Shares Outstanding = C million shares
= Implied Price per Share = $XX.XX

Current Stock Price = $YY.YY
Implied Return = (Implied Price / Current Price) - 1 = XX%

关键调整项:

  • 净债务 = 总债务 - 现金及等价物
    • 如果为正数:从企业价值(EV)中减去(降低股权价值)
    • 如果为负数(净现金):加到企业价值(EV)中(增加股权价值)
  • 使用稀释后股数:包括期权、限制性股票单位(RSU)、可转换证券
  • 其他调整项(如适用):
    • 少数股东权益
    • 养老金负债
    • 经营租赁义务

估值输出格式:

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 与终值增长率 - 显示企业价值对折现率和永续增长率的敏感性
  2. 收入增长率与 EBIT 利润率 - 显示顶层收入增长和经营杠杆的影响
  3. Beta 系数与无风险利率 - 显示对股权成本组成部分的敏感性

实施方法:这些是简单的二维网格(不是 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,[悲观块单元格],IF($B$6=2,[基准块单元格],[乐观块单元格]))

合并列方法集中了逻辑,使模型更易于审计。

正确的收入预测模式

创建带有 INDEX 公式的合并列,然后在预测中引用它:

步骤 1 - FY1 增长率的合并列: =INDEX([悲观 FY1 增长率]:[乐观 FY1 增长率], 1, $B$6)

步骤 2 - 收入预测引用合并列: 第 1 年收入: =D29*(1+$E$10)

其中:

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

这种方法比在每个预测公式中嵌入 IF 语句更简洁,并且更容易审计正在使用的情景假设。

正确的 FCF 公式模式

使用带有 INDEX 公式的合并列,然后在 FCF 计算中引用它们:

合并列方法:

Item,Formula,Reference
D&A,=E29*$E$21,$E$21 = consolidation column for D&A %
CapEx,=E29*$E$22,$E$22 = consolidation column for CapEx %
Δ NWC,=(E29-D29)*$E$23,$E$23 = consolidation column for NWC %
Unlevered FCF,=E57+E58-E60-E62,E57=NOPAT E58=D&A E60=CapEx E62=Δ NWC

每个合并列单元格都包含一个 INDEX 公式,根据案例选择器从相应的情景块中提取数据。这保持了预测公式的简洁性和可审计性。

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

正确的单元格注释格式

每个硬编码值都需要遵循此格式:

"来源: [系统/文档], [日期], [参考], [URL 如适用]"

示例:

Item,Source Comment
Stock price,Source: Market data script 2025-10-12 Close price
Shares outstanding,Source: 10-K FY2024 Page 45 Note 12
Historical revenue,Source: 10-K FY2024 Page 32 Consolidated Statements
Beta,Source: Market data script 2025-10-12 5-year monthly beta
Consensus estimates,Source: Management guidance Q3 2024 earnings call

正确的假设表结构

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

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

结构:

BEAR CASE ASSUMPTIONS (section header - merge across columns A:G)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),X%,X%,X%,X%,X%
EBIT Margin (%),X%,X%,X%,X%,X%
Terminal Growth,X%,,,,
WACC,X%,,,,

BASE CASE ASSUMPTIONS (section header - merge across columns A:G)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),X%,X%,X%,X%,X%
EBIT Margin (%),X%,X%,X%,X%,X%
Terminal Growth,X%,,,,
WACC,X%,,,,

BULL CASE ASSUMPTIONS (section header - merge across columns A:G)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),X%,X%,X%,X%,X%
EBIT Margin (%),X%,X%,X%,X%,X%
Terminal Growth,X%,,,,
WACC,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 的“数据表”(Data Table)功能。这些是简单的网格,你需要使用 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] ← middle row = base WACC
9.5%, [fml], [fml], [fml], [fml], [fml]
10.0%, [fml], [fml], [fml], [fml], [fml]

middle col = base terminal g

★ = 中心单元格。 其公式输出必须等于模型的实际隐含股价(来自估值摘要)。对此单元格应用中蓝色填充(#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 作为折现率的自由现金流现值总和] + [使用 B$87 作为增长率和 $A88 作为 WACC 的终值] - [净债务]) / [股数]

关键 - 为 5x5 网格中的每个单元格编写公式(每个表格 25 个单元格,共 75 个单元格)。 使用 openpyxl 在循环中以编程方式写入这些公式。不要跳过此步骤或保留占位符文本。

Python 实现模式:

# Pseudocode for populating sensitivity table
for row_idx, wacc_value in enumerate(wacc_range):
for col_idx, term_growth_value in enumerate(term_growth_range):
# Build formula that uses wacc_value and term_growth_value
formula = f"=<DCF recalc using {wacc_value} and {term_growth_value}>"
ws.cell(row=start_row+row_idx, column=start_col+col_idx).value = formula

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

</correct_patterns>

<common_mistakes>

本节包含构建 DCF 模型时要避免的所有错误模式。

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

不要使用线性近似:

// WRONG - Linear approximation
B97: =B88*(1+(0.096-0.116)) // Assumes linear relationship

// WRONG - Division shortcut
B105: =B88/(1+(E48-0.07)) // Doesn't recalculate full DCF

不要保留占位符文本:

// WRONG - Placeholder note
"Note: Use Excel Data Table feature (Data → What-If Analysis → Data Table) to populate sensitivity tables."

// WRONG - Empty cells
[leaving cells blank because "this is complex"]

不要混淆术语:

  • ❌ “敏感性表格需要 Excel 的数据表功能”(不 - 那是我们无法使用的特定 Excel 工具)
  • ✅ “敏感性表格是每个单元格中都包含公式的简单网格”(是 - 这就是我们要构建的内容)

为什么这些捷径是错误的:

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

要拒绝的常见合理化借口: “编写 75+ 个公式感觉很复杂,所以我会留个笔记让用户手动完成。”

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

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

错误:缺少单元格注释

不要这样做:

  • 创建所有硬编码输入时不加注释
  • 认为“我稍后再添加”
  • 编写“TODO: 添加来源”
  • 留下没有文档说明的蓝色输入单元格

为什么这是错误的:

  • 无法验证数据来源
  • 不符合 xlsx 技能要求
  • 未达到审计准备状态
  • 浪费后期修复的时间

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

错误:公式行引用偏移

症状: FCF 部分引用了错误的假设行: 折旧与摊销: =E29*$E$34 // 应该是 $E$21,但引用了错误的行 资本支出: =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%

这种垂直布局使得难以查看每个情景中跨年份的进展。

为什么这是错误的:

  • 难以查看每个情景中假设随年份的变化
  • 难以在整个预测期内比较不同情景的假设
  • 审查情景逻辑时直观性较差

正确做法:

  • 为每个情景(悲观、基准、乐观)创建单独的块
  • 在每个块内,水平展示跨越预测年份的假设
  • 这使得每个情景的假设作为一个 cohesive 集合更易于审查

错误:无边框

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

  • 无章节划分
  • 所有单元格混在一起
  • 难以阅读且不专业

为什么这是错误的:

  • 未达到客户交付标准
  • 难以导航
  • 看起来不专业

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

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

不要这样做:

  • 所有文本均为黑色
  • 仅使用填充颜色(无字体颜色变化)
  • 混淆哪些单元格是蓝色,哪些是黑色

为什么这是错误的:

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

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

错误:基于毛利的运营费用

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

为什么这是错误的:

  • 运营费用应随收入缩放,而非毛利
  • 产生不现实的利润率 progression
  • 不符合企业的实际运营方式

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

前 5 大错误总结

  1. 公式行引用偏移 → 在编写公式之前定义所有行位置
  2. 缺少单元格注释 → 在创建单元格时添加注释,而不是最后才加
  3. 简化的敏感性表格 → 用完整的 DCF 重算公式填充所有单元格,而非近似值
  4. 情景块引用错误 → 确保 IF 公式从正确的悲观/基准/乐观块中提取数据
  5. 无边框 → 添加专业的章节边框,以达到客户交付标准的外观

此外,请注意以下错误:

WACC 计算错误

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

增长假设缺陷

  • 永续增长率 > WACC(导致无限价值)
  • 预测增长率与历史表现不一致
  • 忽视行业增长限制
  • 收入增长与单位经济效益不符
  • 利润率扩张缺乏运营依据

终值错误

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

现金流预测错误

  • 运营费用基于毛利而非收入
  • 折旧与摊销/资本支出百分比与商业模式不符
  • 营运资本变动计算不当
  • 各年间税率不一致
  • NOPAT(税后净营业利润)计算错误

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

</common_mistakes>

Excel 文件创建

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

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

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

质量评分标准

每个 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", // or "errors_found"
"total_errors": 0, // Total error count
"total_formulas": 42, // Number of formulas in file
"error_summary": {} // Only present if errors found
}

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

{
"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) 背景,配蓝色字体 — 或者如果追求极致极简,也可以使用白色背景配蓝色字体
    • 计算单元格:白色背景,配黑色字体
    • 输出/汇总行(每股价值、企业价值 EV 等):中蓝色 (RGB: 189,215,238 / #BDD7EE) 背景,配黑色粗体字体
  • 仅此而已 — 3 种蓝色 + 1 种灰色 + 白色。 抵制添加更多颜色的冲动。
  • 用户提供的模板或明确的颜色偏好始终覆盖这些默认值。

两层结构如何协同工作:

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

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

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

主要部分周围使用粗边框 (1.5pt):

  • KEY INPUTS(关键输入)部分
  • PROJECTION ASSUMPTIONS(预测假设)部分
  • 5-YEAR CASH FLOW PROJECTION(5 年现金流预测)部分
  • TERMINAL VALUE(终值)部分
  • VALUATION SUMMARY(估值摘要)部分
  • 每个 SENSITIVITY ANALYSIS(敏感性分析)表格

子部分之间使用中边框 (1pt):

  • Company Details(公司详情)与 Historical Performance(历史表现)之间
  • Growth Assumptions(增长假设)与 EBIT Margin(EBIT 利润率)与 FCF Parameters(自由现金流参数)之间

数据表周围使用细边框 (0.5pt):

  • 情景假设表(Bear | Base | Bull | Selected)
  • 历史与预测财务数据矩阵

无边框: 表格内的单个单元格(保持整洁,易于扫描)

边框是强制性的 - 没有专业边框的模型不符合客户交付标准。

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

  • 年份:格式化为文本字符串(例如,“2024” 而不是 “2,024”)
  • 百分比0.0%(一位小数)
  • 货币:百万单位使用 $#,##0;每股单位使用 $#,##0.00 - 始终在标题中指定单位(“Revenue ($mm)”)
  • 零值:使用数字格式将所有零显示为 “-”(例如,$#,##0;($#,##0);-
  • 大数字#,##0 带千位分隔符
  • 负数(#,##0) 用括号表示(不使用减号)

单元格注释(所有硬编码输入强制要求)

根据 xlsx 技能,所有硬编码值必须具有记录来源的单元格注释。格式:“Source: [系统/文档], [日期], [参考], [URL 如果适用]”

关键:在创建单元格时立即添加注释。不要推迟到最后。

DCF 工作表详细结构

第 1 部分:标题

Row,Content
1,[Company Name] DCF Model
2,Ticker: [XXX] | Date: [Date] | Year End: [FYE]
3,Blank
4,Case Selector Cell (1=Bear 2=Base 3=Bull)
5,Case Name Display (formula: =IF([Selector]=1"Bear"IF([Selector]=2"Base""Bull")))

第 2 部分:市场数据(不区分大小写)

Item,Value
Current Stock Price,$XX.XX
Shares Outstanding (M),XX.X
Market Cap ($M),[Formula]
Net Debt ($M),XXX [or Net Cash if negative]

第 3 部分:DCF 情景假设

为每个情景(悲观、基准、乐观)创建单独的假设块,其中包含 DCF 特定假设(收入增长率 %、EBIT 利润率 %、税率 %、折旧与摊销占收入 %、资本支出占收入 %、净营运资本变动占收入变动 %、永续增长率、WACC),并在预测年份横向排列。每个块必须包括章节标题、显示预测年份(FY1, FY2 等)的列标题行以及数据行。请参阅 &lt;correct_patterns> 部分中的“Correct Assumption Table Structure”以获取确切布局。

第 4 部分:历史与预测财务数据

引用一个整合列(例如,“Selected Case”),该列从情景块中提取数据,而不是在每个预测行中使用分散的 IF 公式。

Income Statement ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E
Revenue,XXX,XXX,XXX,XXX,[=E29*(1+$E$10)],[=F29*(1+$E$11)],[=G29*(1+$E$12)]
% growth,XX%,XX%,XX%,XX%,[=E29/D29-1],[=F29/E29-1],[=G29/F29-1]
,,,,,,
Gross Profit,XXX,XXX,XXX,XXX,[=E29*E33],[=F29*F33],[=G29*G33]
% margin,XX%,XX%,XX%,XX%,[=E33/E29],[=F33/F29],[=G33/G29]
,,,,,,
Operating Expenses:,,,,,,,
S&M,XXX,XXX,XXX,XXX,[=E29*0.15],[=F29*0.14],[=G29*0.13]
R&D,XXX,XXX,XXX,XXX,[=E29*0.12],[=F29*0.11],[=G29*0.10]
G&A,XXX,XXX,XXX,XXX,[=E29*0.08],[=F29*0.07],[=G29*0.07]
Total OpEx,XXX,XXX,XXX,XXX,[=E36+E37+E38],[=F36+F37+F38],[=G36+G37+G38]
,,,,,,
EBIT,XXX,XXX,XXX,XXX,[=E33-E39],[=F33-F39],[=G33-G39]
% margin,XX%,XX%,XX%,XX%,[=E41/E29],[=F41/F29],[=G41/G29]
,,,,,,
Taxes,(XX),(XX),(XX),(XX),[=E41*$E$24],[=F41*$E$24],[=G41*$E$24]
Tax rate,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 部分:自由现金流构建

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

Cash Flow ($M),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]
(-) CapEx,(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]
(-) Δ NWC,(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)]
,,,,,,
Unlevered FCF,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 = 当年税后净营业利润 NOPAT(第 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%,[Yellow input]
Beta (5Y monthly),X.XX,[Yellow input]
Equity Risk Premium,X.XX%,[Yellow input]
Cost of Equity,X.XX%,[Calculated blue]
,,
COST OF DEBT CALCULATION,,
Credit Rating,AA-,[Yellow input]
Pre-Tax Cost of Debt,X.XX%,[Yellow input]
Tax Rate,XX.X%,[Link to DCF sheet]
After-Tax Cost of Debt,X.XX%,[Calculated blue]
,,
CAPITAL STRUCTURE,,
Current Stock Price,$XX.XX,[Link to DCF]
Shares Outstanding (M),XX.X,[Link to DCF]
Market Capitalization ($M),"X,XXX",[Calculated]
,,
Total Debt ($M),XXX,[Yellow input]
Cash & Equivalents ($M),XXX,[Yellow input]
Net Debt ($M),XXX,[Calculated]
,,
Enterprise Value ($M),"X,XXX",[Calculated]
,,
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%,[Green output]

关键 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 个空白行

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

案例选择器实现

三情景框架:

悲观情形 (Bear Case)

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

基准情形 (Base Case)

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

乐观情形 (Bull Case)

  • 乐观的收入增长(预测范围的高端)
  • 显著的利润率扩张
  • 较低的 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%)
  • 对单位经济效益建模(用户数、每用户平均收入 ARPU 等)

成熟/稳定型公司

  • 较短的预测期(3-5 年)
  • 温和的增长率(GDP +1-3%)
  • 稳定的利润率
  • 较低的加权平均资本成本(WACC)(7-9%)
  • 专注于现金流生成和资本配置

周期性公司

  • 模拟整个经济周期
  • 将利润率标准化为周期中值
  • 考虑谷底和峰值情景
  • 根据周期性调整 Beta 系数

多业务板块公司

  • 为每个业务单元分别构建贴现现金流(DCF)模型
  • 不同板块采用不同的增长率和利润率
  • 分部加总估值法(Sum-of-parts valuation)
  • 考虑协同效应

故障排除

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

工作流集成

在构建 DCF 模型开始时

  1. 收集市场数据

    • 检查是否有可用的 MCP 服务器以获取当前市场数据
    • 使用网络搜索/抓取功能获取股价、Beta 系数和其他市场指标
    • 如果需要特定数据,向用户请求
  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. 抽查公式

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

可用数据源

  • MCP 服务器:如果已配置(如用于历史财务数据的 Daloopa)
  • 网络搜索/抓取:用于获取当前股价、Beta 系数和市场数据
  • 用户提供的数据:历史财务数据、共识预期
  • 手动提取:作为后备方案,从 SEC EDGAR 文件中提取

最终输出检查清单

在交付 DCF 模型之前:

必需项:

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

验证项:

  • 运营费用(OpEx)基于收入(而非毛利润)
  • 终值占企业价值(EV)的 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 技能),优先使用它来获取时点可比公司数据、先例交易数据和 filings 数据。
  • 否则,回退到:
    • 针对 SEC EDGAR (https://www.sec.gov/cgi-bin/browse-edgar) 使用 web_search / web_extract 获取美国 filings 数据
    • 公司投资者关系页面获取新闻稿、财报演示文稿
    • 使用 browser_navigate 访问交互式数据门户
    • 用户提供的数据(当上下文中没有时,明确询问用户)
  • 切勿伪造。如果无法 sourced 倍数、先例或 filing 数字,将单元格标记为 [UNSOURCED] 并向用户展示。

归属

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