# trades 表 vs binance_trades 表：角色与使用建议

## 两张表的角色

### trades 表（本地交易记录）

- **数据来源**：本系统在**开仓/平仓、补建、同步**时写入或更新。
- **粒度**：一笔「回合」一条记录（开仓 → 平仓），含 entry_price、exit_price、entry_time、exit_time、pnl、exit_reason、entry_order_id、exit_order_id 等。
- **主要用途**：**主要支持交易与监控相关**——实盘运行时的持仓状态、风控、冷却、对账、pending 补全等；用户端「交易记录」可选「本地记录」查看本系统回合，但**查询/分析订单建议以 binance_trades 为准**。

### binance_trades 表（币安成交同步）

- **数据来源**：定时任务 `scripts/sync_binance_orders.py` 从币安 API 拉取 **userTrades（成交）** 入库。
- **同步节奏与延时**：脚本按 **每 3 小时的第 0 分钟** 执行（crontab 示例：`0 */3 * * *`），存在一定延时性，页面看到的「币安成交」最多可能滞后约 3 小时；如需最新可手动执行一次脚本。
- **粒度**：**一笔成交一条记录**（含 trade_id、order_id、symbol、side、price、qty、realized_pnl、commission、trade_time 等）。
- **主要用途**：
  1. **管理员「数据管理」**：按账号/时间/交易对查询已同步的币安成交，做分析与导出。
  2. **统计与分析**：`TradeStats` 聚合（7 天统计、按交易对、按小时等）**优先使用 binance_trades**，无数据时再回退到 trades。

## 结论与建议

1. **分析、统计、查询「订单/成交」**  
   **以 binance_trades 为准即可**。数据与交易所一致，更适合做盈亏分析、策略回看。系统已按「优先 binance_trades，无则 trades」实现。

2. **用户端「交易记录」为何经常没数据？**  
   因为当前只查 **trades**。若实盘不全在本系统跑、或同步/补建不完整，trades 会少或为空。  
   **建议**：用户端「交易记录」**默认从 binance_trades 查**（按当前账号 + 时间范围），与管理员在数据管理里看到的来源一致，更可靠。

3. **trades 表是否还有用？**  
   **有用，但角色已明确为「主要支持交易、监控」**：开平仓状态、风控、冷却、对账、pending 补全等仍依赖 trades；**订单查询与盈亏分析**以 binance_trades 为主。

## 实施情况

- 用户端「交易记录」支持数据源切换：
  - **币安成交（binance_trades）**：默认。按当前账号从 DB 已同步的 binance_trades 查询，展示成交明细（时间、方向、价格、数量、已实现盈亏、手续费等）。需先在服务器运行 `scripts/sync_binance_orders.py` 同步。**数据由定时任务每 3 小时的第 0 分钟同步，存在一定延时（最多约 3 小时）。**
  - **本地记录（trades）**：保留原有逻辑，展示回合级记录（开/平仓时间、入场/出场价、平仓原因等）。
- 后端：`GET /api/trades?source=binance&period=7d&symbol=...` 使用当前账号从 binance_trades 查询并返回列表，与管理员数据管理同源。
