feat: 新增 Wiki 基础理论和流程图解模块

基础理论:
- 量化交易入门指南(零基础友好,含学习路径)

流程图解(3个完整流程图):
- 信号系统完整流程图(总体/评分/EWO转换/大周期过滤)
- 交易策略执行流程(通用流程/EWO决策树/MTF协同/风控)
- 数据采集与处理流程(API获取/缓存管理/指标计算/质量检查)

所有内部链接均指向仓库内文档,无外部链接
这个提交包含在:
Manus Quant Agent
2026-03-05 23:18:29 -05:00
父节点 baf10a9e91
当前提交 e75a2340d9
修改 4 个文件,包含 1010 行新增0 行删除

查看文件

@@ -0,0 +1,169 @@
# 量化交易入门指南
> 返回:[Wiki 主索引](../README.md)
> 适合人群:完全零基础的新手
## 什么是量化交易?
量化交易是指使用数学模型、统计方法和计算机程序来制定和执行交易决策的方式。与传统的主观交易(依靠经验和直觉)不同,量化交易依赖**数据、规则和算法**。
> 简单类比:传统交易者看图说话,量化交易者让计算机按规则说话。
**名词解释**:→ [量化交易](../名词解释/量化交易.md)
---
## 量化交易的核心要素
量化交易系统由以下五个核心要素构成:
| 要素 | 说明 | 示例 |
|------|------|------|
| 数据 | 价格、成交量、链上数据等 | BTC 每分钟 K 线数据 |
| 指标 | 对原始数据的数学处理 | EWO、MACD、RSI |
| 信号 | 指标触发的买卖建议 | EWO 红→绿 = 买入信号 |
| 策略 | 信号的组合与过滤规则 | 多指标共振才入场 |
| 风控 | 止损、仓位、资金管理 | 单笔亏损不超过 2% |
---
## 加密货币量化交易的特殊性
与传统股票市场相比,加密货币市场有以下独特特性:
**优势**
- **24/7 全天候交易**:不存在收盘时间,策略可以全时段运行
- **高波动性**:日内波动 5-20% 很常见,量化策略有更多机会
- **API 开放**主流交易所Binance、OKX提供完整的 REST API 和 WebSocket
- **杠杆可用**:合约交易可使用 1-125 倍杠杆(需谨慎)
- **永续合约**:→ [永续合约](../名词解释/永续合约.md)
**挑战**
- **极端波动**:单日 30-50% 暴跌并非罕见
- **操纵风险**:市值小的币种容易被庄家操控
- **监管不确定性**:政策变化可能导致交易所停业
- **技术风险**API 故障、网络延迟、交易所宕机
---
## K线图基础
K线蜡烛图是量化交易的基础数据单位
```
┃ ← 上影线(最高价 - 实体上沿)
┌───┃───┐
│ │ ← 实体(开盘价到收盘价)
│ 涨↑ │ 绿色/白色 = 收涨
│ │ 红色/黑色 = 收跌
└───┃───┘
┃ ← 下影线(实体下沿 - 最低价)
```
**四个关键价格**
- **开盘价Open**:该周期第一笔成交价
- **最高价High**:该周期最高成交价
- **最低价Low**:该周期最低成交价
- **收盘价Close**:该周期最后一笔成交价
**常用周期**
- 1m / 5m / 10m / 15m → 短线、日内交易
- 1h / 4h → 中线、波段交易
- 1d / 1w → 长线、趋势交易
tradehk 默认使用 **10m** 周期。
---
## 技术指标的分类
技术指标分为四大类:
| 类别 | 代表指标 | 作用 |
|------|---------|------|
| 趋势类 | MA、EMA、EWO、MACD | 判断价格趋势方向 |
| 震荡类 | RSI、KDJ、Stoch、AO | 判断超买超卖状态 |
| 波动类 | 布林带、ATR、SuperTrend | 衡量价格波动幅度 |
| 成交量类 | OBV、MFI | 分析资金流向 |
**名词解释**
- → [EWO](../名词解释/EWO-艾略特波浪振荡器.md)
- → [MACD](../名词解释/MACD-指数移动平均线.md)
- → [RSI](../名词解释/RSI-相对强弱指数.md)
- → [布林带](../名词解释/布林带.md)
---
## 信号与策略的区别
**信号**是单个指标触发的买卖建议,例如:
- EWO 上穿零轴 → 买入信号
- RSI > 70 → 卖出信号
**策略**是多个信号的组合规则,例如:
- EWO 上穿零轴 **且** MACD 金叉 **且** RSI < 70 → 才入场做多
tradehk 使用**多指标共振**策略:多个指标同时指向同一方向时,信号更可靠。
详见:→ [tradehk 信号评分引擎](../tradehk/信号评分引擎.md)
---
## 交易所类型
| 类型 | 代表 | 特点 |
|------|------|------|
| CEX中心化| Binance、OKX、Bybit | 流动性高、速度快、需要 KYC |
| DEX去中心化| Hyperliquid、dYdX、GMX | 无需 KYC、链上透明、Gas 费用 |
**名词解释**
- → [CEX 中心化交易所](../名词解释/CEX-中心化交易所.md)
- → [DEX 去中心化交易所](../名词解释/DEX-去中心化交易所.md)
---
## 风险管理基础
量化交易中,**风险管理比信号本身更重要**。
核心原则:
1. **单笔亏损不超过总资金的 1-2%**
2. **设置止损**:每笔交易都要有明确的止损价位
3. **不追加亏损**:亏损时不要加仓(摊平)
4. **分散投资**:不要把所有资金押注在一个币种
**名词解释**
- → [最大回撤](../名词解释/最大回撤.md)
- → [夏普比率](../名词解释/夏普比率.md)
- → [Kelly 公式](../名词解释/Kelly公式.md)
---
## 学习路径建议
**第一阶段1-2周**:理解基础
- 阅读本文档
- 理解 K 线图和基础指标MA、EWO、MACD
- 在 tradehk 中观察信号,不操作
**第二阶段2-4周**:理解信号
- 阅读 [tradehk 信号评分引擎](../tradehk/信号评分引擎.md)
- 理解 EWO 转换通知的含义
- 记录每次信号后的价格走势
**第三阶段1-2个月**:理解策略
- 阅读 [主要量化策略详解](../../03_交易策略/主要量化策略详解.md)
- 理解多指标共振的逻辑
- 开始小仓位实盘测试
**第四阶段(持续)**:优化与进阶
- 阅读 [AI 量化投资前沿](../../09_AI与机器学习/AI量化投资前沿.md)
- 学习回测方法
- 阅读 arXiv 最新论文
## 相关文档
- [技术指标全集](../../02_技术指标/技术指标全集.md) — 所有指标详解
- [主要量化策略详解](../../03_交易策略/主要量化策略详解.md) — 策略体系
- [市场品种全览](../../05_市场品种/市场品种全览.md) — 各品种特性
- [风险管理体系](../../08_风险管理/风险管理体系.md) — 风控方法

