Skip to content

fix(alerts): persist initial portfolio drawdown peak - #45

Merged
helsome merged 1 commit into
helsome:mainfrom
Tong-bit-art:fix/initialize-portfolio-drawdown-peak
Sep 11, 2026
Merged

fix(alerts): persist initial portfolio drawdown peak#45
helsome merged 1 commit into
helsome:mainfrom
Tong-bit-art:fix/initialize-portfolio-drawdown-peak

Conversation

@Tong-bit-art

Copy link
Copy Markdown
Contributor

问题与复现

新建 portfolio_drawdown 提醒后,首次组合资产值没有写入 alerts-snapshots.json。例如阈值设为 10%,连续两次观测到 totalAssets = 100 → 80,预期触发 20% 回撤提醒,实际没有事件。

原因是 snapshot.peakValue ?? current 将未初始化的峰值设为当前值,但只有 current > peak 才持久化。空快照下该条件永远不成立,每次检查的回撤都重新变成 0。原有测试预先填入了 peakValue,因此没有覆盖新建规则的实际路径。

修改

  • 第一次有效观测与后续创新高时均保存峰值,并且当次不触发提醒。
  • 后续下跌按已保存的峰值计算回撤,沿用现有阈值、冷却与事件通知逻辑。
  • 增加首次观测后下跌、创新高后下跌,以及重新创建引擎/存储/仓库后的持久化回归测试。重启场景同时验证通知回调、事件落盘和规则时间游标。

建议先修复现有提醒的峰值初始化,使新建规则即可生效,再继续扩展后台研究与通知能力。本次仅涉及现有提醒逻辑和测试,不修改 UI、公开类型或持久化格式。

验证

环境:Windows,Bun 1.4.2,基于 bf3fa0a。行情输入使用确定性测试数据;持久化测试使用真实 JsonFileStoreAlertEngine.tick(),不依赖券商账户、模型 API 或 Electron UI。

  • 先复现再修复:仅加入测试、保留原实现时,首次峰值与重启提醒的 2 项回归测试失败;应用修复后通过。
  • bun test packages/shared/src/alerts42 passed / 0 failed
  • bun run typecheck:全部通过。
  • git diff --check:通过。
  • bun test --isolate:在相同环境中对未修改基线与本分支各运行一次,结果如下。
代码 通过 失败
未修改的 bf3fa0a 1155 12
本 PR 1158 12

两次全量运行的 12 个失败名称完全一致,没有新增失败:7 个缺少已被 gitignore 排除的 Longbridge 账户 fixture(已有 #10 跟进);其余是 Windows 符号链接权限、kernel host 测试预期、Pi session 路径分隔符及 2 个 locale 格式预期。未将这些既有问题混入本次修复。

@helsome helsome left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

改动边界清晰,根因与复现路径一致;首次观测持久化 high-water mark、创新高更新、重启后继续计算 drawdown 的测试覆盖充分。该修复不改变公开类型/存储格式,适合独立合入。

@helsome
helsome merged commit 1e290d3 into helsome:main Sep 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants