Repository navigation
十五层、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.py6 条离线测试(直接从 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。