# MoFin 系统架构

> 最后更新：2026-07-03
> 维护人：Sisyphus (小小莫) + Zhiwei (知微)

---

## 一、数据层

### 数据库

所有数据存储在 SQLite：`/home/hmo/web-dashboard/data/mofin.db`

| 表 | 用途 | 写入方 |
|----|------|--------|
| `holdings` | 持仓列表 | price_monitor, import_holding_xls |
| `portfolio_summary` | 总资产/市值/仓位 | price_monitor, regenerate_all |
| `holding_strategies` | 策略/决策 | regenerate_all, server.py API |
| `watchlist_stocks` | 自选股 | price_monitor, regenerate_all |
| `cash_log` | 现金变更审计 | write_cash_log |
| `market_snapshots` | 大盘数据 | market_watch |
| `sector_snapshots` | 板块数据 | market_watch |
| `live_prices` | 实时价格快照 | price_monitor |
| `mtf_cache` | 多周期K线缓存 | multi_timeframe |
| `capital_flow_cache` | 资金流缓存 | capital_flow_collector |
| `price_events` | 价格触发事件 | price_monitor |

### 数据访问

- **读取**：`mo_data.py` — `read_portfolio()` / `read_decisions()` / `read_watchlist()`
- **写入**：`mofin_db.py` — `write_holdings_batch()` / `write_holding_strategy()` / `write_portfolio_summary()` 等

JSON 文件已全部移除（portfolio.json, decisions.json, watchlist.json 等）。

### 币种

| 品种 | 个股存储 | 汇总 |
|------|---------|------|
| 港股 | HKD (currency='HKD') | CNY (×汇率) |
| A股 | CNY (currency='CNY') | CNY |

`calc_total_assets()` 汇总时自动将港股 HKD 转 CNY。汇率由 `hk_rate.py` 实时获取。

---

## 二、核心模块

```
MoFin/
├── mo_models.py          # 统一数据模型：calc_total_assets, is_hk_stock, to_cny
├── mo_data.py            # 统一读取层：read_portfolio, read_decisions, read_watchlist
├── mofin_db.py           # DB 层：建表 + 写函数 + 查询函数
├── mo_config.py          # 配置单例
├── price_monitor.py      # 价格更新（cron: */2 9-16 1-5）
├── strategy_lifecycle.py # 策略生命周期（regenerate_all + quality gates）
├── server.py             # Flask Web API（端口 8899）
├── market_watch.py       # 大盘采集（cron: */30 9-15）
├── market_screener.py    # 全市场筛选（cron: */30 9-15）
├── strategy_tree.py      # 策略树/分支管理
├── strategy_evaluator.py # 策略评估
├── hk_rate.py            # 港币汇率（API + 缓存）
├── multi_timeframe.py    # 多周期K线分析
├── stock_profile.py      # 个股画像
├── data_freshness.py     # 数据新鲜度校验
├── system_audit.py       # 系统审计
├── system_health_check.py# 系统健康检查
├── prompt_manager/       # LLM Prompt 管理
├── scripts/              # 工具/一次性脚本
└── docs/                 # 文档
```

---

## 三、数据流

```
开盘 (9:00-16:00)
  │
  ├── price_monitor (每2分钟)
  │   ├── 东财/腾讯 API → 拉价格
  │   ├── write_holdings_batch → holdings 表
  │   └── write_portfolio_summary → portfolio_summary 表
  │
  ├── market_watch (每30分钟)
  │   └── write_market_snapshot → market_snapshots + sector_snapshots
  │
  ├── market_screener (每30分钟)
  │   └── 读 market_snapshots → 小果 LLM 筛选 → candidate_pool
  │
  └── stale_push_wlin (每30分钟)
      └── 读持仓+决策 → 区间检测 → XMPP 推送

盘后
  │
  ├── system_audit (17:30) → 全局审计报告
  ├── strategy_review (20:00) → 策略复盘
  └── regenerate_all (手动/定时) → 全量策略重评
```

---

## 四、版本

| 版本 | 日期 | 关键变更 |
|------|------|---------|
| 5.0 | 2026-07-03 | JSON 彻底移除，纯 DB。币种修正（港股 HKD，汇总 CNY）。消除重复文件。 |
| 4.0 | 2026-07-01 | mo_data 统一读取层，cash_log 表 |
| 3.0 | 2026-06-30 | mo_models 统一数据模型，DSA 集成 |
| 2.0 | 2026-06-29 | 初始架构重构 |
