记录知微对MoFin系统的缺陷修复和知识萃取项。

## 2026-06-23 09:00 数据采集脚本修复

**发现了什么：** `market_watch.py` cron任务报错，exit code 1
  - 错误：`ModuleNotFoundError: No module named 'mofin_db'`
  - 原因：脚本在 `/home/hmo/.hermes/scripts/` 下运行，Python路径不包含 `/home/hmo/MoFin/`

**修改了什么：**
  - 文件：`/home/hmo/.hermes/scripts/market_watch.py`
  - 在第19行（`from mofin_db import` 之前）插入：
    ```python
    import sys
    sys.path.insert(0, '/home/hmo/MoFin')
    ```

**效果预期：** 下次cron触发时脚本能正常导入mofin_db并完成市场数据采集+SQLite写入。

**同步发现的策略检查问题：**
  - 自选股18只全部处于买入区（价格距离买入区<3%），属正常范围
  - 其中2只策略为空（楚江新材、中谷物流）— 需补充
  - 整体仓位93.02%，弱势+深套占比41.9%>40%

## 2026-06-25 11:50 价格监控updated_at修复

**发现了什么：** 健康检查误报"价格数据649秒未更新（portfolio.json）"

**根因链：**
1. `price_monitor.py` 写 portfolio.json 时仅在价格变化时写入，且不更新 `updated_at` 字段
2. 盘中价格稳定（如午盘横盘）→ portfolio.json 长时间不更新 → `updated_at` 停留在上次变动时间
3. `intraday_health_check.py` 检查 `updated_at` 是否超过10分钟无更新 → 触发误报

**修改了什么：**
- 文件：`/home/hmo/MoFin/price_monitor.py`（同步到 profile scripts 副本）
- 逻辑变更：
  - 价格变化写入时：同时更新 `pf['updated_at']` 为当前时间
  - 价格无变化时：每10分钟强制刷新一次 `updated_at`，避免横盘期误报

**效果预期：** 价格稳定横盘时 portfolio.json 的 updated_at 仍每10分钟刷新一次，健康检查不再误报。

## 2026-06-25 13:20 stale_push_wlin 流程修复：先重评后推送

**发现了什么：** 自选买入提醒中推送的策略数据可能滞后。例如13:11报告中德明利止盈810.78但现价882已超过。

**根因链：**
1. stale_push_wlin 只在 `[STRATEGY_STALE]` 标记的票触发重评，非stale的票直接推旧策略
2. 策略的止盈/止损/信号在推送前未刷新，可能出现推了止盈位但价格已超过的情况
3. Dad 指出正确流程应该是：推荐前先重评 → 重评确认有效再推

**修改了什么：**
- 文件：`/home/hmo/.hermes/profiles/position-analyst/scripts/stale_push_wlin.py`
- 逻辑变更：
  - 收集所有在买入区的自选（stale + 非stale），统一先调 trigger_regen_sync() 重评
  - 重评完成后重新读取 decisions.json 获取最新策略数据
  - 用重评后的 timing_signal 重新判断是否可推（不再用旧 is_stale 标记）
  - 同一次推送中可能有多只票，全部用新数据出报告

**效果预期：** 每次推送自选提醒前，所有预推票都经过最新一次策略重评，止盈/止损/信号不滞后。

## 2026-06-25 14:00 三点联动修复

**发现了什么：** Dad反馈三个问题：(1) price_monitor的区进区出/重评告警太吵 (2) 现金只有total字段，没有区分可用/冻结，买力算错 (3) 德明利卖出后未及时更新止盈

**修改了什么：**

**① price_monitor XMPP推送降噪**
- 文件：`/home/hmo/MoFin/price_monitor.py`
- 原：所有outputs（⚡进入买入区 🔄重评 📊新策略 ✅全量重评）全部推XMPP
- 改：只推 ⚠️止损跌破 和 🌀情景切换，其余只local print不推

