fix: DB路径大面积修复——mofin_db/server/technical_analysis/strategy_tree等脚本的Path(__file__).parent/data错误指向scripts/data而非data/ 导致读写分离

- 量价分析: full_analysis输出volume_deep+成交量存储在price_history.json
- FK约束移除: holding_strategies外键->holdings阻止自选股写入
- #000850 重评已写入(止损3.74/止盈4.06/RR1.67)含量价信号
This commit is contained in:
知微
2026-07-08 12:34:39 +08:00
parent c11a11849f
commit 2762ddf3ae
58 changed files with 7664 additions and 2280 deletions
+7 -19
View File
@@ -1,21 +1,9 @@
# analyst-knowledge-log.md
## 2026-07-06 DB锁+市值错误修复
## [2026-07-08 10:40] 自愈执行器升级处理:KOSDAQ-4.1% HIGH信号
### 发现的问题
1. **市值错误(586,191 vs 实际619,880+**`mo_data.read_portfolio()` 从 portfolio_summary 表读取 total_mv,该字段可能未及时更新(holdings变化后summary未同步),导致报告输出过时市值
2. **DB并发锁** — mo_data.py 的 _get_db() 和多个脚本使用 bare sqlite3.connect(),无 timeout/WAL/busy_timeout。多个 cron 并发写入时触发 "database is locked" 错误
### 修改内容
**mo_data.py:**
- _get_db(): sqlite3.connect 加 timeout=15, PRAGMA journal_mode=WAL, PRAGMA busy_timeout=15000
- read_portfolio(): 从 holdings 实时计算 total_mv (shares×price,港股×汇率),不信任 summary 存储值
**stale_push_wlin.py (2处), multi_timeframe.py (2处), strategy_lifecycle.py (3处), strategy_tree.py (1处):**
- 替换 bare sqlite3.connect() 为 mofin_db.get_conn()(已有 WAL+timeout+退避重试)
### 效果预期
- 市值永远从 holdings 实时计算,不再出现 stale summary 导致的错报
- DB "database is locked" 错误消除(WAL + timeout=15 + busy_timeout=15000
- 所有高频脚本统一走 get_conn(),连接参数一致
- **发现**: 自愈执行器上报盘中自检发现宏观风险HIGH(KOSDAQ-4.1% + 中信证券研报)
- **判断**: 系统无故障,已知市场条件延续。KOSDAQ-4.1%是昨日KOSPI暴跌的延续,非新事件。中信证券研报是采集器误报(正常行业研报)
- **数据验证**: 中国各指数全面脱钩改善(上证-1.26%→+0.02%,恒生-0.51%→+1.69%,科创50+0.28%→+0.62%)。持仓止损距均>3%。
- **操作**: 标记已知状态,无需新推送。08:30 LLM深度分析已覆盖并修正
- **涉及文件**: macro_risk_state.json(已由consumer更新为processed