此技能按照投资银行标准创建机构质量的 DCF 模型用于股权估值。每个分析都会生成详细的 Excel 模型(敏感性分析包含在 DCF 工作表底部)。
这些约束适用于所有 DCF 模型构建。在开始前审查:
环境:Office JS vs Python/openpyxl:
range.formulas = [["=D19*(1+$B$8)"]]
编写公式。无需单独的重新计算步骤;Excel 原生计算。使用
range.format.*
进行样式设置。同样的公式优先于硬编码规则适用:设置
.formulas,永远不要为派生单元格设置
.values。recalc.py。Office JS 合并单元格陷阱:
在构建带有合并单元格的部分标题时,不要先调用 .merge()
再在合并范围上设置 .values — Office JS
仍报告范围的原始尺寸,并将抛出
InvalidArgument:输入数组中的行数或列数与范围的尺寸或大小不匹配。相反,单独写入左上角单元格的值,然后合并并格式化整个范围:
// 错误 — 抛出 InvalidArgument:
const hdr = ws.getRange("A7:H7");
hdr.merge();
hdr.values = [["市场数据与关键输入"]]; // 1×1 数组 vs 1×8 范围 → 失败
// 正确 — 先在一个单元格上设置值,然后合并 + 格式化范围:
ws.getRange("A7").values = [["市场数据与关键输入"]];
const hdr = ws.getRange("A7:H7");
hdr.merge();
hdr.format.fill.color = "#1F4E79";
hdr.format.font.bold = true;
hdr.format.font.color = "#FFFFFF";这适用于 DCF 中的每个合并部分标题(市场数据、情景块、现金流预测、终值、估值摘要、敏感性表格)。
公式优先于硬编码(不可协商):
ws["D20"] = "=D19*(1+$B$8)"
是正确的;ws["D20"] = calculated_revenue 是错误的与用户逐步验证(不要端到端构建):
敏感性表格:
#BDD7EE)+
加粗字体,以便基准情景立即可见。单元格注释:
模型布局规划:
公式重新计算:
python recalc.py model.xlsx 30情景块:
=IF($B$6=1,[悲观单元格],IF($B$6=2,[基准单元格],[乐观单元格]))从 MCP 服务器、用户提供的数据和网络获取数据。
数据来源优先级:
验证检查清单:
分析和记录:
创建汇总表,显示:
历史指标(LTM):
收入:$X 百万
收入增长:X% CAGR
毛利率:X%
EBIT 利润率:X%
D&A 占收入 %:X%
资本支出占收入 %:X%
FCF 利润率:X%
方法:
增长率框架:
公式结构:
三情景方法:
悲观情景:保守增长(例如 8-12%)
基准情景:最可能情景(例如 12-16%)
乐观情景:乐观增长(例如 16-20%)
固定/变动成本分析:
营业费用应模拟现实的操作杠杆:
关键原则:
利润率扩张框架:
当前状态 → 目标状态(第 5 年)
毛利率:X% → Y%(基于规模、效率证明合理性)
EBIT 利润率:X% → Y%(收入增长 + 运营费用杠杆的结果)
按正确顺序构建 FCF:
EBIT
(-) 税费(EBIT × 税率)
= NOPAT(税后净营业利润)
(+) D&A(非现金费用,收入百分比)
(-) 资本支出(收入百分比,通常 4-8%)
(-) Δ NWC(营运资本变动)
= 无杠杆自由现金流
营运资本建模:
维护性 vs 增长性资本支出:
股权成本的 CAPM 方法:
股权成本 = 无风险利率 + 贝塔 × 股权风险溢价
其中:
- 无风险利率 = 当前 10 年期国债收益率
- 贝塔 = 5 年月度股票相对于市场指数的贝塔
- 股权风险溢价 = 5.0-6.0%(市场标准)
债务成本计算:
税后债务成本 = 税前债务成本 ×(1 - 税率)
从以下来源确定税前债务成本:
- 信用评级(如可用)
- 公司债券的当前收益率
- 财务报表中的利息费用 / 总债务
资本结构权重:
权益市场价值 = 当前股价 × 流通股数
净债务 = 总债务 - 现金及等价物
企业价值 = 市值 + 净债务
权益权重 = 市值 / 企业价值
债务权重 = 净债务 / 企业价值
WACC =(股权成本 × 权益权重)+(税后债务成本 × 债务权重)
特殊情况:
典型 WACC 范围:
年中惯例:
现值计算:
对于每个预测年:
FCF 的 PV = 无杠杆 FCF × 折现因子
示例(第 1 年):
FCF = $1,000
WACC = 10%
期间 = 0.5
折现因子 = 1 /(1.10)^0.5 = 0.9535
PV = $1,000 × 0.9535 = $954
预测期间选择:
永续增长法(推荐):
终期 FCF = 最后一年 FCF ×(1 + 终值增长率)
终值 = 终期 FCF /(WACC - 终值增长率)
关键约束:终值增长率 < WACC(否则将产生无限价值)
终值增长率选择:
不要超过: 无风险利率或长期 GDP 增长率
退出倍数法(替代方法):
终值 = 最后一年 EBITDA × 退出倍数
退出倍数来自:
- 行业可比交易倍数
- 先例交易倍数
- 典型范围:8-15x EBITDA
终值的现值:
终值的 PV = 终值 /(1 + WACC)^最终期间
其中最终期间考虑时间:
5 年模型中年度惯例:期间 = 4.5(年中折现最终调整为 4.5)
5 年模型年中惯例:期间 = 5
终值合理性检查:
估值摘要结构:
(+) 预测 FCF 的 PV 之和 = $X 百万
(+) 终值的 PV = $Y 百万
= 企业价值 = $Z 百万
(-) 净债务 [或如果净债务为负则 + 净现金] = $A 百万
= 股权价值 = $B 百万
÷ 稀释后流通股数 = C 百万股
= 隐含每股价格 = $XX.XX
当前股价 = $YY.YY
隐含回报 =(隐含价格 / 当前价格)- 1 = XX%
关键调整:
估值输出格式:
估值组件,金额($M)
显性 FCF 的 PV,X.X
终值的 PV,Y.Y
企业价值,Z.Z
(-) 净债务,A.A
股权价值,B.B
,,
流通股数(M),C.C
隐含每股价格,$XX.XX
当前股价,$YY.YY
隐含上涨/下跌空间,+XX%
在 DCF 工作表底部构建三个敏感性表格,显示估值如何随不同假设变化:
实现:这些是简单的 2D 网格(不是 Excel 的"数据表"功能),每个单元格中包含公式。每个单元格必须包含针对该特定假设组合的完整 DCF 重新计算。有关如何使用 openpyxl 以编程方式填充所有 75 个单元格的详细要求,请参阅关键约束部分。
<correct_patterns>
此部分包含构建 DCF 模型时要遵循的所有正确模式。
假设按每个情景的单独块组织:
关键结构 — 每个部分标题三行:
悲观情景假设(部分标题,跨列合并单元格)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),12%,10%,9%,8%,7%
EBIT 利润率(%),45%,44%,43%,42%,41%
基准情景假设(部分标题,跨列合并单元格)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),16%,14%,12%,10%,9%
EBIT 利润率(%),48%,49%,50%,51%,52%
乐观情景假设(部分标题,跨列合并单元格)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),20%,18%,15%,13%,11%
EBIT 利润率(%),50%,51%,52%,53%,54%
每个情景块必须有一个列标题行,在部分标题下方立即显示预测年份(FY2025E、FY2026E 等)。没有这个,用户无法知道哪个假设值对应哪一年。
如何引用假设 — 创建合并列:
推荐的合并列模式(使用 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)
其中:
这种方法比在每个预测公式中嵌入 IF 语句更清晰,并且使审计使用了哪些情景假设变得容易得多。
使用带有 INDEX 公式的合并列,然后在 FCF 计算中引用它们:
合并列方法:
项目,公式,参考
D&A,=E29*$E$21,$E$21 = D&A % 的合并列
资本支出,=E29*$E$22,$E$22 = 资本支出 % 的合并列
Δ NWC,=(E29-D29)*$E$23,$E$23 = NWC % 的合并列
无杠杆 FCF,=E57+E58-E60-E62,E57=NOPAT E58=D&A E60=资本支出 E62=Δ NWC
每个合并列单元格包含一个 INDEX 公式,根据情景选择器从适当的情景块中提取数据。这使预测公式保持干净和可审计。
在编写公式之前,确认情景块行位置并设置合并列。
每个硬编码值都需要此格式:
"来源:[系统/文档],[日期],[参考],[URL 如适用]"
示例:
项目,来源注释
股价,来源:市场数据脚本 2025-10-12 收盘价
流通股数,来源:10-K FY2024 第45页 注释12
历史收入,来源:10-K FY2024 第32页 合并报表
贝塔,来源:市场数据脚本 2025-10-12 5年每月贝塔
共识估计,来源:管理层指引 Q3 2024 财报电话会议
关键:每个情景块需要三个结构元素:
结构:
悲观情景假设(部分标题 — 跨列 A:G 合并)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),X%,X%,X%,X%,X%
EBIT 利润率(%),X%,X%,X%,X%,X%
终值增长率,X%,,,,
WACC,X%,,,,
基准情景假设(部分标题 — 跨列 A:G 合并)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),X%,X%,X%,X%,X%
EBIT 利润率(%),X%,X%,X%,X%,X%
终值增长率,X%,,,,
WACC,X%,,,,
乐观情景假设(部分标题 — 跨列 A:G 合并)
假设,FY1,FY2,FY3,FY4,FY5
收入增长率(%),X%,X%,X%,X%,X%
EBIT 利润率(%),X%,X%,X%,X%,X%
终值增长率,X%,,,,
WACC,X%,,,,
如果没有显示预测年份(FY2025E、FY2026E 等)的列标题行,用户无法知道哪个假设值对应哪一年。此行是强制性的。
然后创建一个合并列(通常在右侧的下一列),使用 INDEX 公式根据情景选择器从选定的情景块中提取数据。此合并列是您的预测公式引用的内容。
1. 首先编写所有标题和标签:
行,内容
1,[公司名称] DCF 模型
2,股票代码 | 日期 | 年末
4,情景选择器
7,关键假设
26,假设标题
27-31,增长假设
...,...
2. 编写所有部分分隔线和空行
3. 然后使用锁定的行位置编写公式
4. 创建后立即测试公式
把它想象成建筑:
Excel 版本:
重要:这些不是 Excel 的"数据表"功能。这些是简单的网格,您使用 openpyxl 编写常规公式。是的,这意味着总共约 75 个公式(3 个表格 × 25 个单元格),但这很简单且是必需的。
用公式以编程方式填充:
每个敏感性表格必须完全填充公式,为每个假设组合重新计算隐含股价。不要使用 Excel 的数据表功能(它需要手动干预,无法通过 openpyxl 自动化)。
实现方法 — 具体示例:
表格结构 — 5×5 网格(奇数维度,基准情景居中):
如果模型的基准 WACC = 9.0% 且基准终值增长率 = 3.0%,围绕这些值对称构建轴:
WACC vs 终值增长率, 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]
↑
中间列 = 基准终值 g
★ = 中心单元格。
其公式输出必须等于模型的实际隐含股价(来自估值摘要)。对此单元格应用中蓝色填充(#BDD7EE)和加粗字体,以便基准情景在视觉上有锚点。
轴值规则:
axis_values = [base - 2*step, base - step, base, base + step, base + 2*step]
— 围绕基准对称,奇数计数保证有中心。
公式模式 — 单元格 B88(WACC=8.0%,终值增长率=2.0%):
B88 中的公式应使用以下值重新计算隐含价格:
$A88(8.0%)B$87(2.0%)推荐方法: 引用主 DCF 计算,但替换这些值。
示例公式结构:
=([使用 $A88 作为折现率的 FCF PV 之和] + [使用 B$87 作为增长率和 $A88 作为 WACC 的终值] - [净债务]) / [股份]
关键 — 为 5x5 网格中的每个单元格编写公式(每个表格 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 数据表功能(数据 → 假设分析 → 数据表)来填充敏感性表格。"
// 错误 — 空单元格
[因为"这很复杂"而留空单元格]
不要混淆术语:
为什么这些快捷方式是错误的:
需要拒绝的常见合理化: "编写 75 个以上的公式感觉很复杂,所以我要给用户留个说明让他们手动完成。"
实际情况: 当您使用 Python 和 openpyxl 的循环时,编写 75 个公式很简单。每个公式遵循相同的模式 — 只需替换行/列值。这是交付物的必需部分。
相反: 用为每个特定假设组合重新计算完整 DCF 的公式填充每个敏感性单元格。
不要这样做:
为什么错误:
相反: 在创建每个硬编码值时立即添加单元格注释。
症状: FCF 部分引用了错误的假设行:
D&A:=E29*$E$34 // 应为 $E$21,但引用了错误行
资本支出:=E29*$E$41 // 应为 $E$22,但行已偏移
发生原因:
相反: 先锁定行布局,然后写公式。
不要像这样构建假设:
假设,悲观,基准,乐观
FY1 收入增长率,10%,13%,16%
FY2 收入增长率,9%,12%,15%
这种垂直布局使查看每个情景内跨年的进展变得困难。
为什么错误:
相反:
不要交付没有边框的模型:
为什么错误:
相反: 在所有主要部分周围添加边框。
不要这样做:
为什么错误:
相反: 所有硬编码输入使用蓝色文本,所有公式使用黑色文本,工作表链接使用绿色文本。
不要这样做:
S&M:=E33*0.15 // E33 = 毛利润(错误)
为什么错误:
相反:
S&M:=E29*0.15 // E29 = 收入(正确)
此外,请注意这些错误:
这些错误最常见。在开始任何 DCF 构建前重新阅读本节。
</common_mistakes>
此技能使用 xlsx
技能进行所有电子表格操作。 xlsx 技能提供:
recalc.py 脚本自动重新计算公式此技能创建的所有 Excel 文件必须遵循 xlsx 技能要求,包括零公式错误和正确的重新计算。
每个 DCF 模型必须在以下方面最大化:
创建两个工作表:
关键:敏感性表格放在 DCF 工作表的底部(不在单独的工作表上)。这使所有估值输出保持在一起。
创建或修改 Excel 模型后,使用 xlsx 技能的 recalc.py 脚本重新计算所有公式:
python recalc.py [path_to_excel_file] [超时秒数]示例:
python recalc.py AAPL_DCF_Model_2025-10-12.xlsx 30该脚本将:
预期输出格式:
{
"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 技能强制要求)
第 2 层:填充颜色 — 专业蓝/灰配色(默认,除非用户另有指定)
#1F4E79)背景,白色加粗文本#D9E1F2)背景,黑色加粗文本#F2F2F2)背景,蓝色字体 —
或者如果您想要最大简约,仅白色加蓝色字体#BDD7EE)背景,黑色加粗字体两层如何协同工作:
字体颜色告诉您它是什么(输入/公式/链接)。填充颜色告诉您它在哪里(标题/数据/输出)。
粗边框(1.5pt)围绕主要部分:
中边框(1pt)在子部分之间:
细边框(0.5pt)围绕数据表:
无边框: 表格内的单个单元格(保持干净、可扫描)
边框是强制性的 — 没有专业边框的模型未准备好供客户使用。
数字格式(遵循 xlsx 技能标准):
0.0%(一位小数)$#,##0;每股用
$#,##0.00 — 始终在标题中指定单位("收入($mm)")$#,##0;($#,##0);-)#,##0 带千位分隔符(#,##0)(非减号)单元格注释(所有硬编码输入强制要求):
根据 xlsx 技能,所有硬编码值必须包含记录来源的单元格注释。格式:"来源:[系统/文档],[日期],[参考],[URL 如适用]"
关键:在创建单元格的同时添加注释。不要推迟到结束。
第 1 部分:标题
行,内容
1,[公司名称] DCF 模型
2,股票代码:[XXX] | 日期:[日期] | 年末:[FYE]
3,空行
4,情景选择器单元格(1=悲观 2=基准 3=乐观)
5,情景名称显示(公式:=IF([选择器]=1,"悲观",IF([选择器]=2,"基准","乐观")))
第 2 部分:市场数据(不依赖情景)
项目,数值
当前股价,$XX.XX
流通股数(M),XX.X
市值($M),[公式]
净债务($M),XXX [如果为负则为净现金]
第 3 部分:DCF 情景假设
为每个情景(悲观、基准、乐观)创建单独的假设块,包含 DCF
特定假设(收入增长率%、EBIT 利润率%、税率%、D&A
占收入%、资本支出占收入%、NWC 变动占
Δ收入%、终值增长率、WACC),跨预测年份水平布局。每个块必须包含部分标题、显示预测年份(FY1、FY2
等)的列标题行和数据行。参见 <correct_patterns>
部分的"正确假设表结构"了解确切布局。
第 4 部分:历史与预测财务数据
引用从情景块提取数据的合并列(例如"选定情景"),而不是在每个预测行中使用分散的 IF 公式。
利润表($M),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]
,,,,,,
营业费用:,,,,,,,
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]
总运营费用,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) 其中 E10 是第 1 年增长的合并列=E29*(1+IF($B$6=1,$B$10,IF($B$6=2,$C$10,$D$10)))这种方法更清晰,更易于审计,并通过集中情景逻辑防止公式错误。
第 5 部分:自由现金流构建
关键:验证行引用指向正确的假设行。创建后立即测试公式。
现金流($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]
占收入 %,XX%,XX%,XX%,XX%,[=E58/E29],[=F58/F29],[=G58/G29]
(-) 资本支出,(XX),(XX),(XX),(XX),[=E29*$E$22],[=F29*$E$22],[=G29*$E$22]
占收入 %,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]
占 Δ收入 %,XX%,XX%,XX%,XX%,[=E62/(E29-D29)],[=F62/(F29-E29)],[=G62/(G29-F29)]
,,,,,,
无杠杆 FCF,XXX,XXX,XXX,XXX,[=E57+E58-E60-E62],[=F57+F58-F60-F62],[=G57+G58-G60-G62]
行引用示例(基于布局规划):
在编写公式前:确认这些行号与实际布局匹配。测试一列,然后复制到其他列。
第 6 部分:折现与估值
DCF 估值,2024E,2025E,2026E,2027E,2028E,终值
无杠杆 FCF($M),XXX,XXX,XXX,XXX,XXX,
期间,0.5,1.5,2.5,3.5,4.5,
折现因子,0.XX,0.XX,0.XX,0.XX,0.XX,
FCF 的 PV($M),XXX,XXX,XXX,XXX,XXX,
,,,,,,
终期 FCF($M),,,,,,,XXX
终值($M),,,,,,,XXX
终值的 PV($M),,,,,,,XXX
,,,,,,
估值摘要($M),,,,,,
FCF 的 PV 之和,XXX,,,,,
终值的 PV,XXX,,,,,
企业价值,XXX,,,,,
(-) 净债务,(XX),,,,,
股权价值,XXX,,,,,
,,,,,,
流通股数(M),XX.X,,,,,
隐含每股价格,$XX.XX,,,,,
当前股价,$XX.XX,,,,,
隐含上涨/下跌空间,XX%,,,,,
股权成本计算,,
无风险利率(10 年期国债),X.XX%,[黄色输入]
贝塔(5 年月度),X.XX,[黄色输入]
股权风险溢价,X.XX%,[黄色输入]
股权成本,X.XX%,[计算蓝色]
,,
债务成本计算,,
信用评级,AA-,[黄色输入]
税前债务成本,X.XX%,[黄色输入]
税率,XX.X%,[链接到 DCF 工作表]
税后债务成本,X.XX%,[计算蓝色]
,,
资本结构,,
当前股价,$XX.XX,[链接到 DCF]
流通股数(M),XX.X,[链接到 DCF]
市值($M),"X,XXX",[计算]
,,
总债务($M),XXX,[黄色输入]
现金及等价物($M),XXX,[黄色输入]
净债务($M),XXX,[计算]
,,
企业价值($M),"X,XXX",[计算]
,,
WACC 计算,权重,成本,贡献
权益,XX.X%,X.X%,X.XX%
债务,XX.X%,X.X%,X.XX%
,,
加权平均资本成本,X.XX%,[绿色输出]
关键 WACC 公式:
市值 = 价格 × 股份
净债务 = 总债务 - 现金
企业价值 = 市值 + 净债务
权益权重 = 市值 / EV
债务权重 = 净债务 / EV
WACC =(股权成本 × 权益权重)+(税后债务成本 × 债务权重)
术语提醒:"敏感性表格" = 简单的 2D 网格,包含行标题、列标题和每个数据单元格中的公式。不是 Excel 的"数据表"功能(数据 → 假设分析 → 数据表)。您将使用 openpyxl 将常规 Excel 公式写入每个单元格。
位置:DCF 工作表第 87 行以后(不在单独的工作表上)
三个敏感性表格,垂直堆叠:
要编写的总公式数:75 个(这是必需的,不是可选的)
关键:所有敏感性表格单元格必须使用 openpyxl 以编程方式用公式填充。不要使用线性近似快捷方式。不要留下关于手动步骤的占位符文本或说明。不要以"这很复杂"为理由让单元格留空 — 使用 Python 循环生成公式。
表格设置:
无需手动干预 — 用户打开文件时,敏感性表格必须完全可用。
三情景框架:
公式实现:
不要在各处使用分散的嵌套 IF 公式。 而是创建使用 INDEX 或 OFFSET 公式从适当情景块提取数据的合并列。
推荐模式(使用 INDEX):
=INDEX(B10:D10, 1, $B$6) 其中 B10:D10 =
悲观/基准/乐观值,1 = 行偏移,$B$6 =
情景选择器单元格(1、2 或 3)
然后在所有预测中引用合并列:
收入第 1 年:=D29*(1+$E$10) 其中 E10 是第 1 年增长的合并列值。
这种方法集中情景逻辑,使模型更易于审计和维护。
文件命名:[股票代码]_DCF_Model_[日期].xlsx
两个工作表:
关键特性:情景选择器(1/2/3)、使用 INDEX/OFFSET 公式的合并列、颜色编码单元格、所有输入上的单元格注释、专业边框
如果遇到错误或不合理的结果,请阅读 TROUBLESHOOTING_cn.md 获取详细的调试指导。
收集市场数据:
收集历史财务数据:
使用此技能详述的 DCF 方法开始构建模型
验证结构:
重新计算公式:运行
python recalc.py model.xlsx 30
检查输出:
status 为 "success" → 继续第 4
步status 为 "errors_found" → 检查
error_summary 并阅读 TROUBLESHOOTING_cn.md
获取调试指导修复错误并重新运行 recalc.py,直到状态为"success"
抽查公式:
交付模型
在交付 DCF 模型前:
必需:
python recalc.py model.xlsx 30,直到状态为"success"(零公式错误)验证:
[股票代码]_DCF_Model_[日期].xlsx