查看文件

@@ -0,0 +1,270 @@
# 交易策略执行流程
> 返回:[Wiki 主索引](../README.md)
> 相关文档:[主要量化策略详解](../../03_交易策略/主要量化策略详解.md)
## 概述
本文档用流程图说明量化交易策略从信号产生到实际下单的完整执行流程,以及各类策略的决策树。
---
## 一、通用策略执行流程
```
市场数据更新(新 K 线收线)
┌───────────────────────────────────────┐
│ 数据预处理 │
│ ├─ 清洗异常值(价格跳空、成交量异常) │
│ ├─ 计算技术指标 │
│ └─ 更新指标缓存 │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 信号生成层 │
│ ├─ 运行多指标评分引擎 │
│ ├─ 计算 bullishCount / bearishCount │
│ └─ 输出信号方向和强度 │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 信号过滤层(多重过滤) │
│ ├─ 大周期偏向过滤MTF
│ ├─ 信号强度过滤(只取 STRONG/MEDIUM
│ ├─ 成交量确认(放量才入场) │
│ └─ 时间过滤(避开重大新闻时间) │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 风险评估层 │
│ ├─ 计算 ATR波动率
│ ├─ 确定止损价位ATR × 倍数) │
│ ├─ 计算仓位大小Kelly 公式) │
│ └─ 检查最大持仓限制 │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 执行层 │
│ ├─ 发送通知(飞书) │
│ ├─ 记录信号MySQL
│ └─ 自动下单(若启用) │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 持仓管理层 │
│ ├─ 监控止损触发 │
│ ├─ 移动止损更新 │
│ ├─ 分批止盈 │
│ └─ 强制平仓(极端行情) │
└───────────────────────────────────────┘
```
---
## 二、EWO 转换信号决策树
```
收到 EWO 转换通知
BTC/10m 红→绿)
┌─────────────────────────────────────┐
│ 检查通知质量 │
│ EWO 穿越幅度 >= 品种阈值? │
│ BTC: |EWO差值| >= 15.0 │
│ SOL: |EWO差值| >= 0.5 │
│ ├─ 否 → ⚠️ 微弱穿越,观望 │
│ └─ 是 → 继续 │
└──────────────────┬──────────────────┘
┌─────────────────────────────────────┐
│ 检查上一阶段持续时间 │
│ 持续 K 线数 >= 20? │
│ ├─ 是 → ✅ 高质量信号(充分蓄势) │
│ ├─ 5-19 → ⚡ 普通信号 │
│ └─ < 5 → ⚠️ 可能假穿越,谨慎 │
└──────────────────┬──────────────────┘
┌─────────────────────────────────────┐
│ 检查大周期偏向 │
│ 4h EWO 方向 = 多头? │
│ ├─ 是 → ✅ 顺势信号,可入场 │
│ ├─ 中性 → ⚡ 谨慎入场,减半仓位 │
│ └─ 空头 → ❌ 逆势信号,不入场 │
└──────────────────┬──────────────────┘
┌─────────────────────────────────────┐
│ 检查 RSI 状态 │
│ RSI < 70做多? │
│ ├─ 是 → 未超买,可入场 │
│ └─ 否 → RSI 超买,等待回调 │
└──────────────────┬──────────────────┘
┌─────────────────────────────────────┐
│ 确定入场参数 │
│ 入场价 = 当前收盘价 │
│ 止损价 = 入场价 - ATR × 1.5 │
│ 止盈1 = 入场价 + ATR × 2.050%仓) │
│ 止盈2 = 入场价 + ATR × 4.050%仓) │
└─────────────────────────────────────┘
```
---
## 三、各策略类型执行要点
### 趋势跟踪策略
```
适用场景EWO 持续在零轴一侧,价格单边运动
入场条件:
✅ EWO 穿越零轴(红→绿 做多,绿→红 做空)
✅ 大周期偏向一致
✅ 成交量放大确认
✅ 价格在 MA100 上方(做多)
持仓管理:
止损:入场价 - ATR × 1.5
移动止损:每根 K 线更新为 SuperTrend 下轨
止盈:等待 EWO 反向穿越才出场
适合品种BTC、ETH趋势性强
不适合DOGE情绪驱动,趋势不稳定
```
### 均值回归策略
```
适用场景:价格偏离均线过大,预期回归
入场条件:
✅ RSI < 30超卖做多
✅ 价格触及布林带下轨
✅ EWO 处于深度负值区域
✅ 成交量萎缩(恐慌性卖出结束)
持仓管理:
止损:布林带下轨再下 ATR × 1.0
止盈价格回到布林带中轨MA20
适合品种BTC、ETH流动性高,回归可靠
不适合:小市值币(可能持续下跌不回归)
```
### 突破策略
```
适用场景:价格突破关键阻力位
入场条件:
✅ 价格突破近期高点(或支撑位)
✅ 成交量 > 20日均量 × 1.5(放量突破)
✅ EWO 在零轴上方且上升
✅ MACD 金叉
持仓管理:
止损:突破点下方 ATR × 1.0
止盈:突破幅度的 2 倍(测量移动)
适合品种BTC关键价位突破效果好
注意:假突破风险,需要成交量确认
```
---
## 四、多周期协同决策流程MTF
```
4h 周期分析(大方向)
├─ EWO > 0 且上升 → 大周期多头
├─ EWO < 0 且下降 → 大周期空头
└─ 其他 → 大周期中性
1h 周期分析(中期确认)
├─ 与 4h 方向一致 → 中期确认
├─ 与 4h 方向相反 → 中期背离(谨慎)
└─ 中性 → 等待
10m 周期(入场时机)
├─ EWO 穿越 + 4h/1h 均多头 → 强力入场信号
├─ EWO 穿越 + 4h 多头 + 1h 中性 → 普通入场信号
├─ EWO 穿越 + 4h 中性 → 谨慎入场(减半仓位)
└─ EWO 穿越 + 4h 空头 → 不入场(逆势)
```
---
## 五、风险控制决策流程
```
信号触发
┌─────────────────────────────────────┐
│ 账户风险检查 │
│ 当前持仓数 < 最大持仓数? │
│ ├─ 否 → 不开新仓 │
│ └─ 是 → 继续 │
└──────────────────┬──────────────────┘
┌─────────────────────────────────────┐
│ 仓位计算Kelly 公式简化版) │
│ 仓位% = (胜率 - 败率/盈亏比) × 0.5 │
│ 最大单笔仓位 = 总资金 × 2% │
│ 取两者较小值 │
└──────────────────┬──────────────────┘
┌─────────────────────────────────────┐
│ 止损设置 │
│ ATR 止损 = 入场价 ± ATR × 倍数 │
│ BTC: × 1.5 ETH: × 1.5 │
│ SOL: × 2.0 DOGE: × 2.5 │
└──────────────────┬──────────────────┘
┌─────────────────────────────────────┐
│ 盈亏比验证 │
│ 预期盈利 / 止损距离 >= 2.0? │
│ ├─ 否 → 放弃本次信号 │
│ └─ 是 → 执行入场 │
└─────────────────────────────────────┘
```
---
## 六、不同市场状态下的策略选择
| 市场状态 | 识别方法 | 推荐策略 | 不推荐策略 |
|---------|---------|---------|-----------|
| 强趋势上涨 | EWO 持续 > 0,ADX > 25 | 趋势跟踪 | 均值回归 |
| 强趋势下跌 | EWO 持续 < 0,ADX > 25 | 趋势跟踪(做空)| 抄底 |
| 震荡盘整 | EWO 在零轴附近震荡,ADX < 20 | 均值回归 | 趋势跟踪 |
| 突破行情 | 价格突破关键位,成交量放大 | 突破策略 | 均值回归 |
| 极端恐慌 | RSI < 20,恐惧贪婪指数 < 15 | 逆势抄底(小仓)| 追空 |
| 极端贪婪 | RSI > 80,恐惧贪婪指数 > 85 | 分批止盈 | 追多 |
## 相关文档
- [信号系统完整流程图](./信号系统完整流程图.md) — 信号生成流程
- [tradehk 信号评分引擎](../tradehk/信号评分引擎.md) — 评分机制
- [风险管理体系](../../08_风险管理/风险管理体系.md) — 风控详解
- [各币种专项策略](../../12_信号系统优化/各币种专项/) — 各币种参数

