数据源分析:交易所API与第三方数据供应商

做量化交易,第一件事就是搞定数据。我见过太多人一上来就写策略,结果数据源选错了,后面全白干。今天咱们聊聊数据源这个老生常谈但又极其关键的话题。

交易所API:REST vs WebSocket

交易所API就两种主流方式:REST和WebSocket。说白了,一个是你主动去问,一个是人家主动告诉你。

REST API

REST就像你去图书馆借书——你问一句,管理员答一句。每次请求都得重新建立连接,拿完数据就断开。

适用场景:历史数据查询、非实时行情、交易下单
# 伪代码示例:REST请求K线数据
GET /api/v1/klines?symbol=BTCUSDT&interval=1h&limit=100
Response: [
  [timestamp, open, high, low, close, volume],
  ...
]

我个人习惯用REST拉历史数据做回测。为什么?因为简单、稳定、不容易断。但要注意——频率限制。币安REST接口每秒最多10次请求,你写个死循环去刷,IP直接给你封了。

避坑指南:我曾经在实盘项目里用REST轮询1秒级行情,结果交易所把我IP限流了整整2小时。那段时间策略完全瞎了。后来我才明白——高频行情必须上WebSocket。

WebSocket

WebSocket就像你开了个直播间——服务器有数据就推给你,不用你反复问。连接建立后保持长连接,延迟极低。

# 伪代码:WebSocket订阅深度数据
ws.connect("wss://stream.binance.com:9443/ws")
ws.subscribe("btcusdt@depth20@100ms")
# 然后等着收数据就行
on_message: {
  "e": "depthUpdate",
  "bids": [[price, qty], ...],
  "asks": [[price, qty], ...]
}

你想想看,做高频交易或者做市策略,不用WebSocket根本没法玩。REST的延迟在100-500ms,WebSocket能做到10-50ms。差距不是一个量级。

特性 REST WebSocket
连接方式 短连接 长连接
延迟 100-500ms 10-50ms
数据推送 请求-响应 主动推送
适合场景 历史数据、低频 实时行情、高频
稳定性 需重连机制
我的建议:两者结合用。REST拉历史数据做初始化,WebSocket收实时流做更新。我做的数据管道基本都是这个架构。

第三方数据供应商

除了交易所直连,很多时候我们得靠第三方。原因很简单——交易所数据不全、历史深度不够、或者你不想维护那么多连接。

Wind(万得)

国内机构标配。股票、期货、债券、基金,覆盖面极广。我最早在私募工作时,公司花了几十万买Wind终端。说实话,贵是贵,但数据质量确实好。

  • 优点:数据全、清洗干净、有API接口
  • 缺点:贵(个人用户基本用不起)、只能在Windows上用
  • 适合:机构用户、A股/期货研究

Bloomberg

全球金融数据的王者。做跨境交易、外汇、债券的,基本绕不开它。我有个朋友在海外对冲基金,每天靠Bloomberg Terminal看全球宏观数据。

  • 优点:全球覆盖、实时性极强、历史数据完整
  • 缺点:天价(年费几十万人民币)、学习曲线陡
  • 适合:大型机构、跨境交易

Tushare

国内量化圈最火的免费/低收费数据源。我刚开始做个人量化时,就是靠Tushare起家的。它提供股票、基金、期货、宏观经济等数据。

# Tushare示例:获取日线数据
import tushare as ts

pro = ts.pro_api('your_token')
df = pro.daily(ts_code='000001.SZ', start_date='20240101', end_date='20240301')
print(df.head())
  • 优点:免费额度够用、Python接口友好、社区活跃
  • 缺点:数据延迟(T+1居多)、偶尔不稳定
  • 适合:个人量化、策略回测、学习研究
选型建议:做个人研究用Tushare或AkShare就够了。做机构产品,Wind或Bloomberg是必须的。别想着省钱——数据质量差一个百分点,策略收益可能差十个点。

市场数据分类:Level1/Level2、Tick/Bar、订单簿

数据拿到手了,还得知道它是什么级别。不同级别的数据,用途天差地别。

Level1 vs Level2

Level1就是大家都能看到的行情——最新价、涨跌幅、成交量这些。Level2是深度数据,能看到买卖盘口的前几十档挂单。

数据级别 包含内容 典型用途
Level1 最新价、涨跌幅、成交量、最高/最低价 普通交易、趋势跟踪
Level2 买卖10-50档挂单、逐笔成交、大单统计 高频交易、订单簿分析、做市策略

嗯,这里要注意——Level2数据在A股是要额外付费的。交易所卖这个赚钱。但在加密货币市场,大部分交易所免费提供深度数据。

Tick数据 vs Bar数据

Tick数据就是每一笔成交的原始记录。Bar数据是聚合后的K线。

# Tick数据示例
timestamp: 2024-03-01 09:30:00.123
price: 15.67
volume: 1000
side: buy

# Bar数据示例(1分钟K线)
timestamp: 2024-03-01 09:31:00
open: 15.65, high: 15.70, low: 15.63, close: 15.68, volume: 25000

我个人习惯:回测用Bar数据,实盘监控用Tick数据。为什么?Bar数据存储小、计算快,适合跑大量策略。Tick数据能捕捉到微观结构,适合做高频信号。

我曾经踩过的坑:用1分钟Bar数据做高频策略回测,结果实盘一跑就亏。后来发现——Bar数据把很多日内波动给平滑掉了,回测看起来很美,实盘全是噪音。从那以后,做高频策略我至少用Tick或秒级Bar。

订单簿(Order Book)

订单簿就是当前市场上所有未成交的买单和卖单。它反映了市场的深度和流动性。

# 订单簿结构示例
{
  "bids": [  // 买单,按价格从高到低
    [15.68, 5000],  // [价格, 数量]
    [15.67, 12000],
    [15.66, 8000]
  ],
  "asks": [  // 卖单,按价格从低到高
    [15.69, 3000],
    [15.70, 15000],
    [15.71, 6000]
  ]
}

订单簿能告诉你什么?

  • 买卖压力:买单多还是卖单多?
  • 支撑阻力:哪个价位挂单密集?
  • 大单动向:有没有人偷偷吃货或出货?

我做过一个策略,专门监控订单簿的失衡程度——当买单总量远大于卖单总量时,开多单。效果还不错,但要注意:订单簿变化极快,每秒可能更新几十次。

知识体系总览

下面这张图,是我梳理的数据源知识体系。你可以把它当成一张地图,随时回来看看自己走到哪了。

量化交易数据源 交易所API REST WebSocket 历史数据 实时推送 第三方数据供应商 Wind Bloomberg Tushare 市场数据分类 Level1/2 Tick/Bar 订单簿 核心原则 低频策略用REST+Bar数据 | 高频策略用WebSocket+Tick+订单簿 个人研究用免费源 | 机构产品用付费源

数据源选对了,数据管道就成功了一半。我见过太多人花几个月搭管道,结果发现数据源选错了,又推倒重来。所以,花点时间想清楚你要做什么策略、什么频率、什么市场,再选数据源。

下一节,我们会深入数据管道的架构设计。但今天的内容,够你消化一阵子了。


公众号:蓝海资料掘金营,微信deep3321