# 知微分析师知识日志

## 2026-06-11

### 新增条目
- [BUG] 华恒生物688639 触发止损但 cron 报告里还显示"剩余空间很大"
  - 场景：2026-06-11 14:00 触发止损，策略状态已变
  - bug：cron_report 读 stale 数据 → 跟实际不一致
  - 修复：stale_push_wlin.py 加价格比对的权重

## 2026-06-29

### 修复
- [BUG] intraday_health_check.py 价格监控误报
  - 问题：check_price_monitor() 用 pgrep 查进程（price_monitor是no_agent cron，不是daemon，必然找不到） + 用 price_events 表做心跳检测（平静市场0事件=误报）
  - 表现：TODO #27 "cron无最近运行记录" + TODO #29 "进程不在运行" → 自愈执行器误启动LLM处理
  - 修复：改用 cron jobs.json 的 last_run_at（主指标）+ portfolio.json 的 updated_at（副指标）
  - 文件：intraday_health_check.py → check_price_monitor() 函数重写
  - 验证：手动执行 intraday_health_check.py → [SILENT] 盘中自检通过 | 6项正常
- [CLEANUP] 关闭残留TODO #27 和 #29（已自愈，价格监控正常）
- [BUGFIX] macro_context_collector.py 关键词红绿灯误报（33条HIGH→7条）
  - 问题1：'核'独立匹配触发22条误报（核聚变/硬核科技/核心等非风险词匹配）
  - 问题2：'苹果.*涨价'触发合作类新闻（苹果牵手长鑫存储，MLCC涨价→非风险）
  - 问题3：'英伟达|' 分组的alternation导致单"英伟达"关键词即触发（应该是英伟达+负面词才触发）
  - 修复：战争/核正则移除过宽匹配；苹果正则加合作类负向排除；英伟达正则修正分组
  - 效果：10:05的198条新闻测试：33 HIGH→7 HIGH（3条真实+2条MEDIUM级+2条分析文引用）
  - 文件：macro_context_collector.py → HIGH_PATTERNS (行30-61)

### 自愈
- [BUG] intraday_health_check.py 宏观风险HIGH TODO无详情
  - 问题：TODO #28 宏观风险HIGH 详情为空。intraday_health_check.py 读 risk.get("reason", "")，但 macro_risk_state.json 用 signals[].summary，没有 reason 字段 → reason始终为空
  - 修复：改成读 signals[0].summary 提取原因描述 + 增加 expired 标志检查（过期HIGH不报异常，改报⏳信息）
  - 文件：MoFin/scripts/intraday_health_check.py → check_signal_pipeline() 中宏观风险检查段
  - 验证：修复后运行 → [SILENT] 盘中自检通过 | 6项正常（不再因过期HIGH误报）

- [BUG] portfolio.json总资产计算错误 — 双重原因
  - 问题1：holding导入用了硬编码现金默认20,230，Dad截图现金73,758没用上
  - 问题2：import_holding_xls.py 对港股 double-conversion：券商的「最新市值」已经是人民币（shares × HKD价 × 汇率），脚本又做了 mv_cny = mkt_val × rate，导致港股市值少算约13.24%
  - 问题3：per_stock_reassess.py 更新了个股价格后，总资产没有随之更新（仍用导入时的旧值）
  - 修复：portfolio.json用 shares*price 重新求和（858,542）+ 现金73,758 = 总资产932,300
  - 文件：portfolio.json, import_holding_xls.py（去掉港股double-conversion + 去硬编码现金默认）
  - 经验：Dad的现金=截图现金，holding文件没有现金行。券商最新市值已经含汇率换算。