查看文件

@@ -0,0 +1,339 @@
# 信号系统完整流程图
> 返回:[Wiki 主索引](../README.md)
> 相关文档:[tradehk 信号评分引擎](../tradehk/信号评分引擎.md)
## 概述
本文档用流程图和文字说明 tradehk 信号系统从数据获取到通知推送的完整流程,适合快速理解整个系统的工作原理。
---
## 一、总体流程
```
┌─────────────────────────────────────────────────────────────┐
│ Binance API │
│ (REST API / WebSocket) │
└──────────────────────┬──────────────────────────────────────┘
│ K线数据每30秒轮询 + 实时推送)
┌─────────────────────────────────────────────────────────────┐
│ 内存缓存层 │
│ pairCache: Map<"BTCUSDT__10m", {candles[], updatedAt}> │
│ tickerCache: Map<"BTCUSDT", {price, change24h, volume}> │
└──────────────────────┬──────────────────────────────────────┘
┌────────────┴────────────┐
▼ ▼
┌─────────────────┐ ┌──────────────────────┐
│ 信号检测流程 │ │ EWO转换检测流程 │
│ (每30秒) │ │ (每30秒) │
└────────┬────────┘ └──────────┬───────────┘
│ │
▼ ▼
┌─────────────────┐ ┌──────────────────────┐
│ generateSignal │ │ evaluateEwoTurn │
│ (多指标评分) │ │ (颜色转换检测) │
└────────┬────────┘ └──────────┬───────────┘
│ │
▼ ▼
┌─────────────────┐ ┌──────────────────────┐
│ MySQL 持久化 │ │ 去重检查 │
│ (signals 表) │ │ (dedup slot) │
└────────┬────────┘ └──────────┬───────────┘
│ │
▼ ▼
┌─────────────────┐ ┌──────────────────────┐
│ 频控检查 │ │ 飞书 Webhook 推送 │
│ (冷却时间) │ │ (EWO转换通知) │
└────────┬────────┘ └──────────────────────┘
┌─────────────────┐
│ 飞书 Webhook │
│ (信号通知) │
└─────────────────┘
```
---
## 二、信号评分详细流程
```
输入:已收线的 K 线数组至少35根
┌───────────────────────────────────────┐
│ 计算所有指标 │
│ EWO = EMA(5) - EMA(35) │
│ MACD = EMA(10) - EMA(20) │
│ AO = SMA(中间价,5) - SMA(中间价,34) │
│ MA10, MA100 │
│ RSI(14)(若启用) │
│ 布林带(若启用) │
│ ... 其他可选指标 │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 多空评分计算 │
│ │
│ bullishCount = 0 │
│ bearishCount = 0 │
│ │
│ EWO 穿越零轴? │
│ ├─ 红→绿 → bullishCount += 2 │
│ ├─ 绿→红 → bearishCount += 2 │
│ ├─ EWO > 0 → bullishCount += 1 │
│ └─ EWO < 0 → bearishCount += 1 │
│ │
│ MACD 金叉/死叉? │
│ ├─ 金叉 → bullishCount += 2 │
│ ├─ 死叉 → bearishCount += 2 │
│ ├─ 柱>0扩大 → bullishCount += 1 │
│ └─ 柱<0扩大 → bearishCount += 1 │
│ │
│ AO 穿越零轴? │
│ ├─ 上穿 → bullishCount += 1 │
│ └─ 下穿 → bearishCount += 1 │
│ │
│ MA 排列? │
│ ├─ 多头排列 → bullishCount += 1 │
│ └─ 空头排列 → bearishCount += 1 │
│ │
│ ... 可选指标评分 │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 计算动态阈值 │
│ strongThreshold = 5 + floor(可选数×0.5)│
│ moderateThreshold = 3 + floor(可选数×0.3)│
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 判断信号方向 │
│ │
│ bullishCount > bearishCount? │
│ ├─ 是 → type = BUY │
│ │ bullishCount >= strong? │
│ │ ├─ 是 → STRONG │
│ │ ├─ >= moderate? → MODERATE │
│ │ └─ 否 → WEAK │
│ ├─ bearishCount > bullishCount? │
│ │ └─ 是 → type = SELL同上逻辑
│ └─ 相等 → return null无信号
└──────────────────┬────────────────────┘
输出TradingSignal 或 null
```
---
## 三、EWO 转换检测流程
```
输入:用户的 EWO 转换规则列表
┌───────────────────────────────────────┐
│ 按 symbol+interval 分组规则 │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 对每个 symbol+interval
│ │
│ 取最后两根已收线 K 线 │
│ lastClosedIndex = 最新已收线 │
│ prevClosedIndex = 倒数第二根 │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 计算 EWO 序列 │
│ ewoPrev = ewoSeries[prevClosedIndex] │
│ ewoNow = ewoSeries[lastClosedIndex] │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 颜色转换判断 │
│ prevColor = ewoPrev >= 0 ? 绿 : 红 │
│ nowColor = ewoNow >= 0 ? 绿 : 红 │
│ │
│ prevColor === nowColor? │
│ ├─ 是 → 跳过(无转换) │
│ └─ 否 → 继续 │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 计算上一阶段持续时间 │
│ 向前遍历找到同颜色起始点 │
│ runStartIndex = 起始 K 线索引 │
│ runCandles = 持续 K 线根数 │
│ runDurationMs = 持续时间(毫秒) │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 去重检查 │
│ key = "ewo_turn:{symbol}:{interval} │
│ :{direction}:{bucketTs}" │
│ │
│ 已存在? │
│ ├─ 是 → 跳过(已推送过) │
│ └─ 否 → 继续 │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 构建通知内容 │
│ 标题EWO转换提醒 BTC/10m EWO 红->绿 │
│ 内容:触发规则、币对、转换时间、 │
│ EWO值、持续时间、区间等 │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 推送飞书 Webhook │
│ pushLarkWebhookMessage() │
└───────────────────────────────────────┘
```
---
## 四、大周期偏向过滤流程
```
小周期信号10m BUY
┌───────────────────────────────────────┐
│ 大周期偏向过滤开关是否启用? │
│ trendBias.enabled = true? │
│ ├─ 否 → 直接使用信号 │
│ └─ 是 → 继续 │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 获取大周期 K 线4h 或 12h
│ 计算 EWO、MACD、AO │
│ │
│ 评分: │
│ EWO > 0 → bullish += 2 │
│ MACD > 信号线 → bullish += 1 │
│ 柱状图 > 0 → bullish += 1 │
│ AO > 0 → bullish += 1 │
│ (空头方向同理) │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 大周期偏向判定 │
│ bearishScore >= 4 → BEARISH │
│ bullishScore >= 4 → BULLISH │
│ 其他 → NEUTRAL │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 过滤逻辑 │
│ 大周期 BEARISH + 小周期 BUY? │
│ ├─ 是 → 过滤掉(逆势信号) │
│ └─ 否 → 保留信号 │
│ │
│ 大周期 BULLISH + 小周期 SELL? │
│ ├─ 是 → 过滤掉(逆势信号) │
│ └─ 否 → 保留信号 │
└───────────────────────────────────────┘
```
---
## 五、优化后的 EWO 阈值过滤流程(建议)
```
EWO 穿越检测
┌───────────────────────────────────────┐
│ 第一层:绝对值阈值检查 │
│ │
│ 获取品种阈值: │
│ BTC → 15.0 │
│ ETH → 12.0 │
│ SOL → 0.5 │
│ BNB → 10.0 │
│ DOGE → 0.002 │
│ │
│ |ewoNow - ewoPrev| >= 阈值? │
│ ├─ 是 → 强力穿越(+2分
│ └─ 否 → 微弱穿越(+1分 + ⚠️警告) │
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 第二层:阶段持续时间检查 │
│ │
│ 上一阶段持续 K 线数: │
│ < 5 根 → -1分可能假穿越
│ 5-19 根 → 不加减分 │
│ >= 20 根 → +1分充分蓄势
└──────────────────┬────────────────────┘
┌───────────────────────────────────────┐
│ 第三层:成交量确认(可选) │
│ │
│ 穿越时成交量 > 20日均量? │
│ ├─ 是 → +1分放量确认
│ └─ 否 → 不加分 │
└───────────────────────────────────────┘
```
---
## 六、数据流向总览
```
用户(浏览器)
│ WebSocket 实时推送
│ REST API 查询
Nginx 反向代理(:80/:443
Node.js 应用(:3000
├── tRPC API 路由
├── marketEngine后台定时任务
│ ├── 每30秒refreshCacheForPairs
│ │ └── Binance REST API
│ ├── 每30秒evaluateSignalsForUser
│ │ └── generateSignal
│ │ └── MySQL (signals 表)
│ ├── 每30秒evaluateEwoTurnForUser
│ │ └── 飞书 Webhook
│ └── 每4小时buildPeriodicSummaryPayload
│ └── 飞书 Webhook
└── 静态文件服务React 构建产物)
MySQL:3306
├── users
├── user_settings
├── watchlist
├── signals
└── dedup_slots
```
## 相关文档
- [tradehk 信号评分引擎](../tradehk/信号评分引擎.md) — 评分机制详细说明
- [tradehk EWO转换检测机制](../tradehk/EWO转换检测机制.md) — 检测逻辑详细说明
- [tradehk 大周期偏向判定](../tradehk/大周期偏向判定.md) — 过滤机制详细说明
- [EWO 阈值过滤完整流程](../../12_信号系统优化/EWO阈值过滤完整落地流程.md) — 优化方案

