feat(hub): background chart poll with SSE for positions and market watch

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-04 12:39:26 +08:00
parent 9d12323ce6
commit 6f8f0968c8
9 changed files with 591 additions and 10 deletions
+9 -2
View File
@@ -42,11 +42,11 @@
| 项 | 说明 |
|------|------|
| **策略** | 先读本地库,不足或过期则向对应实例拉取并写入库;无后台定时全量同步 |
| **策略** | 先读本地库,不足或过期则向对应实例拉取并写入库;Hub **后台轮询** 增量更新尾部 K 线 |
| **库文件** | 默认 `manual_trading_hub/data/hub_kline.db`(不纳入 Git |
| **保留** | 默认 **15 天**`HUB_KLINE_RETENTION_DAYS`),每次请求顺带清理更早数据 |
| **根数** | 日内周期约 **1000** 根;`1d` / `1w`**500** 根 |
| **刷新** | 约 **5 秒** 自动刷新最新一根;**加载** 用缓存**强制刷新** 忽略缓存重拉 |
| **刷新** | Hub**5 秒** 轮询:① 监控区**有持仓**的合约(默认周期 `5m`)② 行情页 **watch** 的交易所+币种+周期(页面打开时每 25s 续期)。浏览器经 **SSE**`chart_version` 后拉 `/api/chart/ohlcv`**加载** 读库**强制刷新** 全量重拉 |
| **分页** | OKX/Gate 等单次常限 ~300 根,中控会自动分页补全 |
| **12h** | 若交易所无原生 12h 或 K 线间隔异常,会从 **1h** 聚合生成 |
@@ -55,6 +55,9 @@
```bash
# HUB_KLINE_RETENTION_DAYS=15
# HUB_KLINE_DB_PATH=/opt/crypto_monitor/manual_trading_hub/data/hub_kline.db
# HUB_CHART_POLL_INTERVAL=5
# HUB_CHART_POSITION_TIMEFRAME=5m
# HUB_CHART_WATCH_TTL_SEC=45
```
---
@@ -77,6 +80,10 @@
|------|------|------|
| GET | `/api/chart/meta` | 已启用交易所列表、周期列表、各周期 limit、保留天数 |
| GET | `/api/chart/ohlcv` | 查询参数:`exchange_key``symbol``timeframe`、可选 `refresh=1` 强制刷新 |
| POST | `/api/chart/watch` | 行情页订阅(JSON`exchange_key``symbol``timeframe`),45s 内需续期 |
| POST | `/api/chart/unwatch` | 离开行情页取消订阅 |
| GET | `/api/chart/stream` | SSE`event: chart`,含 `chart_version` 与各 `series` 版本 |
| GET | `/api/chart/poll/meta` | 当前轮询状态与各 series 版本 |
实例侧(中控转发):