Vibe-Trading估值引擎原理:DCF为什么拒绝默默填充缺失输入
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
在 Vibe-Trading(Your Personal Trading Agent)中,DCF 估值引擎被设计为一个"绝不沉默"的模型:当风险税率、Beta 或永续增长率等关键输入缺失时,DCF 引擎不会悄悄用 21% 的税率或 2.5% 的增长率替你做决定,而是直接拒绝运行,并一次性列出所有缺失字段。这套"缺失即不可运行"的估值纪律,是 Vibe-Trading 估值引擎区别于手工 DCF 的核心设计。
为什么默认值是最危险的假设?
contracts.py 的模块文档里有一句精准的判断:
Every default in a valuation model is an opinion wearing a constant's clothes. (估值模型里的每一个默认值,都是一个穿着常数外衣的观点。)
一个被悄悄默认成 2.5% 的永续增长率,本质上是对长期 GDP 增速的观点;一个默认成 21% 的税率,是对税区和税法稳定性的观点。这些观点可能恰好是对的,但它们应该属于签署这份估值报告的人,而不是属于代码库。
问题在于后果:一个悄悄填充了默认值的 DCF,算出的每股价值看起来与完全基于财报构建的 DCF 一模一样。下游没有任何办法区分它们,读者也无从知晓哪些假设其实是代码替你做的。这正是require_inputs和MissingInputError存在的理由——让这种结果在结构上不可达。
缺失输入如何触发"拒绝运行"
run_dcf的入口检查逻辑非常直接:所有必填字段被预先声明在一个常量元组里,调用require_inputs统一校验,任何缺失都会抛出MissingInputError。
- 必填字段清单:无风险利率、Beta、股权风险溢价、税前债务成本、税率、EBIT、折旧摊销、资本开支、净营运资本变动、永续增长率、退出倍数、总债务、现金、少数股东权益、优先股、联营投资、稀释股数(DCF_BASE_REQUIRED_FIELDS),外加按资本结构口径选定的两组市值或权重字段。
- 一次性报全:异常携带完整缺失列表而非第一个发现的字段,让从财报组装数据的人一次往返就知道还缺什么,而不是一遍遍试错(MissingInputError)。
- 零和 False 不算缺失:0 是合法的分录值,把它当缺失去默认填充,是"默认可疑值"的镜像错误。
对应的测试 test_dcf.py 对每个必填字段做了参数化遍历,确保"任何一条路径都不可能在缺失必填字段时返回一个数字"。
调用者的假设欢迎,但必须"署名"
模型的纪律是:代码不做假设,但鼓励你做假设——前提是你得说出理由。
terminal_growth(永续增长率)和exit_multiple(退出倍数)不允许传裸数字,必须封装成Assumption对象,携带name、value和必填的basis(理由说明,可为空字符串会直接抛错):
Assumption(name="terminal_growth", value=0.025, basis="接近长期名义GDP增速2%+通胀目标2%")未写下理由的假设无法被审查,而不可审查的假设在估值中与猜测无异。这条理由会一路传递到TerminalValueResult,随结果一起落盘,让模型可以被质疑,而不只是一个输出。
双终值交叉验证:算术正确 ≠ 经济合理
DCF 引擎的另一道防线针对"数字算对了但假设离谱"的场景:
- 终值永远算两遍:永续增长法与退出倍数法同时计算,并互算隐含指标——永续值反推隐含的 EV/EBITDA 倍数,退出值反推隐含的永续增长率。增长率若暗示 35 倍 EBITDA,公式没算错,但经济上是脱节的(terminal_value)。
g >= WACC直接拒绝:此时永续终值为负或无穷,不是"很大",而是未定义。敏感性矩阵中对应单元格也留空为 NaN,而非输出一个天文数字(sensitivity_grid)。- 超长期 GDP 参考线只标记不拦截:增长率超过 4%(长期名义 GDP 参考值)仅打一个
growth_exceeds_gdp_ceiling旗标,因为那是判断问题,模型没有资格替你否决。
如何在 Vibe-Trading 中运行 DCF
这套引擎对外有两个入口,均继承同一套"无静默默认"契约:
- Agent 工具调用:通过 quantlib_tool.py 以纯计算方式调用
valuation.dcf模块的公开函数(模块白名单 + 仅__all__导出,无文件写入入口)。 - CLI 命令:
/dcf斜杠命令(dcf.py)会输出每股价值、终值占企业价值比例、退出倍数交叉验证,以及 WACC × g 敏感性网格;缺失数据策略统一由 playbook 骨架执行。
核心结论:Vibe-Trading 的估值引擎把"缺失输入 → 拒绝运行并点名所有缺口"做成了不可绕过的结构约束。你得到的要么是完整可审计的每股价值,要么是一份明确的不可运行报告——永远不是一个建立在猜测之上、却看起来像基于财报的数字。
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考