You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Python WebSocket无法一次性获取Bitfinex订单簿全量数据

看起来你正在搭建一个Bitfinex订单簿数据收集工具,遇到了逐笔接收数据的情况——这其实是Bitfinex WebSocket接口的正常高效传输机制,我帮你补全代码并解释其中的关键点:

Bitfinex订单簿WebSocket数据收集Python实现

补全后的可运行代码

import json
from websocket import create_connection

# 连接Bitfinex WebSocket(当前为v1接口,已废弃,推荐使用下方注释的v2接口)
ws = create_connection("wss://api.bitfinex.com/ws/1")
# 推荐切换到稳定的v2接口:ws = create_connection("wss://api2.bitfinex.com/ws/2")

# 订阅BTC/USD订单簿:精度P1(小数点后1位)、实时频率F1、深度25档
ws.send(json.dumps({
    "event": "subscribe",
    "channel": "book",
    "symbol": "tBTCUSD",
    "prec": "P1",
    "freq": "F1",
    "len": "25"
}))

try:
    while True:
        result = ws.recv()
        data = json.loads(result)
        
        # 过滤订阅确认等非数据消息,只处理订单簿相关数据
        if isinstance(data, list) and len(data) > 1:
            channel_id = data[0]
            book_content = data[1]
            
            # 初始全量快照是嵌套列表,后续增量是单条订单数据
            if isinstance(book_content, list):
                print("=== 收到全量订单簿快照 ===")
                for order in book_content:
                    side = "买单" if order[2] > 0 else "卖单"
                    print(f"价格: {order[0]}, 数量: {order[1]}, 方向: {side}")
            else:
                # 增量更新格式:[价格, 数量, 方向],数量为0表示订单取消
                price, amount, side_flag = book_content
                action = "新增/更新" if amount != 0 else "取消"
                side = "买单" if side_flag > 0 else "卖单"
                print(f"[{action}] 价格: {price}, 数量: {amount}, 方向: {side}")
except KeyboardInterrupt:
    print("\n程序终止,关闭WebSocket连接")
    ws.close()

关于“逐笔接收数据”的核心说明

  • 增量推送机制:这是你看到逐笔数据的根本原因——Bitfinex为了降低带宽消耗,采用行业通用的增量更新模式:
    • 首次订阅成功后,会推送一次你设置的25档全量订单簿快照
    • 后续只会推送发生变化的订单(新增、修改数量、取消),而非完整订单簿
  • 接口版本提示:你当前使用的v1接口已被官方废弃,强烈建议切换到代码中注释的v2接口,其文档更完善、稳定性更高
  • 数据解析技巧:
    • 先过滤掉event类型的订阅确认消息,只处理数组格式的订单数据
    • 全量快照是嵌套列表,每个子项对应一档订单的[价格, 数量, 方向标识](正数为买单,负数为卖单)
    • 增量更新是单个列表,若数量为0,代表该价格档位的订单已被完全取消

内容的提问来源于stack exchange,提问作者J87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:19:50