查看文件

@@ -0,0 +1,232 @@
# 数据采集与处理流程
> 返回:[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秒 |
| 交易信号 | MySQLsignals 表) | 永久 | 实时 |
| 用户配置 | MySQLuser_settings 表) | 永久 | 用户操作时 |
| 历史 K 线 | 本地文件Parquet/CSV | 按需 | 手动下载 |
| 链上数据 | 本地文件JSON/CSV | 按需 | 每日更新 |
---
## 七、API 速率限制处理
Binance API 有速率限制,需要合理规划请求频率:
| API 类型 | 限制 | tradehk 处理方式 |
|---------|------|----------------|
| REST APIK线| 1200 请求/分钟 | 30秒轮询,每次批量获取 |
| REST API行情| 1200 请求/分钟 | 与K线合并请求 |
| WebSocket | 300 连接/5分钟 | 复用连接,不频繁重连 |
**注意**:监控超过 20 个币对时,建议将轮询间隔调整为 60 秒,避免触发速率限制。
## 相关文档
- [数据采集与处理流程](../../06_数据流程/数据采集与处理流程.md) — 详细数据流程
- [tradehk 数据库与存储](../tradehk/数据库与存储.md) — 存储机制
- [链上数据分析指南](../../10_链上数据分析/链上数据分析指南.md) — 链上数据扩展