- 新增 20_Go迭代系统/README.md:模块索引与实际试运行记录 - 新增 Go量化知识迭代系统完整架构.md:完整目录结构、核心模块详解、API设计、数据流架构图 - 新增 Air热重载配置与迭代工作流程.md:安装步骤、.air.toml配置、日常迭代流程 - 新增 数据源接入完整指南.md:12个数据源(Binance/OKX/Bybit/Deribit/Glassnode/CoinGlass/DeFiLlama/TheGraph/CMC/FRED等) - 新增 部署运维指南.md:本地开发、生产部署、Docker Compose、监控告警 已验证:Go 1.23.5 + Air v1.64.5 热重载 < 1秒,API接口全部正常
807 行
24 KiB
Markdown
807 行
24 KiB
Markdown
# 数据源接入完整指南
|
||
|
||
> 本文档详细介绍量化知识迭代系统中所有数据源的接入方式、API 端点、数据格式与使用示例。
|
||
> 覆盖 **CEX 交易所、链上数据、期权数据、DeFi 数据、宏观数据** 五大类共 **12 个数据源**。
|
||
>
|
||
> 返回:[Go 迭代系统主文档](./Go量化知识迭代系统完整架构.md) | [Wiki 主索引](../wiki/README.md)
|
||
|
||
---
|
||
|
||
## 一、数据源总览
|
||
|
||
| 类别 | 数据源 | 主要数据 | 是否需要 API Key | 频率限制 |
|
||
|------|--------|---------|----------------|---------|
|
||
| CEX | Binance | K 线、行情、资金费率 | 否(公开)/ 是(私有)| 1200 次/分 |
|
||
| CEX | OKX | K 线、行情、期权 | 否(公开)| 20 次/秒 |
|
||
| CEX | Bybit | K 线、资金费率、持仓量 | 否(公开)| 120 次/分 |
|
||
| 期权 | Deribit | 期权链、IV、期权流 | 否(公开)| 20 次/秒 |
|
||
| 链上 | Glassnode | MVRV、SOPR、NVT、持仓分布 | **是(付费)**| 10 次/分 |
|
||
| 链上 | CoinGlass | 资金费率、清算、未平仓量 | **是(付费)**| 30 次/分 |
|
||
| DeFi | DeFiLlama | TVL、协议数据、稳定币 | 否(公开)| 无限制 |
|
||
| DeFi | The Graph | Uniswap/Aave 链上数据 | 否(公开)| 1000 次/天 |
|
||
| 综合 | CoinMarketCap | 市值、排名、供应量 | **是(免费层)**| 333 次/天 |
|
||
| 综合 | TradingView | 技术指标、筛选器 | 否(公开)| 非官方 |
|
||
| 宏观 | FRED | 利率、CPI、就业 | **是(免费)**| 120 次/分 |
|
||
| 宏观 | 美联储官网 | FOMC 会议纪要 | 否(公开)| 无限制 |
|
||
|
||
---
|
||
|
||
## 二、CEX 数据源
|
||
|
||
### 2.1 Binance(币安)
|
||
|
||
Binance 是全球最大的加密货币交易所,提供最完整的公开 API,无需 API Key 即可访问大部分市场数据。
|
||
|
||
**基础 URL**:
|
||
- REST API:`https://api.binance.com`
|
||
- WebSocket:`wss://stream.binance.com:9443`
|
||
- 期货 REST:`https://fapi.binance.com`
|
||
- 期货 WebSocket:`wss://fstream.binance.com`
|
||
|
||
**核心端点**:
|
||
|
||
| 端点 | 方法 | 说明 | 示例 |
|
||
|------|------|------|------|
|
||
| `/api/v3/klines` | GET | 现货 K 线 | `?symbol=BTCUSDT&interval=10m&limit=100` |
|
||
| `/fapi/v1/klines` | GET | 合约 K 线 | `?symbol=BTCUSDT&interval=10m&limit=100` |
|
||
| `/fapi/v1/fundingRate` | GET | 资金费率历史 | `?symbol=BTCUSDT&limit=100` |
|
||
| `/fapi/v1/premiumIndex` | GET | 当前资金费率 | `?symbol=BTCUSDT` |
|
||
| `/fapi/v1/openInterest` | GET | 未平仓量 | `?symbol=BTCUSDT` |
|
||
| `/fapi/v1/ticker/24hr` | GET | 24h 行情 | `?symbol=BTCUSDT` |
|
||
|
||
**K 线数据格式**(每根 K 线为数组):
|
||
|
||
```json
|
||
[
|
||
1638316800000, // [0] 开盘时间(毫秒时间戳)
|
||
"57000.00", // [1] 开盘价
|
||
"57500.00", // [2] 最高价
|
||
"56800.00", // [3] 最低价
|
||
"57200.00", // [4] 收盘价
|
||
"1234.567", // [5] 成交量(BTC)
|
||
1638317399999, // [6] 收盘时间
|
||
"70543210.12", // [7] 成交额(USDT)
|
||
1500, // [8] 成交笔数
|
||
"617.283", // [9] 主动买入成交量
|
||
"35271605.06", // [10] 主动买入成交额
|
||
"0" // [11] 忽略
|
||
]
|
||
```
|
||
|
||
**Go 接入示例**(`internal/datasource/binance/klines.go`):
|
||
|
||
```go
|
||
package binance
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"net/http"
|
||
"time"
|
||
|
||
"quant-system/pkg/models"
|
||
)
|
||
|
||
const (
|
||
BaseURL = "https://api.binance.com"
|
||
FuturesBaseURL = "https://fapi.binance.com"
|
||
)
|
||
|
||
// GetKlines 获取合约 K 线数据
|
||
func GetKlines(symbol, interval string, limit int) ([]models.Kline, error) {
|
||
url := fmt.Sprintf("%s/fapi/v1/klines?symbol=%s&interval=%s&limit=%d",
|
||
FuturesBaseURL, symbol, interval, limit)
|
||
|
||
resp, err := http.Get(url)
|
||
if err != nil {
|
||
return nil, fmt.Errorf("binance klines request failed: %w", err)
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
var rawData [][]interface{}
|
||
if err := json.NewDecoder(resp.Body).Decode(&rawData); err != nil {
|
||
return nil, fmt.Errorf("binance klines decode failed: %w", err)
|
||
}
|
||
|
||
klines := make([]models.Kline, len(rawData))
|
||
for i, raw := range rawData {
|
||
klines[i] = models.Kline{
|
||
OpenTime: int64(raw[0].(float64)),
|
||
Open: parseFloat(raw[1].(string)),
|
||
High: parseFloat(raw[2].(string)),
|
||
Low: parseFloat(raw[3].(string)),
|
||
Close: parseFloat(raw[4].(string)),
|
||
Volume: parseFloat(raw[5].(string)),
|
||
CloseTime: int64(raw[6].(float64)),
|
||
}
|
||
}
|
||
return klines, nil
|
||
}
|
||
```
|
||
|
||
**WebSocket 实时 K 线订阅**:
|
||
|
||
```go
|
||
// 订阅 BTCUSDT 10m K 线实时推送
|
||
// URL: wss://fstream.binance.com/ws/btcusdt@kline_10m
|
||
|
||
// 推送数据格式:
|
||
{
|
||
"e": "kline", // 事件类型
|
||
"E": 1638316800000, // 事件时间
|
||
"s": "BTCUSDT", // 交易对
|
||
"k": {
|
||
"t": 1638316800000, // K 线开盘时间
|
||
"T": 1638317399999, // K 线收盘时间
|
||
"s": "BTCUSDT", // 交易对
|
||
"i": "10m", // K 线间隔
|
||
"o": "57000.00", // 开盘价
|
||
"c": "57200.00", // 收盘价(实时更新)
|
||
"h": "57500.00", // 最高价
|
||
"l": "56800.00", // 最低价
|
||
"v": "1234.567", // 成交量
|
||
"x": false // K 线是否完结(true = 本根 K 线已收盘)
|
||
}
|
||
}
|
||
```
|
||
|
||
**量化系统使用场景**:
|
||
- 实时 K 线推送 → EWO 实时计算 → 信号检测
|
||
- 资金费率监控 → 套利机会识别
|
||
- 未平仓量变化 → 市场情绪判断
|
||
|
||
---
|
||
|
||
### 2.2 OKX
|
||
|
||
OKX 是全球第二大加密货币交易所,期权数据尤其丰富,与 Deribit 并列为期权数据最佳来源。
|
||
|
||
**基础 URL**:`https://www.okx.com`
|
||
|
||
**核心端点**:
|
||
|
||
| 端点 | 说明 | 关键参数 |
|
||
|------|------|---------|
|
||
| `/api/v5/market/candles` | K 线数据 | `instId=BTC-USDT-SWAP&bar=10m&limit=100` |
|
||
| `/api/v5/public/funding-rate` | 当前资金费率 | `instId=BTC-USDT-SWAP` |
|
||
| `/api/v5/public/funding-rate-history` | 资金费率历史 | `instId=BTC-USDT-SWAP&limit=100` |
|
||
| `/api/v5/public/open-interest` | 未平仓量 | `instId=BTC-USDT-SWAP` |
|
||
| `/api/v5/market/books` | 深度数据 | `instId=BTC-USDT-SWAP&sz=20` |
|
||
| `/api/v5/public/opt-summary` | 期权汇总数据 | `uly=BTC-USD&expTime=20260328` |
|
||
|
||
**K 线数据格式**(OKX 格式与 Binance 略有不同):
|
||
|
||
```json
|
||
{
|
||
"code": "0",
|
||
"data": [
|
||
[
|
||
"1638316800000", // [0] 开盘时间(毫秒)
|
||
"57000.0", // [1] 开盘价
|
||
"57500.0", // [2] 最高价
|
||
"56800.0", // [3] 最低价
|
||
"57200.0", // [4] 收盘价
|
||
"1234.567", // [5] 成交量(张/BTC)
|
||
"70543210.12", // [6] 成交额(USDT)
|
||
"70543210.12", // [7] 成交额(计价货币)
|
||
"1" // [8] K 线状态(1=完结,0=未完结)
|
||
]
|
||
]
|
||
}
|
||
```
|
||
|
||
**量化系统使用场景**:
|
||
- 与 Binance 数据交叉验证(防止单一数据源异常)
|
||
- OKX 期权数据补充 Deribit
|
||
|
||
---
|
||
|
||
### 2.3 Bybit
|
||
|
||
Bybit 以衍生品交易著称,资金费率和持仓量数据质量高,是 BTC/ETH 期货数据的重要来源。
|
||
|
||
**基础 URL**:`https://api.bybit.com`
|
||
|
||
**核心端点**:
|
||
|
||
| 端点 | 说明 | 关键参数 |
|
||
|------|------|---------|
|
||
| `/v5/market/kline` | K 线数据 | `category=linear&symbol=BTCUSDT&interval=10&limit=100` |
|
||
| `/v5/market/funding/history` | 资金费率历史 | `category=linear&symbol=BTCUSDT&limit=200` |
|
||
| `/v5/market/open-interest` | 未平仓量 | `category=linear&symbol=BTCUSDT&intervalTime=5min` |
|
||
| `/v5/market/tickers` | 实时行情 | `category=linear&symbol=BTCUSDT` |
|
||
| `/v5/market/orderbook` | 深度数据 | `category=linear&symbol=BTCUSDT&limit=50` |
|
||
|
||
**资金费率数据格式**:
|
||
|
||
```json
|
||
{
|
||
"retCode": 0,
|
||
"result": {
|
||
"list": [
|
||
{
|
||
"symbol": "BTCUSDT",
|
||
"fundingRate": "0.0001", // 资金费率(0.01%)
|
||
"fundingRateTimestamp": "1638316800000" // 结算时间
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
**量化系统使用场景**:
|
||
- 资金费率三所对比(Binance + OKX + Bybit)→ 判断市场情绪极值
|
||
- 未平仓量趋势 → 判断资金流入/流出
|
||
|
||
---
|
||
|
||
## 三、期权数据源
|
||
|
||
### 3.1 Deribit
|
||
|
||
Deribit 是全球最大的加密货币期权交易所,BTC/ETH 期权市场份额超过 90%,是期权数据的权威来源。
|
||
|
||
**基础 URL**:`https://www.deribit.com/api/v2`
|
||
|
||
**核心端点**:
|
||
|
||
| 端点 | 说明 | 关键参数 |
|
||
|------|------|---------|
|
||
| `/public/get_instruments` | 获取所有期权合约 | `currency=BTC&kind=option&expired=false` |
|
||
| `/public/get_book_summary_by_currency` | 期权汇总数据 | `currency=BTC&kind=option` |
|
||
| `/public/get_index_price` | 指数价格 | `index_name=btc_usd` |
|
||
| `/public/get_volatility_index_data` | 波动率指数(DVOL)| `currency=BTC&resolution=60` |
|
||
| `/public/ticker` | 单个合约行情 | `instrument_name=BTC-28MAR26-100000-C` |
|
||
|
||
**期权合约命名规则**:
|
||
```
|
||
BTC-28MAR26-100000-C
|
||
│ │ │ └── C = Call(看涨),P = Put(看跌)
|
||
│ │ └── 行权价(100000 USDT)
|
||
│ └── 到期日(2026年3月28日)
|
||
└── 标的资产
|
||
```
|
||
|
||
**DVOL(Deribit 波动率指数)数据格式**:
|
||
|
||
```json
|
||
{
|
||
"result": {
|
||
"data": [
|
||
[1638316800000, 75.5], // [时间戳, DVOL 值]
|
||
[1638316860000, 76.2],
|
||
...
|
||
],
|
||
"continuation": null
|
||
}
|
||
}
|
||
```
|
||
|
||
**关键期权指标说明**:
|
||
|
||
| 指标 | 说明 | 量化意义 |
|
||
|------|------|---------|
|
||
| IV(隐含波动率)| 市场对未来波动的预期 | IV > 80% → 市场恐慌,可能见底 |
|
||
| DVOL | Deribit 波动率指数(类似 VIX)| DVOL 急升 → 恐慌情绪 |
|
||
| Put/Call Ratio | 看跌/看涨期权比率 | > 1.2 → 市场偏空 |
|
||
| 最大痛点 | 期权到期时最多期权失效的价格 | 到期日前价格有向最大痛点靠拢的倾向 |
|
||
| GEX(Gamma 敞口)| 做市商 Gamma 对冲方向 | 正 GEX → 价格稳定,负 GEX → 价格波动加剧 |
|
||
|
||
**Go 接入示例**(获取 BTC DVOL):
|
||
|
||
```go
|
||
package deribit
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"net/http"
|
||
)
|
||
|
||
const BaseURL = "https://www.deribit.com/api/v2"
|
||
|
||
type DVOLData struct {
|
||
Timestamp int64 `json:"timestamp"`
|
||
Value float64 `json:"value"`
|
||
}
|
||
|
||
// GetDVOL 获取 Deribit 波动率指数
|
||
func GetDVOL(currency string, resolution int) ([]DVOLData, error) {
|
||
url := fmt.Sprintf("%s/public/get_volatility_index_data?currency=%s&resolution=%d",
|
||
BaseURL, currency, resolution)
|
||
|
||
resp, err := http.Get(url)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
var result struct {
|
||
Result struct {
|
||
Data [][]float64 `json:"data"`
|
||
} `json:"result"`
|
||
}
|
||
|
||
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
dvol := make([]DVOLData, len(result.Result.Data))
|
||
for i, d := range result.Result.Data {
|
||
dvol[i] = DVOLData{
|
||
Timestamp: int64(d[0]),
|
||
Value: d[1],
|
||
}
|
||
}
|
||
return dvol, nil
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 四、链上数据源
|
||
|
||
### 4.1 Glassnode
|
||
|
||
Glassnode 是最权威的链上数据平台,提供 MVRV、SOPR、NVT、持仓分布等核心链上指标。
|
||
|
||
**基础 URL**:`https://api.glassnode.com/v1`
|
||
|
||
**认证方式**:API Key 通过 URL 参数传入(`?api_key=YOUR_KEY`)
|
||
|
||
**核心端点**:
|
||
|
||
| 端点 | 指标 | 说明 |
|
||
|------|------|------|
|
||
| `/metrics/market/mvrv_z_score` | MVRV Z-Score | 市值/实现价值 Z 分数,判断市场高低估 |
|
||
| `/metrics/indicators/sopr` | SOPR | 已花费输出利润率,判断持仓者盈亏 |
|
||
| `/metrics/indicators/nvt` | NVT | 网络价值/交易量,判断网络估值 |
|
||
| `/metrics/distribution/balance_exchanges` | 交易所余额 | 交易所 BTC 存量(减少=看涨)|
|
||
| `/metrics/distribution/balance_1pct_holders` | 巨鲸持仓 | 前 1% 地址持仓量 |
|
||
| `/metrics/mining/difficulty_latest` | 挖矿难度 | 最新挖矿难度 |
|
||
| `/metrics/market/price_usd_close` | 价格 | 日收盘价 |
|
||
|
||
**通用请求参数**:
|
||
|
||
```
|
||
?a=BTC # 资产(BTC/ETH)
|
||
&i=24h # 时间间隔(1h/24h/10m)
|
||
&s=1609459200 # 开始时间(Unix 时间戳)
|
||
&u=1640995200 # 结束时间(Unix 时间戳)
|
||
&api_key=YOUR_API_KEY
|
||
```
|
||
|
||
**MVRV Z-Score 数据格式**:
|
||
|
||
```json
|
||
[
|
||
{"t": 1638316800, "v": 2.45}, // t=Unix时间戳, v=MVRV Z-Score值
|
||
{"t": 1638403200, "v": 2.51},
|
||
...
|
||
]
|
||
```
|
||
|
||
**MVRV Z-Score 解读**:
|
||
|
||
| 数值范围 | 市场状态 | 操作建议 |
|
||
|---------|---------|---------|
|
||
| > 7 | 极度高估(历史顶部区域)| 减仓/清仓 |
|
||
| 3 ~ 7 | 高估 | 谨慎持仓 |
|
||
| 0 ~ 3 | 合理估值 | 正常操作 |
|
||
| -1 ~ 0 | 低估 | 考虑加仓 |
|
||
| < -1 | 极度低估(历史底部区域)| 积极建仓 |
|
||
|
||
**免费层限制**:仅提供 BTC/ETH 的部分指标,日级别数据。付费层提供小时级数据和全部指标。
|
||
|
||
---
|
||
|
||
### 4.2 CoinGlass
|
||
|
||
CoinGlass 专注于衍生品市场数据,提供资金费率、清算数据、未平仓量等核心指标。
|
||
|
||
**基础 URL**:`https://open-api.coinglass.com/public/v2`
|
||
|
||
**认证方式**:`coinglassSecret: YOUR_API_KEY`(HTTP Header)
|
||
|
||
**核心端点**:
|
||
|
||
| 端点 | 说明 | 关键参数 |
|
||
|------|------|---------|
|
||
| `/indicator/funding_rates` | 多所资金费率对比 | `symbol=BTC` |
|
||
| `/indicator/open_interest` | 未平仓量(多所汇总)| `symbol=BTC&interval=h4` |
|
||
| `/indicator/liquidation` | 清算数据 | `symbol=BTC&interval=1h` |
|
||
| `/indicator/long_short_ratio` | 多空比 | `symbol=BTC&interval=1h` |
|
||
| `/indicator/taker_buy_sell_ratio` | 主动买卖比 | `symbol=BTC&interval=1h` |
|
||
|
||
**资金费率数据格式**:
|
||
|
||
```json
|
||
{
|
||
"code": "0",
|
||
"data": [
|
||
{
|
||
"exchangeName": "Binance",
|
||
"symbol": "BTCUSDT",
|
||
"fundingRate": 0.0001, // 当前资金费率
|
||
"nextFundingTime": 1638316800000,
|
||
"predictedFundingRate": 0.00015 // 预测下期资金费率
|
||
},
|
||
{
|
||
"exchangeName": "OKX",
|
||
"symbol": "BTC-USDT-SWAP",
|
||
"fundingRate": -0.0002,
|
||
...
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**资金费率解读**:
|
||
|
||
| 费率范围 | 市场状态 | 含义 |
|
||
|---------|---------|------|
|
||
| > +0.1% | 极度多头 | 多头支付空头,市场过热 |
|
||
| +0.01% ~ +0.1% | 正常多头 | 正常偏多市场 |
|
||
| -0.01% ~ +0.01% | 中性 | 市场平衡 |
|
||
| -0.01% ~ -0.1% | 正常空头 | 正常偏空市场 |
|
||
| < -0.1% | 极度空头 | 空头支付多头,市场恐慌 |
|
||
|
||
---
|
||
|
||
## 五、DeFi 数据源
|
||
|
||
### 5.1 DeFiLlama
|
||
|
||
DeFiLlama 是最权威的 DeFi 数据聚合平台,提供免费的 TVL、协议、稳定币数据,无需 API Key。
|
||
|
||
**基础 URL**:`https://api.llama.fi`
|
||
|
||
**核心端点**:
|
||
|
||
| 端点 | 说明 | 返回内容 |
|
||
|------|------|---------|
|
||
| `/protocols` | 所有协议列表 | 协议名称、TVL、链、类别 |
|
||
| `/tvl/{protocol}` | 单协议 TVL 历史 | 日级别 TVL 历史数据 |
|
||
| `/charts` | 全链 TVL 历史 | 所有链的 TVL 汇总 |
|
||
| `/chains` | 各链 TVL | 按链分类的 TVL |
|
||
| `https://stablecoins.llama.fi/stablecoins` | 稳定币数据 | 各稳定币市值、流通量 |
|
||
|
||
**全链 TVL 数据格式**:
|
||
|
||
```json
|
||
[
|
||
{"date": 1638316800, "totalLiquidityUSD": 270000000000}, // 2700 亿美元 TVL
|
||
{"date": 1638403200, "totalLiquidityUSD": 275000000000},
|
||
...
|
||
]
|
||
```
|
||
|
||
**量化系统使用场景**:
|
||
- DeFi TVL 趋势 → 判断 DeFi 生态资金流入/流出
|
||
- 稳定币市值变化 → 判断场外资金入场意愿
|
||
- 特定协议 TVL(如 Aave、Uniswap)→ 判断 DeFi 活跃度
|
||
|
||
---
|
||
|
||
### 5.2 The Graph
|
||
|
||
The Graph 是去中心化的区块链数据索引协议,通过 GraphQL 查询链上历史数据,适合获取 DEX 交易量、流动性等精细数据。
|
||
|
||
**基础 URL**:`https://api.thegraph.com/subgraphs/name/`
|
||
|
||
**常用子图**:
|
||
|
||
| 子图 | 地址 | 数据内容 |
|
||
|------|------|---------|
|
||
| Uniswap V3 | `uniswap/uniswap-v3` | 交易量、流动性、价格 |
|
||
| Aave V3 | `aave/protocol-v3` | 借贷量、利率、清算 |
|
||
| Curve | `curvefi/curve-mainnet` | 稳定币交换量 |
|
||
| GMX | `gmx-io/gmx-stats` | 永续合约交易量 |
|
||
|
||
**GraphQL 查询示例**(Uniswap V3 BTC/USDC 交易量):
|
||
|
||
```graphql
|
||
{
|
||
pool(id: "0x99ac8ca7087fa4a2a1fb6357269965a2014abc35") {
|
||
token0 { symbol }
|
||
token1 { symbol }
|
||
volumeUSD
|
||
txCount
|
||
totalValueLockedUSD
|
||
poolDayData(first: 7, orderBy: date, orderDirection: desc) {
|
||
date
|
||
volumeUSD
|
||
tvlUSD
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**Go 接入示例**:
|
||
|
||
```go
|
||
package thegraph
|
||
|
||
import (
|
||
"bytes"
|
||
"encoding/json"
|
||
"net/http"
|
||
)
|
||
|
||
const UniswapV3URL = "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3"
|
||
|
||
func QueryGraphQL(subgraphURL, query string) (map[string]interface{}, error) {
|
||
body := map[string]string{"query": query}
|
||
bodyBytes, _ := json.Marshal(body)
|
||
|
||
resp, err := http.Post(subgraphURL, "application/json", bytes.NewBuffer(bodyBytes))
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
var result map[string]interface{}
|
||
json.NewDecoder(resp.Body).Decode(&result)
|
||
return result, nil
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 六、综合数据源
|
||
|
||
### 6.1 CoinMarketCap(CMC)
|
||
|
||
CMC 提供最权威的市值排名、供应量、价格数据,免费层每天 333 次请求。
|
||
|
||
**基础 URL**:`https://pro-api.coinmarketcap.com/v1`
|
||
|
||
**认证方式**:`X-CMC_PRO_API_KEY: YOUR_API_KEY`(HTTP Header)
|
||
|
||
**核心端点**:
|
||
|
||
| 端点 | 说明 | 关键参数 |
|
||
|------|------|---------|
|
||
| `/cryptocurrency/listings/latest` | 最新市值排名 | `limit=100&convert=USD` |
|
||
| `/cryptocurrency/quotes/latest` | 指定币种最新报价 | `symbol=BTC,ETH,SOL` |
|
||
| `/global-metrics/quotes/latest` | 全球市场指标 | — |
|
||
| `/cryptocurrency/market-pairs/latest` | 交易对数据 | `symbol=BTC&limit=10` |
|
||
|
||
**全球市场指标数据格式**:
|
||
|
||
```json
|
||
{
|
||
"data": {
|
||
"total_market_cap": {"USD": 2500000000000}, // 总市值 2.5 万亿
|
||
"total_volume_24h": {"USD": 150000000000}, // 24h 成交量
|
||
"bitcoin_dominance": 52.5, // BTC 市占率
|
||
"ethereum_dominance": 17.2, // ETH 市占率
|
||
"active_cryptocurrencies": 23000,
|
||
"active_exchanges": 800
|
||
}
|
||
}
|
||
```
|
||
|
||
**量化系统使用场景**:
|
||
- BTC 市占率变化 → 判断山寨季/BTC 季
|
||
- 全球市值趋势 → 宏观市场判断
|
||
|
||
---
|
||
|
||
## 七、宏观数据源
|
||
|
||
### 7.1 FRED(美联储经济数据)
|
||
|
||
FRED(Federal Reserve Economic Data)是美联储圣路易斯分行维护的宏观经济数据库,提供免费 API,覆盖利率、通胀、就业等核心宏观指标。
|
||
|
||
**基础 URL**:`https://api.stlouisfed.org/fred`
|
||
|
||
**认证方式**:`api_key=YOUR_API_KEY`(URL 参数,免费注册获取)
|
||
|
||
**核心数据系列**:
|
||
|
||
| Series ID | 指标名称 | 频率 | 量化意义 |
|
||
|-----------|---------|------|---------|
|
||
| `FEDFUNDS` | 联邦基金利率 | 月度 | 加息/降息周期判断 |
|
||
| `CPIAUCSL` | CPI(城市消费者)| 月度 | 通胀水平 |
|
||
| `UNRATE` | 失业率 | 月度 | 经济健康度 |
|
||
| `DGS10` | 10 年期美债收益率 | 日度 | 无风险利率基准 |
|
||
| `DGS2` | 2 年期美债收益率 | 日度 | 短期利率预期 |
|
||
| `T10Y2Y` | 10Y-2Y 利差(收益率曲线)| 日度 | 倒挂 = 衰退预警 |
|
||
| `M2SL` | M2 货币供应量 | 月度 | 流动性判断 |
|
||
| `DCOILWTICO` | WTI 原油价格 | 日度 | 大宗商品/通胀关联 |
|
||
| `DEXUSEU` | 美元/欧元汇率 | 日度 | 美元强弱 |
|
||
|
||
**数据获取示例**:
|
||
|
||
```
|
||
GET https://api.stlouisfed.org/fred/series/observations
|
||
?series_id=FEDFUNDS
|
||
&api_key=YOUR_API_KEY
|
||
&file_type=json
|
||
&observation_start=2024-01-01
|
||
&observation_end=2026-03-06
|
||
```
|
||
|
||
**响应格式**:
|
||
|
||
```json
|
||
{
|
||
"observations": [
|
||
{"date": "2024-01-01", "value": "5.33"},
|
||
{"date": "2024-02-01", "value": "5.33"},
|
||
{"date": "2025-01-01", "value": "4.33"},
|
||
...
|
||
]
|
||
}
|
||
```
|
||
|
||
**宏观指标对加密市场的影响**:
|
||
|
||
| 宏观事件 | 对 BTC 的典型影响 | 滞后时间 |
|
||
|---------|----------------|---------|
|
||
| 降息 | 利好(流动性宽松)| 1-3 个月 |
|
||
| 加息 | 利空(流动性收紧)| 1-3 个月 |
|
||
| CPI 超预期 | 利空(加息预期升温)| 即时 |
|
||
| 失业率上升 | 利空(经济衰退担忧)| 1-2 个月 |
|
||
| 收益率曲线倒挂 | 中期利空 | 6-18 个月 |
|
||
| M2 扩张 | 利好(流动性充裕)| 3-6 个月 |
|
||
|
||
---
|
||
|
||
## 八、数据源统一接口设计
|
||
|
||
### 8.1 DataSource 接口定义
|
||
|
||
```go
|
||
// internal/datasource/interface.go
|
||
|
||
package datasource
|
||
|
||
import (
|
||
"context"
|
||
"time"
|
||
|
||
"quant-system/pkg/models"
|
||
)
|
||
|
||
// DataSource 所有数据源必须实现的统一接口
|
||
type DataSource interface {
|
||
// Name 返回数据源名称
|
||
Name() string
|
||
|
||
// GetKlines 获取 K 线数据
|
||
GetKlines(ctx context.Context, symbol, interval string, limit int) ([]models.Kline, error)
|
||
|
||
// GetFundingRate 获取资金费率(仅合约交易所)
|
||
GetFundingRate(ctx context.Context, symbol string) (*models.FundingRate, error)
|
||
|
||
// GetOpenInterest 获取未平仓量(仅合约交易所)
|
||
GetOpenInterest(ctx context.Context, symbol string) (*models.OpenInterest, error)
|
||
|
||
// Ping 健康检查
|
||
Ping(ctx context.Context) error
|
||
|
||
// RateLimit 返回每分钟请求限制
|
||
RateLimit() int
|
||
}
|
||
|
||
// OnChainDataSource 链上数据源接口(Glassnode 等)
|
||
type OnChainDataSource interface {
|
||
Name() string
|
||
GetMVRV(ctx context.Context, asset string) ([]models.TimeSeriesPoint, error)
|
||
GetSOPR(ctx context.Context, asset string) ([]models.TimeSeriesPoint, error)
|
||
GetExchangeBalance(ctx context.Context, asset string) ([]models.TimeSeriesPoint, error)
|
||
Ping(ctx context.Context) error
|
||
}
|
||
|
||
// MacroDataSource 宏观数据源接口(FRED 等)
|
||
type MacroDataSource interface {
|
||
Name() string
|
||
GetSeries(ctx context.Context, seriesID string, start, end time.Time) ([]models.TimeSeriesPoint, error)
|
||
Ping(ctx context.Context) error
|
||
}
|
||
```
|
||
|
||
### 8.2 数据源管理器
|
||
|
||
```go
|
||
// internal/datasource/manager.go
|
||
|
||
package datasource
|
||
|
||
import "sync"
|
||
|
||
type Manager struct {
|
||
mu sync.RWMutex
|
||
cexSources map[string]DataSource
|
||
onChainSrcs map[string]OnChainDataSource
|
||
macroSrcs map[string]MacroDataSource
|
||
}
|
||
|
||
func NewManager() *Manager {
|
||
return &Manager{
|
||
cexSources: make(map[string]DataSource),
|
||
onChainSrcs: make(map[string]OnChainDataSource),
|
||
macroSrcs: make(map[string]MacroDataSource),
|
||
}
|
||
}
|
||
|
||
func (m *Manager) RegisterCEX(source DataSource) {
|
||
m.mu.Lock()
|
||
defer m.mu.Unlock()
|
||
m.cexSources[source.Name()] = source
|
||
}
|
||
|
||
// GetAggregatedKlines 从多个数据源获取 K 线并取平均(数据质量更高)
|
||
func (m *Manager) GetAggregatedKlines(symbol, interval string, limit int) ([]models.Kline, error) {
|
||
// 优先从 Binance 获取,失败时切换到 OKX
|
||
// 对比两个数据源的收盘价,差异超过 0.1% 时报警
|
||
...
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 九、数据源状态监控
|
||
|
||
系统提供 `/api/v1/datasources` 接口,实时监控所有数据源状态:
|
||
|
||
```json
|
||
{
|
||
"timestamp": "2026-03-06T10:10:00+08:00",
|
||
"sources": [
|
||
{
|
||
"name": "Binance",
|
||
"type": "cex",
|
||
"status": "online",
|
||
"latency_ms": 45,
|
||
"last_success": "2026-03-06T10:09:55+08:00",
|
||
"rate_limit": "1200/min",
|
||
"remaining": 1150
|
||
},
|
||
{
|
||
"name": "Glassnode",
|
||
"type": "onchain",
|
||
"status": "online",
|
||
"latency_ms": 320,
|
||
"last_success": "2026-03-06T10:05:00+08:00",
|
||
"rate_limit": "10/min",
|
||
"remaining": 8
|
||
},
|
||
{
|
||
"name": "FRED",
|
||
"type": "macro",
|
||
"status": "online",
|
||
"latency_ms": 180,
|
||
"last_success": "2026-03-06T09:00:00+08:00",
|
||
"rate_limit": "120/min",
|
||
"remaining": 119
|
||
}
|
||
],
|
||
"summary": {
|
||
"total": 12,
|
||
"online": 11,
|
||
"offline": 1,
|
||
"degraded": 0
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 参考资料
|
||
|
||
- [1] Binance API 文档:https://binance-docs.github.io/apidocs/futures/en/
|
||
- [2] OKX API 文档:https://www.okx.com/docs-v5/en/
|
||
- [3] Bybit API 文档:https://bybit-exchange.github.io/docs/v5/intro
|
||
- [4] Deribit API 文档:https://docs.deribit.com/
|
||
- [5] Glassnode API 文档:https://docs.glassnode.com/basic-api/api/
|
||
- [6] CoinGlass API 文档:https://coinglass.com/api
|
||
- [7] DeFiLlama API 文档:https://defillama.com/docs/api
|
||
- [8] The Graph 文档:https://thegraph.com/docs/en/
|
||
- [9] CoinMarketCap API 文档:https://coinmarketcap.com/api/documentation/v1/
|
||
- [10] FRED API 文档:https://fred.stlouisfed.org/docs/api/fred/
|
||
- [11] Go 迭代系统完整架构:`./Go量化知识迭代系统完整架构.md`
|
||
- [12] 链上数据分析指南:`../10_链上数据分析/链上数据分析指南.md`
|