给笑笑的接手说明 — refactor-for-xiaoxiao.md
This commit is contained in:
@@ -0,0 +1,87 @@
|
|||||||
|
# MoFin 数据管道重构需求 — 给笑笑的接手说明
|
||||||
|
|
||||||
|
## 一句话
|
||||||
|
|
||||||
|
把 decisions.json + portfolio.json + watchlist.json 三个文件合并到 mofin.db,建成一个统一的数据核心。
|
||||||
|
|
||||||
|
## 为什么必须重构(现有 6 个问题)
|
||||||
|
|
||||||
|
### 1. 价格币种混存
|
||||||
|
- `decisions.json` 的港股价格字段(price/stop_loss/take_profit/entry)存的是 **HKD 原值**
|
||||||
|
- `portfolio.json` 的港股字段存的是 **CNY 折算值(×0.87)**
|
||||||
|
- 所有分析脚本读完这个文件去比较另一个文件,币种不同 → 判断全错
|
||||||
|
- 建滔积层板(01888)被误报止损触发 6+ 次,每次都是币种错配
|
||||||
|
|
||||||
|
### 2. 价格有多个入口,互不通信
|
||||||
|
- `price_monitor.py` 每 2 分钟拉一次 Tencent API,写 `portfolio.json`
|
||||||
|
- `per_stock_reassess.py` 自拉 Tencent API(可能加 ×0.87 转换),写 `decisions.json`
|
||||||
|
- `stale_push_wlin.py` 自拉 Tencent API,自己做比较
|
||||||
|
- 三个脚本各自拉价,各自写不同文件,相互覆盖,没有排它锁
|
||||||
|
|
||||||
|
### 3. 现金无系统化更新
|
||||||
|
- 每次 Dad 买/卖后,现金数字靠他截图 → 人工解析 → 手动改 `portfolio.json`
|
||||||
|
- 截图里的「冻结资金(T+2 未交收)」从来没被正确计入
|
||||||
|
- 没有 changelog,改了不知道改之前是多少
|
||||||
|
|
||||||
|
### 4. 总资产计算不一致
|
||||||
|
- 每个报告自己算:持仓市值(来自 portfolio.json 的多日前的价格)× 手数 + 现金
|
||||||
|
- 结果:同一天出现 85 万 / 92 万 / 95 万 / 100 万 四个不同数字
|
||||||
|
- 只应该有一个总资产字段随 price_monitor 实时价刷新
|
||||||
|
|
||||||
|
### 5. 没有唯一数据源
|
||||||
|
- price_monitor 是最可信的价格源(每 2 分钟 Tencent API)
|
||||||
|
- 但报告脚本(stale_detector / stale_push_wlin)经常自己直接拉 API 获取价格
|
||||||
|
- 价格判断没有强制经过同一个入口
|
||||||
|
|
||||||
|
### 6. 策略和持仓分离在两个文件
|
||||||
|
- `decisions.json`:策略(止损/止盈/买入区/RR/timing_signal),52 条
|
||||||
|
- `portfolio.json`:持仓(股数/成本/现价/市值),19 持仓 + 现金
|
||||||
|
- `watchlist.json`:自选股,19 条,但和 decisions 有重叠
|
||||||
|
- 加一个策略要改三个文件,总是不同步
|
||||||
|
|
||||||
|
## 重构后的数据模型(建议)
|
||||||
|
|
||||||
|
```
|
||||||
|
mofin.db 统一数据库
|
||||||
|
├── holdings — 当前持仓(股数/成本/市价CNY/HKD/成本CNY/HKD)
|
||||||
|
├── strategies — 所有策略(止损/止盈/买入区/RR/信号)
|
||||||
|
│ 包含 currency: HKD/CNY 标记
|
||||||
|
├── watchlist — 自选股列表(关联 strategies.id)
|
||||||
|
├── cash_log — 现金变更记录(含冻结资金)
|
||||||
|
├── price_cache — price_monitor 推入的最新价格
|
||||||
|
└── total_assets — 唯一的总资产字段(每 2 分钟更新)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 现有文件清单(全部要合并或废除)
|
||||||
|
|
||||||
|
| 文件 | 大小 | 用途 | 去向 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| data/decisions.json | 52条 | 策略+持仓分析 | → strategies 表 |
|
||||||
|
| data/portfolio.json | 19持仓 | 持仓+现金+总资产 | → holdings + cash_log + total_assets |
|
||||||
|
| data/watchlist.json | 19自选 | 自选列表 | → watchlist 表 |
|
||||||
|
| data/mofin.db | (已有) | 市场数据+新闻+信号 | 不动,只加新表 |
|
||||||
|
| data/multi_tf_cache.json | 1000+K线 | 多周期K线缓存 | 不动 |
|
||||||
|
| data/live_prices.json | (无) | 计划中的统一价格缓存 | 如果做 → price_cache 表 |
|
||||||
|
|
||||||
|
## 不重构的痛苦指数
|
||||||
|
|
||||||
|
当前每个报告生成前要走的手动校验链(Dad 每 2~3 次报告就会发现一次严重数据错误):
|
||||||
|
|
||||||
|
1. 检查 decisions.json vs portfolio.json 价格是否一致 ← 经常不一致
|
||||||
|
2. 检查港股价格是不是 HKD ← 可能被脚本误转 CNY
|
||||||
|
3. 确认现金数字更新了 ← 可能还用昨天的
|
||||||
|
4. 手动算总资产 ← 和报告不同就出问题
|
||||||
|
|
||||||
|
Dad 原话(2026-06-30):「我说怎么办?定一个靠谱的自检策略出来。」
|
||||||
|
但自检策略只能发现错误,不能消除错误。根因是数据管道。
|
||||||
|
|
||||||
|
## 零乱改修复(如果不重构)
|
||||||
|
|
||||||
|
如果不做 DB 化重构,至少必须改这 4 处代码才能让系统稳定运行:
|
||||||
|
|
||||||
|
1. `price_monitor` 写 decisions.json 时同步所有文件的价格
|
||||||
|
2. `per_stock_reassess` 写 decisions.json 时通知 price_monitor 刷新
|
||||||
|
3. 现金变更从截图解析后强制写 changelog
|
||||||
|
4. 所有 LLM cron prompt 加「价格以 XX 文件为准,币种看 currency 字段」
|
||||||
|
|
||||||
|
这些只是补丁,不是根治。数据结构不改,所有补丁最终都会引入新的一致性故障。
|
||||||
Reference in New Issue
Block a user