Files
MoFin/CHANGELOG.md
T

93 lines
3.3 KiB
Markdown
Raw 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 架构改革 — 变更日志
> 日期:2026-06-29 ~ 2026-07-03
> 执行:Sisyphus (小小莫) + Zhiwei (知微)
---
## 2026-07-03 — JSON 彻底移除 + 币种架构修正
### JSON→DB 全面迁移 (32+ 文件)
**数据层**
- `mo_data.py`:删除所有 JSON fallback,纯 SQLite 读取
- `mofin_db.py`
- `write_holding_strategy` 改为 DELETE+INSERT(旧 ON CONFLICT 静默失败)
- `holding_strategies` 新增 10 列:avg_price, decision_timestamp, note, quality_check, quality_checked_at, quality_issues_json, position_advice, signal_factors_json, time_horizon, decision_type
- 新增 `live_prices` / `mtf_cache` / `capital_flow_cache` 三张表 + 读写函数
- 已有 `market_snapshots` 表接替 market.json
**server.py**
- 新增 `_save_portfolio` / `_save_decision` / `_save_watchlist` 写函数
- 所有 13 个 API 写端点切到 DB,读端点删除 JSON fallback
**脚本层**
- 15 个文件 `json.load → mo_data.read_*()`
- 12 个文件 `json.dump → mofin_db.write_*()` 或直接删除
- strategy_lifecycle JSON 冷备行全部删除
- branch_scanner / prune_branches 切到 DB
- system_audit / stale_push_wlin / refresh_mtf_cache JSON→DB
**LLM Prompt**
- evaluation-daily v2`evaluation.json` → DB 表
- knowledge-extraction v1`decisions.json` → DB 表
- analytics.py:删除 JSON 路径常量
**已移除的 JSON 文件**(不再被任何代码读写)
- portfolio.json / decisions.json / watchlist.json
- live_prices.json / multi_tf_cache.json / market.json / capital_flow_cache.json
### 币种架构
**港股** — 个股 price/cost/stop_loss 存 **HKD**`currency='HKD'`
**A股** — 个股 price/cost/stop_loss 存 **CNY**`currency='CNY'`
**总资产**`calc_total_assets()` 汇总时港股 HKD×汇率→CNY
| 场景 | 港股 | A股 |
|------|------|-----|
| 个股显示(股软对照) | HKD | CNY |
| 技术位(止损/止盈/买入区) | HKD | CNY |
| 总资产 / 总市值 / P&L | CNY(汇总时转换) | CNY |
### 关键修复
-`price_monitor.py``scripts/price_monitor.py` 不一致(前者存 HKD,后者转 CNY)→ 统一:存 HKD,不转换
- `s.get('price', 0)` 在 price 为 None 时返回 None 导致 TypeError → 改为 `s.get('price') or 0`
- 东财 API 限流(之前 0.1s 间隔疯狂刷被封)→ 第一只失败立刻切腾讯兜底
### 验证
```
holdings: 19 (8 HKD + 11 CNY)
decisions: 19 (8 HKD + 11 CNY)
total_assets: stored = calculated ✅
```
---
## 2026-07-01 — 统一读取层 + 现金日志
### 新增
- `mo_data.py``read_portfolio()` / `read_decisions()` / `read_watchlist()`
- `mofin_db.py``cash_log` 表 + `write_cash_log` / `query_cash_log`
### 修改
- 16 个文件 `json.load → mo_data.read_*()`
- HK 股成本 HKD→CNY 修复(import_holding_xls 导入时转换)
---
## 2026-06-30 — 初始架构重构
### 新增
- `mo_models.py``calc_total_assets()`, `is_hk_stock()`, `get_hk_rate()`, `to_cny()`, `validate_portfolio()`
- `mo_config.py` — 配置单例
- `mo_bridge.py` — DSA 集成桥
- `mo_provider.py` — DSA 数据源适配器
- `scripts/data_validate.py`, `holdings_reconciliation.py`, `process_trade.py`(知微)
- DSA Web UI: `http://192.168.1.246:8001`
### 修改
- `price_monitor.py`:港股腾讯→东方财富 + 统一 total_assets
- 8 个文件散落 `is_hk_stock` / `total_assets` 统一到 mo_models