基础理论: - 量化交易入门指南(零基础友好,含学习路径) 流程图解(3个完整流程图): - 信号系统完整流程图(总体/评分/EWO转换/大周期过滤) - 交易策略执行流程(通用流程/EWO决策树/MTF协同/风控) - 数据采集与处理流程(API获取/缓存管理/指标计算/质量检查) 所有内部链接均指向仓库内文档,无外部链接
233 行
14 KiB
Markdown
233 行
14 KiB
Markdown
# 数据采集与处理流程
|
||
|
||
> 返回:[Wiki 主索引](../README.md)
|
||
> 相关文档:[数据采集与处理流程](../../06_数据流程/数据采集与处理流程.md)
|
||
|
||
## 概述
|
||
|
||
本文档说明量化交易系统中数据从交易所 API 到信号计算的完整流程,包括数据获取、清洗、存储和实时更新。
|
||
|
||
---
|
||
|
||
## 一、Binance API 数据获取流程
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ Binance API 端点 │
|
||
│ │
|
||
│ REST API(历史数据): │
|
||
│ GET /api/v3/klines │
|
||
│ 参数:symbol, interval, limit(最多1000根) │
|
||
│ │
|
||
│ WebSocket(实时数据): │
|
||
│ wss://stream.binance.com:9443/ws/{symbol}@kline_{interval} │
|
||
└──────────────────────┬──────────────────────────────────────┘
|
||
│
|
||
┌────────────┴────────────┐
|
||
▼ ▼
|
||
┌─────────────────┐ ┌──────────────────────┐
|
||
│ 初始化加载 │ │ 实时更新 │
|
||
│ (启动时) │ │ (持续运行) │
|
||
│ │ │ │
|
||
│ 拉取最近300根 │ │ WebSocket 推送 │
|
||
│ K线数据 │ │ 每根K线实时更新 │
|
||
│ 存入 pairCache │ │ 收线时触发信号检测 │
|
||
└────────┬────────┘ └──────────┬───────────┘
|
||
│ │
|
||
└────────────┬──────────────┘
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 数据格式标准化 │
|
||
│ │
|
||
│ 原始 Binance K线格式: │
|
||
│ [openTime, open, high, low, close, volume, │
|
||
│ closeTime, quoteVolume, trades, ...] │
|
||
│ │
|
||
│ 标准化后的 Candle 格式: │
|
||
│ { time: number, // Unix 时间戳(秒) │
|
||
│ open: number, // 开盘价 │
|
||
│ high: number, // 最高价 │
|
||
│ low: number, // 最低价 │
|
||
│ close: number, // 收盘价 │
|
||
│ volume: number } // 成交量 │
|
||
└──────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 二、K线缓存管理流程
|
||
|
||
```
|
||
pairCache 缓存结构:
|
||
Map<"BTCUSDT__10m", {
|
||
candles: Candle[], // 最多 300 根
|
||
updatedAt: number // 最后更新时间
|
||
}>
|
||
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 缓存更新策略 │
|
||
│ │
|
||
│ 每30秒轮询: │
|
||
│ 1. 检查缓存是否过期(> 30秒) │
|
||
│ 2. 调用 Binance REST API 获取最新 K 线 │
|
||
│ 3. 合并新数据到缓存(去重、排序) │
|
||
│ 4. 保留最近 300 根(超出则删除最旧的) │
|
||
│ 5. 更新 updatedAt 时间戳 │
|
||
│ │
|
||
│ WebSocket 实时更新: │
|
||
│ 1. 收到 kline 消息 │
|
||
│ 2. 判断是否已收线(x: true) │
|
||
│ 3. 已收线 → 更新缓存中最后一根 K 线 │
|
||
│ 4. 触发信号检测 │
|
||
└──────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 三、指标计算数据流
|
||
|
||
```
|
||
输入:Candle[] 数组(300根K线)
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 提取价格序列 │
|
||
│ closes = candles.map(c => c.close) │
|
||
│ highs = candles.map(c => c.high) │
|
||
│ lows = candles.map(c => c.low) │
|
||
│ volumes = candles.map(c => c.volume) │
|
||
│ midPrices = candles.map(c => (c.high + c.low) / 2) │
|
||
└──────────────────────┬──────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 基础指标计算(所有指标的基础) │
|
||
│ │
|
||
│ EMA(5) = 指数移动平均(周期5) │
|
||
│ EMA(10) = 指数移动平均(周期10) │
|
||
│ EMA(20) = 指数移动平均(周期20) │
|
||
│ EMA(35) = 指数移动平均(周期35) │
|
||
│ │
|
||
│ 计算公式: │
|
||
│ EMA[i] = price[i] × k + EMA[i-1] × (1-k) │
|
||
│ k = 2 / (period + 1) │
|
||
└──────────────────────┬──────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 衍生指标计算 │
|
||
│ │
|
||
│ EWO = EMA(5) - EMA(35) │
|
||
│ MACD = EMA(10) - EMA(20) │
|
||
│ MACD信号线 = EMA(MACD, 10) │
|
||
│ MACD柱 = MACD - 信号线 │
|
||
│ │
|
||
│ AO = SMA(midPrices, 5) - SMA(midPrices, 34) │
|
||
│ │
|
||
│ RSI = 100 - 100/(1 + RS) │
|
||
│ RS = 平均涨幅(14) / 平均跌幅(14) │
|
||
└──────────────────────┬──────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ 信号评分计算 │
|
||
│ (见:信号系统完整流程图) │
|
||
└──────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 四、数据质量检查流程
|
||
|
||
```
|
||
原始 K 线数据
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────┐
|
||
│ 完整性检查 │
|
||
│ ├─ 时间戳连续性(无缺口) │
|
||
│ ├─ OHLC 逻辑合理性 │
|
||
│ │ high >= max(open, close) │
|
||
│ │ low <= min(open, close) │
|
||
│ └─ 成交量 >= 0 │
|
||
└──────────────────┬──────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────┐
|
||
│ 异常值处理 │
|
||
│ ├─ 价格跳空(> 20%)→ 标记警告 │
|
||
│ ├─ 成交量异常(> 10倍均值)→ 标记 │
|
||
│ └─ 零成交量 → 使用前一根数据填充 │
|
||
└──────────────────┬──────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────┐
|
||
│ 数据量检查 │
|
||
│ K线数量 >= 35 根? │
|
||
│ ├─ 否 → 返回 null(数据不足) │
|
||
│ └─ 是 → 继续计算 │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 五、多数据源整合流程(扩展方案)
|
||
|
||
```
|
||
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
|
||
│ Binance │ │ Glassnode│ │Coinglass │ │ CoinGecko│
|
||
│ K线数据 │ │ 链上数据 │ │ 资金费率 │ │ 恐惧指数 │
|
||
└────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘
|
||
│ │ │ │
|
||
└──────────────┴──────────────┴──────────────┘
|
||
│
|
||
▼
|
||
┌──────────────────────┐
|
||
│ 数据聚合层 │
|
||
│ 统一时间戳 │
|
||
│ 标准化格式 │
|
||
│ 缺失值处理 │
|
||
└──────────┬───────────┘
|
||
│
|
||
▼
|
||
┌──────────────────────┐
|
||
│ 多维度信号引擎 │
|
||
│ 技术指标层(权重60%)│
|
||
│ 链上数据层(权重25%)│
|
||
│ 情绪指标层(权重15%)│
|
||
└──────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 六、数据存储策略
|
||
|
||
| 数据类型 | 存储位置 | 保留时间 | 更新频率 |
|
||
|---------|---------|---------|---------|
|
||
| 实时 K 线 | 内存缓存(pairCache) | 300根 | 30秒 |
|
||
| 行情数据 | 内存缓存(tickerCache) | 最新1条 | 30秒 |
|
||
| 交易信号 | MySQL(signals 表) | 永久 | 实时 |
|
||
| 用户配置 | MySQL(user_settings 表) | 永久 | 用户操作时 |
|
||
| 历史 K 线 | 本地文件(Parquet/CSV) | 按需 | 手动下载 |
|
||
| 链上数据 | 本地文件(JSON/CSV) | 按需 | 每日更新 |
|
||
|
||
---
|
||
|
||
## 七、API 速率限制处理
|
||
|
||
Binance API 有速率限制,需要合理规划请求频率:
|
||
|
||
| API 类型 | 限制 | tradehk 处理方式 |
|
||
|---------|------|----------------|
|
||
| REST API(K线)| 1200 请求/分钟 | 30秒轮询,每次批量获取 |
|
||
| REST API(行情)| 1200 请求/分钟 | 与K线合并请求 |
|
||
| WebSocket | 300 连接/5分钟 | 复用连接,不频繁重连 |
|
||
|
||
**注意**:监控超过 20 个币对时,建议将轮询间隔调整为 60 秒,避免触发速率限制。
|
||
|
||
## 相关文档
|
||
|
||
- [数据采集与处理流程](../../06_数据流程/数据采集与处理流程.md) — 详细数据流程
|
||
- [tradehk 数据库与存储](../tradehk/数据库与存储.md) — 存储机制
|
||
- [链上数据分析指南](../../10_链上数据分析/链上数据分析指南.md) — 链上数据扩展
|