Files
MoFin/docs/architecture-fix-20260819.md

68 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MoFin 架构修复记录——holding_strategies 多写入方 + 快照污染(2026-08-19
## 背景
老莫发现系统有"幽灵重复实现"问题:holding_strategies 被 8 个写入方 + write_holding_strategy 高频打快照,导致:
- 参数互相覆盖(一个模块写的参数被另一个覆盖)
- 快照污染(strategy_history 频繁写入,但多数是无意义的"参数没变也快照")
- 并发隐患(同一时刻多个模块写同一条记录)
## 发现(深挖证据)
### 写入方清单(8 个模块都在写同一张表)
```
per_stock_reassess → 写策略参数(entry/stop/tp/rr/signal/full_analysis
promote_candidates → 提拔时写新策略
holdings_reconciliation → 对账写
branch_scanner → 分支扫描写
advice_reconciliation → 建议对账写
clean_watchlist → 清理写
prune_branches → 剪枝写
import_holding_xls → 导入写
```
### 快照污染量化(2026-08-19
- 今天 strategy_history **2290 条**
- **66% 是同参数重复快照**(无变化也照拍)
- 同票被反复快照:00020 同参数快照 **11 次**
### 权威保护失效
- **AUTHORITY 日志 0 条**(保护机制存在但从没触发过)
- 权威保护只覆盖"信号降级"**不覆盖"参数覆写"**entry/stop/tp/rr
- 导致 per_stock_reassess 重评成果被别的模块覆盖丢失
## 修复计划
### A+D:快照瘦身
- **快照前对比新旧内容**:参数没变 → 不快照
- **快照只留变化轨迹**:记录 diff(变化的字段)而非全量参数
### B+C:权威保护加固
- **参数覆写保护**per_stock_reassess 重评后 24h 内,其他 source_trigger 不得覆写参数
- **权威判断**:从"信号降级"扩展到"所有字段覆写"
## 最终修改结果
### Commit 记录
| Commit | 内容 |
|---|---|
| `88885eae` | fix(P2-A+D): 快照瘦身——write_holding_strategy先对比新旧内容,无变化不快照(66%垃圾快照消除) |
| `3cbd76f7` | feat(P2-B+C): 权威保护加固——per_stock重评24h内其他源不得覆写参数(解决参数覆盖反复出bug) |
### 关键改动
1. **mofin_db.py snapshot_strategy_history**:加变化检测,有变化才快照
2. **mofin_db.py write_holding_strategy**:权威保护扩展(参数覆写保护)
### 验证结果
- **快照瘦身生效**:连续无变化写不触发快照("参数无变化,跳过快照")
- **权威保护生效**per_stock 重评后 24h 内其他源无法覆写参数(AUTHORITY-24H 日志)
### 遗留问题(后续需处理)
- **写入方收敛**:8 个写入方未真正收敛(per_stock_reassess 是唯一权威写入方,但其他 7 个模块仍在写)——需要后续设计"统一写入入口"或"写入锁"
- **并发隐患**WAL 模式 + busy_timeout=30s 理论上安全,但 8 个模块各自开连接仍有风险——需观察
## 复盘要点
- **快照瘦身**消除了 66% 垃圾快照(今天 2290 → 预计 ~780 条)
- **权威保护**防止参数被其他源覆写(per_stock 重评成果得到保护)
- **遗留**:写入方收敛是下一步(需评估 8 个模块的功能必要性)