Skip to content

v3.10.2 — PE 消化年数修正(#58)

Latest

Choose a tag to compare

@simonlin1212 simonlin1212 released this 11 Oct 13:08

十五层、87 个入口、34 个来源都不变。只修 full_valuation() 的 PE 消化年数。

修复

full_valuation() 在盈利不增长时把 PE 消化年数报成 0 年(#58)

前向 PE 高于 30x、下一年一致预期盈利持平或下降时,digest_years 原来返回 0,读起来像「已经消化到 30x」,
实际是永远消化不到。同一份文档里的 pe_digestion() 对这种情况本来就返回无穷大,full_valuation() 没有复用它。
现在改为调用 pe_digestion(),得不出有限年数时返回 None(JSON 里是 null):

  • 当年 EPS 为正、前向 PE 不高于 30x:0,不变。
  • 当年 EPS 为正、前向 PE 高于 30x、预期增长为正:返回消化年数,不变。
  • 前向 PE 高于 30x,而下一年预测缺失或盈利不增长:None(原来是 0)。
  • 当年 EPS 缺失或不为正:None(原来是 0)。

「完整调研流程」里「流程 B:批量估值对比」的打印对 None 显示「无法估算」,不再打出「消化=None年」。

感谢 @KennyMcSimpson 发现问题并提交修复。

测试

  • 新增 tests/test_valuation.py 6 条离线测试(直接从 SKILL.md 抽取 pe_digestion / full_valuation,行情和一致预期用固定数据):
    盈利持平、下降、增长,预测缺失,当年 EPS 非正,PE 已在 30x 以下。改动前的代码跑这些测试有 8 处失败。
  • 全量 183 条(179 离线 + 4 联网,默认跳过),Python 3.9 与 3.12 都通过。

验证

  • Python 3.9.6 与 3.12 各跑一遍全量:179 条离线测试通过,4 条联网测试默认跳过。
  • 发版前做了一次独立只读复审(Opus 5.5),指出的两处文字问题(流程 B 的依赖说明、README「为负」应为「不为正」)已改。
  • 隐私扫描(gitleaks + 本机路径 / 邮箱核对):没有发现密钥或本机路径。

已装本 skill 的用户:重新拉取 SKILL.md 即可,接口和返回字段除 digest_years 外都不变。

完整变更见 CHANGELOG。