数据源与采集:主流交易所API对比、WebSocket实时流、RESTful历史数据、数据频率选择

做订单簿数据清洗,第一步不是写代码,而是搞清楚——数据从哪来?

我见过不少新手,一上来就撸代码,结果数据源选错了,后面全白干。说白了,数据源选不对,特征工程做得再漂亮也是空中楼阁。今天咱们就聊聊交易所API那点事。

主流交易所API对比

目前市面上主流的数字货币交易所,API风格大同小异,但细节上各有千秋。我个人习惯把交易所分成三个梯队:

交易所 REST限频 WebSocket深度 历史数据 我的评价
Binance 1200次/分钟 5级/20级/全量 支持 业界标杆,文档最清晰
OKX 600次/分钟 400档/全量 支持 深度数据丰富,但限频严格
Bybit 600次/分钟 50级/200级 有限支持 速度不错,历史数据偏少
Coinbase 300次/分钟 全量 支持 合规性强,但延迟略高

核心观点:选交易所API,别只看速度。要看文档质量、数据完整性、以及你所在地区的合规要求。我在项目中遇到过,选了某个小交易所,结果API三天两头改接口,数据采集程序天天报错,那叫一个酸爽。

WebSocket实时流

做订单簿特征工程,实时数据是主食。WebSocket就是你的筷子。

为什么不用REST轮询?你想想看,订单簿每秒可能变化几百次,REST请求还没回来,数据已经过时了。WebSocket是长连接,数据主动推给你,延迟低到毫秒级。

我建议的WebSocket接入策略:

  • 深度快照 + 增量更新:先拉一次全量深度,后面只接收变化数据。这样带宽省了,处理也快。
  • 心跳保活:交易所WebSocket一般30秒发一次ping,你得回pong。我曾经忘了写心跳逻辑,半夜三点程序断连,第二天才发现,亏大了。
  • 重连机制:网络波动是常态。写个自动重连,指数退避,别一断就连,容易触发限频。

小技巧:订阅深度时,别贪多。如果你只做高频策略,订阅前20档就够了。全量深度数据量巨大,处理不过来反而拖慢系统。

RESTful历史数据

实时数据用来交易,历史数据用来回测。两者缺一不可。

RESTful接口拉历史数据,有几个坑要注意:

  • 限频问题:大部分交易所对历史数据请求限制很严。Binance允许每分钟1200次,但如果你一次拉太多K线,会被封IP。
  • 数据精度:不同交易所的历史数据精度不一样。有的精确到毫秒,有的只到秒。做特征工程时,时间戳对齐是个大麻烦。
  • 数据完整性:交易所偶尔会漏数据。我建议拉完数据后,做一次完整性校验——检查时间戳是否连续,价格是否有跳空。
# 伪代码:拉取历史深度数据
def fetch_historical_depth(symbol, start_time, end_time):
    data = []
    while start_time < end_time:
        resp = requests.get(
            f"{BASE_URL}/depth",
            params={
                "symbol": symbol,
                "limit": 1000,
                "startTime": start_time
            }
        )
        # 检查返回数据是否完整
        if len(resp.json()['bids']) == 0:
            break
        data.extend(resp.json()['bids'])
        start_time = resp.json()['lastUpdateId']
        time.sleep(0.1)  # 限频控制
    return data

警告:别一次性拉太多数据。我见过有人一次拉一年的深度数据,结果交易所直接返回429(Too Many Requests),IP被封了24小时。建议分批拉,每次拉1小时的数据,中间加个0.5秒的延迟。

数据频率选择

这个问题其实没有标准答案。选什么频率,取决于你的策略类型。

我一般这样分:

  • 毫秒级(高频做市):需要全量深度,每秒更新几十次。数据量大,存储成本高,但信号灵敏。
  • 秒级(日内交易):5秒或10秒快照一次。大部分策略够用了,数据量适中。
  • 分钟级(趋势跟踪):1分钟或5分钟聚合一次。适合长线策略,数据量小,好处理。

嗯,这里要注意:频率越高,噪声越大。我刚开始做高频策略时,恨不得每秒取100次数据,结果发现大部分都是市场微结构噪声,反而把信号淹没了。后来我学乖了,先做降噪处理,再提取特征。

我的经验:如果你不确定选什么频率,先从1秒快照开始。数据量可控,特征也够用。等策略跑通了,再逐步提高频率。别一上来就追求极致速度,稳定才是第一位的。

知识体系总览

下面这张图,是我自己梳理的数据源与采集的核心逻辑。你看一眼,心里就有谱了。

数据源与采集核心逻辑 数据源选择 WebSocket实时流 RESTful历史数据 交易所API对比 深度快照+增量更新 心跳保活+重连机制 限频控制+分批拉取 数据完整性校验 Binance/OKX/Bybit 文档质量+合规性 数据频率选择 毫秒级(高频做市) 秒级(日内交易) 分钟级(趋势跟踪)

这张图把整个数据采集的流程串起来了。从选交易所、到实时流和历史数据、再到频率选择,每一步都有讲究。你照着这个框架走,基本不会跑偏。


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