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
我的经验:做市策略里,ticker的bid/ask价差(spread)是核心指标。如果spread突然变大,说明流动性出问题了。我一般会监控这个值,超过阈值就暂停做市。

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。

关键点:做市策略的核心逻辑就是围绕orderbook展开的。你要在bids和asks两侧挂单,赚取价差。我一般会取前5档的加权平均价作为“合理价格”的参考。

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
注意:trade的side字段表示“主动吃单方”。如果side是buy,说明买家主动吃掉了卖单,市场偏多。如果side是sell,说明卖家主动砸盘。这个指标我用来判断短期情绪。

4.5 三者关系与使用场景

这三个数据结构,其实对应了市场的三个维度:

  • Ticker:快照,用于快速判断当前价格区间。适合做仪表盘展示。
  • Orderbook:深度,用于计算挂单策略。做市的核心数据源。
  • Trade:流水,用于分析成交活跃度和买卖力量。适合做风控。

我一般这样用:每秒钟拉一次ticker做监控,每100毫秒拉一次orderbook做报价更新,每笔trade都实时推送做成交分析。嗯,频率要控制好,别把交易所搞崩了。

4.6 避坑指南

我曾经踩过几个坑,分享给你:

  • 限流问题:ccxt的rate limit只是客户端限制,但交易所服务端也有自己的限制。我建议你实际测试一下,别完全依赖库的默认设置。
  • 时间戳精度:有些交易所返回毫秒,有些返回微秒。做策略时统一转成毫秒,否则排序会出问题。
  • orderbook的limit参数:不是所有交易所都支持任意limit值。币安最多5000档,但有些小交易所只给50档。写代码时要做兼容。
  • trade的重复数据:同一笔trade可能被推送多次。我一般用trade id去重。
小技巧:调试阶段,先用模拟交易所(比如ccxt的模拟模式)测试。等逻辑跑通了,再切到实盘。我每次都是这么干的,省了不少手续费。

4.7 知识体系图

下面这张图帮你理清这三个数据结构的关系:

交易所API行情数据结构 交易所 Ticker 最新价/买一卖一/24h统计 Orderbook 买卖盘口深度/挂单列表 Trade 成交记录/主动买卖方向 监控/仪表盘 做市报价策略 成交分析/风控 三者共同构成做市策略的数据基础

这张图你看懂了吗?交易所是数据源,三个数据结构各有侧重。Ticker给你“快照”,Orderbook给你“深度”,Trade给你“流水”。做市策略就是基于这三者,计算出合理的报价区间,然后挂单等待成交。

嗯,今天就先聊到这里。代码不多,但理解这三个数据结构背后的逻辑,比会写代码更重要。下次我们聊聊怎么用这些数据构建一个简单的做市策略原型。


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