**② 现金三级结构**
- 文件：`/home/hmo/MoFin/data/portfolio.json`
- 新增 `cash_available`（可用买力）和 `cash_frozen`（冻结在途）字段
- stale_push_wlin.py：load_cash() 和 calc_position() 优先读 cash_available，fallback到 cash
- 推荐中的买力计算现在用可用现金而非总现金

**③ 德明利自选策略重评**
- 文件中：`/home/hmo/MoFin/data/decisions.json`
- 原止盈810.78（已被涨停突破）
- 新止损810.0 新止盈1153.26 新买入区873.18~908.82 | RR=3.24
- 已保证自选策略和其他自选一样走自动重评流程

**效果预期：** 系统不再推送区进出/重评噪音，推荐用可用现金算买力，德明利自选随时可重新入场。

## 2026-06-25 14:50 price_monitor 自选止损止盈告警屏蔽

**发现了什么：** 德明利(001309)已清仓转自选，但 price_monitor 仍对其推送止盈警报（"⚡ 德明利进入止盈区间"），数据无误但信号无意义，在Dad卖飞后伤口撒盐。

**根因：** get_trigger_zones() 对自选和持仓一视同仁返回止损/止盈区间，price_monitor检查所有active decision。

**修改了什么：**
- 文件：`/home/hmo/MoFin/price_monitor.py`
- 函数 `get_trigger_zones(d)`：
  - 买入区间：自选和持仓都监控（自选需要zone to trigger重评）
  - 止损+止盈：仅持仓(share>0)才监控，自选不生成止损/止盈zone

**效果预期：** 已清仓的德明利/药明康德等自选不再推送止损止盈告警。买入区进出仍触发重评（内部不推送），保证策略持续更新。

## 2026-06-27 三维分析框架固化（news-flow-analysis skill）

**发现了什么：** 协鑫能科(002015)分析暴露三个系统性问题：
1. 之前分析脱离大盘环境看个股，给出孤立判断
2. 资金流数据只看单日暴量不看连续性，被6/24→6/25反向流误导
3. 没有离场预警框架，只关注买入机会不关注风险信号

**新设了什么：**
- Skill: finance/news-flow-analysis — 新闻+资金流+大盘三维分析法
- 四个层面印证框架（消息面→技术面异常→资金流验证→资金性质追踪）
- 反向框架（离场预警信号）
- 六项报告输出规则（大盘→板块→个股异常→资金验证→资金性质→明确结论）

**自检清单（所有报告产出必须检查）：**
 □ 有没有考虑大盘环境？
 □ 有没有考虑板块背景？
 □ 逆势信号有没有识别？
 □ 资金流向有没有验证？
 □ 是单日暴量还是连续趋势？
 □ 有没有离场预警的反向思考？
 □ 结论有没有具体价格？
 □ RIP原则：数据是否已核实（非模拟伪造）？

**效果预期：** 所有个股分析自动走三维印证流程，避免孤立判断。资金流分析看趋势不看单日。每份报告自带离场预警条件。


## 2026-06-29 数据新鲜度铁律（数据准确零容忍 · 违反记录）

**违反了什么：** 周一(6/29) 15:20 和 15:48 两次分析使用了 multi_tf_cache.json（周五 23:05 缓存的收盘价）作为价格依据，未拉取腾讯实时价。
**导致的错误：** 中芯国际 H 建议止损（实际+10%盈利）、建滔积层板建议止损（实际盈利+11%）、中国神华建议止损（实际反弹+15%）。完全错误的操作建议。
**根因：** LLM 分析时图方便读了本地缓存文件，没有执行「先拉实时价」这个基本动作。
**修复规则（永久写入）：**
  - 任何分析、报告、回复，第一行代码必须是拉取腾讯实时报价
  - 严禁从 multi_tf_cache.json / decisions.json 等缓存文件直接读取价格数据来推操作建议
  - 唯一允许的价格源：腾讯实时 API（qt.gtimg.cn）或 price_monitor 刚写入的 events/state
  - 违反这条 → 自动回滚，追加到违规记录
