4. 交易所API基础:使用ccxt库获取行情数据,理解ticker、orderbook、trade数据结构
做市策略要跑起来,第一步就是跟交易所“对话”。说白了,你得知道当前什么价、谁在买谁在卖、最近成交了多少笔。这些数据从哪里来?从交易所的API来。
我个人习惯用ccxt这个库。它把几十家交易所的API接口统一了。你换交易所,代码几乎不用改。嗯,这很重要——你想想看,要是每家交易所都写一套对接代码,那光维护就够你受的。
4.1 安装与初始化
先装库,一行命令搞定:
pip install ccxt
然后初始化交易所对象。以币安为例:
import ccxt
exchange = ccxt.binance({
'apiKey': '你的API_KEY',
'secret': '你的SECRET_KEY',
'enableRateLimit': True, # 我建议一定要开,防止被交易所封
})
注意那个 enableRateLimit。我曾经没开这个,结果高频请求直接把IP给封了。嗯,那天的策略回测数据全废了。
4.2 获取Ticker——看一眼当前行情
Ticker就是“快照”。它告诉你当前最新成交价、24小时最高最低、成交量等。说白了,就是交易所给你的一张“行情速览表”。
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker)
返回的数据结构长这样:
| 字段 | 含义 | 示例值 |
|---|---|---|
| symbol | 交易对 | BTC/USDT |
| last | 最新成交价 | 50000.0 |
| bid | 买一价 | 49990.0 |
| ask | 卖一价 | 50010.0 |
| baseVolume | 24小时成交量(币) | 12345.6 |
| quoteVolume | 24小时成交额(USDT) | 617280000.0 |
| high | 24小时最高价 | 51000.0 |
| low | 24小时最低价 | 49000.0 |
| timestamp | 数据时间戳 | 1700000000000 |
4.3 获取Orderbook——看清买卖盘口
Ticker只告诉你买一卖一,但做市需要知道整个深度。Orderbook就是“订单簿”,它列出了所有挂单的价格和数量。
orderbook = exchange.fetch_order_book('BTC/USDT', limit=10)
print(orderbook)
返回结构:
{
'bids': [[49990.0, 1.5], [49980.0, 2.3], ...], # 买盘,按价格降序
'asks': [[50010.0, 0.8], [50020.0, 1.2], ...], # 卖盘,按价格升序
'timestamp': 1700000000000,
'datetime': '2024-11-15T00:00:00.000Z'
}
每个元素是 [价格, 数量]。比如 [49990.0, 1.5] 表示有人想以49990 USDT的价格买入1.5个BTC。
4.4 获取Trade——看成交流水
Trade是“成交记录”。每一笔买卖成交了,交易所就会生成一条trade数据。它告诉你:什么时间、什么价格、成交了多少、是主动买还是主动卖。
trades = exchange.fetch_trades('BTC/USDT', limit=5)
for trade in trades:
print(trade)
返回结构:
| 字段 | 含义 | 示例值 |
|---|---|---|
| id | 成交ID | 123456789 |
| timestamp | 成交时间戳 | 1700000000000 |
| price | 成交价格 | 50000.0 |
| amount | 成交数量 | 0.1 |
| side | 主动方(buy/sell) | buy |
| cost | 成交额(price * amount) | 5000.0 |
4.5 三者关系与使用场景
这三个数据结构,其实对应了市场的三个维度:
- Ticker:快照,用于快速判断当前价格区间。适合做仪表盘展示。
- Orderbook:深度,用于计算挂单策略。做市的核心数据源。
- Trade:流水,用于分析成交活跃度和买卖力量。适合做风控。
我一般这样用:每秒钟拉一次ticker做监控,每100毫秒拉一次orderbook做报价更新,每笔trade都实时推送做成交分析。嗯,频率要控制好,别把交易所搞崩了。
4.6 避坑指南
我曾经踩过几个坑,分享给你:
- 限流问题:ccxt的rate limit只是客户端限制,但交易所服务端也有自己的限制。我建议你实际测试一下,别完全依赖库的默认设置。
- 时间戳精度:有些交易所返回毫秒,有些返回微秒。做策略时统一转成毫秒,否则排序会出问题。
- orderbook的limit参数:不是所有交易所都支持任意limit值。币安最多5000档,但有些小交易所只给50档。写代码时要做兼容。
- trade的重复数据:同一笔trade可能被推送多次。我一般用trade id去重。
4.7 知识体系图
下面这张图帮你理清这三个数据结构的关系:
这张图你看懂了吗?交易所是数据源,三个数据结构各有侧重。Ticker给你“快照”,Orderbook给你“深度”,Trade给你“流水”。做市策略就是基于这三者,计算出合理的报价区间,然后挂单等待成交。
嗯,今天就先聊到这里。代码不多,但理解这三个数据结构背后的逻辑,比会写代码更重要。下次我们聊聊怎么用这些数据构建一个简单的做市策略原型。
公众号:蓝海资料掘金营,微信deep3321