数据源分析:交易所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直接给你封了。
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 |
| 数据推送 | 请求-响应 | 主动推送 |
| 适合场景 | 历史数据、低频 | 实时行情、高频 |
| 稳定性 | 高 | 需重连机制 |
第三方数据供应商
除了交易所直连,很多时候我们得靠第三方。原因很简单——交易所数据不全、历史深度不够、或者你不想维护那么多连接。
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居多)、偶尔不稳定
- 适合:个人量化、策略回测、学习研究
市场数据分类: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数据能捕捉到微观结构,适合做高频信号。
订单簿(Order Book)
订单簿就是当前市场上所有未成交的买单和卖单。它反映了市场的深度和流动性。
# 订单簿结构示例
{
"bids": [ // 买单,按价格从高到低
[15.68, 5000], // [价格, 数量]
[15.67, 12000],
[15.66, 8000]
],
"asks": [ // 卖单,按价格从低到高
[15.69, 3000],
[15.70, 15000],
[15.71, 6000]
]
}
订单簿能告诉你什么?
- 买卖压力:买单多还是卖单多?
- 支撑阻力:哪个价位挂单密集?
- 大单动向:有没有人偷偷吃货或出货?
我做过一个策略,专门监控订单簿的失衡程度——当买单总量远大于卖单总量时,开多单。效果还不错,但要注意:订单簿变化极快,每秒可能更新几十次。
知识体系总览
下面这张图,是我梳理的数据源知识体系。你可以把它当成一张地图,随时回来看看自己走到哪了。
数据源选对了,数据管道就成功了一半。我见过太多人花几个月搭管道,结果发现数据源选错了,又推倒重来。所以,花点时间想清楚你要做什么策略、什么频率、什么市场,再选数据源。
下一节,我们会深入数据管道的架构设计。但今天的内容,够你消化一阵子了。
公众号:蓝海资料掘金营,微信deep3321