文件
quantKonwledge/20_Go迭代系统/数据源接入完整指南.md
Manus Quant Agent 2a8b8413af feat: 新增第20模块 Go+Air量化知识迭代系统完整文档
- 新增 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接口全部正常
2026-03-06 00:47:51 -05:00

807 行
24 KiB
Markdown

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# 数据源接入完整指南
> 本文档详细介绍量化知识迭代系统中所有数据源的接入方式、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日
└── 标的资产
```
**DVOLDeribit 波动率指数)数据格式**
```json
{
"result": {
"data": [
[1638316800000, 75.5], // [时间戳, DVOL 值]
[1638316860000, 76.2],
...
],
"continuation": null
}
}
```
**关键期权指标说明**
| 指标 | 说明 | 量化意义 |
|------|------|---------|
| IV隐含波动率| 市场对未来波动的预期 | IV > 80% → 市场恐慌,可能见底 |
| DVOL | Deribit 波动率指数(类似 VIX| DVOL 急升 → 恐慌情绪 |
| Put/Call Ratio | 看跌/看涨期权比率 | > 1.2 → 市场偏空 |
| 最大痛点 | 期权到期时最多期权失效的价格 | 到期日前价格有向最大痛点靠拢的倾向 |
| GEXGamma 敞口)| 做市商 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 CoinMarketCapCMC
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美联储经济数据
FREDFederal 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`