文件
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

24 KiB

数据源接入完整指南

本文档详细介绍量化知识迭代系统中所有数据源的接入方式、API 端点、数据格式与使用示例。 覆盖 CEX 交易所、链上数据、期权数据、DeFi 数据、宏观数据 五大类共 12 个数据源

返回:Go 迭代系统主文档 | Wiki 主索引


一、数据源总览

类别 数据源 主要数据 是否需要 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 APIhttps://api.binance.com
  • WebSocketwss://stream.binance.com:9443
  • 期货 RESThttps://fapi.binance.com
  • 期货 WebSocketwss://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 线为数组):

[
  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

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 线订阅

// 订阅 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 并列为期权数据最佳来源。

基础 URLhttps://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 略有不同):

{
  "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 期货数据的重要来源。

基础 URLhttps://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

资金费率数据格式

{
  "retCode": 0,
  "result": {
    "list": [
      {
        "symbol": "BTCUSDT",
        "fundingRate": "0.0001",      // 资金费率0.01%
        "fundingRateTimestamp": "1638316800000"  // 结算时间
      }
    ]
  }
}

量化系统使用场景

  • 资金费率三所对比Binance + OKX + Bybit→ 判断市场情绪极值
  • 未平仓量趋势 → 判断资金流入/流出

三、期权数据源

3.1 Deribit

Deribit 是全球最大的加密货币期权交易所,BTC/ETH 期权市场份额超过 90%,是期权数据的权威来源。

基础 URLhttps://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 波动率指数)数据格式

{
  "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

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、持仓分布等核心链上指标。

基础 URLhttps://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 数据格式

[
  {"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 专注于衍生品市场数据,提供资金费率、清算数据、未平仓量等核心指标。

基础 URLhttps://open-api.coinglass.com/public/v2

认证方式coinglassSecret: YOUR_API_KEYHTTP 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

资金费率数据格式

{
  "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。

基础 URLhttps://api.llama.fi

核心端点

端点 说明 返回内容
/protocols 所有协议列表 协议名称、TVL、链、类别
/tvl/{protocol} 单协议 TVL 历史 日级别 TVL 历史数据
/charts 全链 TVL 历史 所有链的 TVL 汇总
/chains 各链 TVL 按链分类的 TVL
https://stablecoins.llama.fi/stablecoins 稳定币数据 各稳定币市值、流通量

全链 TVL 数据格式

[
  {"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 交易量、流动性等精细数据。

基础 URLhttps://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 交易量):

{
  pool(id: "0x99ac8ca7087fa4a2a1fb6357269965a2014abc35") {
    token0 { symbol }
    token1 { symbol }
    volumeUSD
    txCount
    totalValueLockedUSD
    poolDayData(first: 7, orderBy: date, orderDirection: desc) {
      date
      volumeUSD
      tvlUSD
    }
  }
}

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 次请求。

基础 URLhttps://pro-api.coinmarketcap.com/v1

认证方式X-CMC_PRO_API_KEY: YOUR_API_KEYHTTP 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

全球市场指标数据格式

{
  "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,覆盖利率、通胀、就业等核心宏观指标。

基础 URLhttps://api.stlouisfed.org/fred

认证方式api_key=YOUR_API_KEYURL 参数,免费注册获取)

核心数据系列

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

响应格式

{
  "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 接口定义

// 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 数据源管理器

// 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 接口,实时监控所有数据源状态:

{
  "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
  }
}

参考资料