edit | blame | history | raw

股票估值流水线 V1

这个工具把《股票价格合理性评估操作手册》里已经稳定的部分变成可重复执行的程序:固定信源等级、标准输入、TTM、PE/PB/PS/EV、三情景、反向 PE、持有期回报、机构预测时效判断、异常清单、Markdown 底稿和可验证缓存。

它不自动猜数据,也不把网页抓取结果直接当事实。首次分析仍需从法定披露、行情和机构预测页建立标准快照;之后同一公司只更新增量字段,程序整组重算。

1. 快速运行

dev/ana-dev/ 下执行:

$env:PYTHONPATH = (Get-Location).Path
python -m stock_valuation_pipeline `
  --input test/stock_valuation_pipeline/fixtures/great_wall_military_20260731.json `
  --output-dir tmp/valuation-601606-20260731

输出:

  • valuation_report.md:固定结构的计算底稿;
  • valuation_results.json:所有冻结计算结果和异常;
  • run_manifest.json:输入、注册表、引擎源码与契约的联合指纹,以及产物哈希。

相同输入、相同注册表、相同引擎源码与契约再次运行时返回 REUSED。代码、Schema、输入或注册表变化,以及任一产物哈希不匹配时都会自动重算;需要主动重算时加 --force

2. 标准输入

模板契约见 snapshot.schema.json,完整样例见长城军工回归快照。所有金额必须使用“元”,股本使用“股”,价格使用“元/股”;只有报告展示时才转成亿元。

关键约定:

  1. current_cumulativeprior_year_same_period 必须是可直接相减的同口径累计数据;业绩预告也放入当前累计,但 basis 必须写明。
  2. normalization.adjustments[].amount 是对可持续利润的带符号影响:增加为正,剔除不可持续收益为负。
  3. 机构预测为空时,必须显式写 coverage_status=no_usable_forecasts 和空数组,不能省略模块。
  4. 来源的 supports 表明哪个主记录由该来源支持;核心数字必须落到注册表允许承载核心数据的来源。
  5. cash_available 由输入方确认可自由支配;受限资金和经营最低现金不得混入。

3. 固定信源规则

source_registry.json 固定的是“来源身份、优先级、允许用途和回退顺序”,不是永久冻结某个数值。

默认复用:未重述的历史审计数据、历史股本变化、已完成合同事实、历史审计意见、公式与单位、官网来源等级。

每次重取:价格、摊薄股本、最新财报/预告及修正、机构预测、现金债务、公司行动、审计监管诉讼事项。

遇到修正公告、收入或利润大变、单季利润过度集中、重大合同、现金流背离、市值勾稽失败或机构预测滞后时,只扩大受影响模块的复核范围。

4. 质量门禁

自动检查包括:

  • 估值日以后信息混入;
  • 股价×股本与平台市值差异超过 1%;
  • 核心字段没有合格来源;
  • 修订前旧文件仍作为主输入;
  • 负利润仍计算 PE;
  • 负自由现金流;
  • 机构预测早于最新经营信息;
  • 机构全年利润低于已实现累计利润;
  • 机构 EPS×股本与利润差异过大。

BLOCKED_INPUT_ERRORS 表示不能把底稿升级为正式结论;PASS_WITH_WARNINGS 表示计算完成,但应按异常清单局部复核;PASS 表示自动规则没有发现问题,仍不替代人工经营判断。

5. 推荐工作方式

首次分析:并行取得行情、法定披露、合同与机构预测,填一次标准快照,运行一次计算,再把时间用于利润持续性和情景判断。

后续复评:复制上次快照,只更新估值日之后的新信息;若没有重述、股本变化或业务重组,不重新搜索历史年报。报告长度可以继续扩展,所有数值章节引用 valuation_results.json,避免手工多处改数。

6. 测试

$env:PYTHONPATH = (Resolve-Path 'dev/ana-dev')
python -m unittest discover -s dev/ana-dev/test/stock_valuation_pipeline -p 'test_*.py' -v

长城军工回归样例固定复核总市值、TTM 收入、TTM 归母与扣非、PB、PS、三情景、50 倍反向利润和五年目标价;另覆盖市值差异、机构预测滞后、未来来源、非法持有期和缓存复用。