DCF 分析器
何时使用此技能
构建公司的贴现现金流(DCF)估值。当用户提供公司的 FCFF 和 WACC、询问公司内在价值或每股公允价值时使用。如果公司是金融机构,请勿使用。
输入
- FCFF(公司自由现金流),持续 N 年(N = len(FCFF))
- WACC(加权平均资本成本)或其全部组成部分 (权益成本、债务成本、税率、E/V, D/V)
- 终值增长率 g
- 公司净债务 NetDebt
- 流通股数 NShares
用户可以在消息中直接提供数据,也可以提供 CSV 文件;技能将根据契约将它们组装到 input.json 中。
流程
- 根据输入值的度量标准、数值和符号验证输入值(不允许负的 FCFF,g < WACC)。
- 如果所有输入正确,转换需要转换的值(例如将百分比转换为小数:WACC, g, Ke, t...)。
- 如果未提供 WACC(但提供了其组成部分),则计算 WACC。
- 将输入写入临时 JSON,通过 Bash 运行
scripts/dcf.py <path>,从标准输出解析 JSON。 - 构建关于 WACC 和 g 的敏感性表。
输出
返回一个包含公司企业价值、权益价值和每股公允价值的表格,后跟敏感性表。表格下方,返回对结果的简短评论。
边界情况
- 如果 g ≥ WACC,返回警告并提示用户输入有效值。
- 如果敏感性表中的某个单元格的 g 大于 WACC,则该单元格对应的 fv_share 将为 null。
- 如果所有 FCFF 均为负数,返回警告且不进行计算。
- 如果存在缺失值,询问用户哪些值缺失以及需要使用哪些替代值。
- 计算过程中的任何其他错误都必须返回解释问题的警告。
契约
该技能写入 input.json,该文件是 Python 脚本 scripts/dcf.py 的输入。通过 Bash 运行:python scripts/dcf.py input.json。
输入架构(键):
{
"FCFF": [float, ...],
"WACC": float | null,
"g": float,
"NetDebt": float,
"NShares": float,
"E_V": float | null,
"Ke": float | null,
"D_V": float | null,
"Kd": float | null,
"t": float | null,
"wacc_steps": [float, ...] | null,
"g_steps": [float, ...] | null
}
对于任何缺失值,使用 null。N 由 len(FCFF) 推导得出。如果 WACC 为 null,则必须提供其全部组成部分(E_V, Ke, D_V, Kd, t)。
脚本将 JSON 对象打印到标准输出,该技能随后解析。
输出架构(成功):
{
"ok": true, "error": null, "field": null,
"enterprise_value": float,
"equity_value": float,
"fair_value_per_share": float,
"sensitivity": [{"wacc": float, "g": float, "fv_share": float | null}, ...]
}
输出架构(错误):
{"ok": false, "error": "<message>", "field": "<key>"}
参考资料
所有公式请参考 references/dcf_methodology.md。