Python对接ByBit Websocket 提取价格与交易对存入变量方法
实现方案
你现有代码中ws_public.get_data("orderBookL2_25.BTCUSD")返回的是Python原生的列表嵌套字典结构,直接按键名取值就能提取需要的字段,不需要安装额外依赖、也不需要做复杂的格式解析。
按下面的代码修改后,提取出的price为数值类型、symbol为字符串类型,完全匹配你要的赋值效果。
修改后可直接运行的完整代码
##################################################### from BybitWebsocket import BybitWebsocket import logging from time import sleep def setup_logger(): logger = logging.getLogger() logger.setLevel(logging.DEBUG) ch = logging.StreamHandler() formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") ch.setFormatter(formatter) logger.addHandler(ch) return logger if __name__ == "__main__": logger = setup_logger() ws_public = BybitWebsocket(wsURL="wss://stream-testnet.bybit.com/realtime", api_key="apikey", api_secret="apisecret" ) # 后续换交易对只需要改这一个变量即可 target_symbol = "BTCUSD" ws_public.subscribe_orderBookL2(target_symbol) subscribe_topic = f"orderBookL2_25.{target_symbol}" while(1): # 接收Websocket推送的原始数据 orderbook_data = ws_public.get_data(subscribe_topic) # 没收到有效数据时跳过本轮循环,避免报错 if not orderbook_data: sleep(1) continue # 取单条有效盘口数据提取字段,要拿买一卖一可调整此处逻辑 active_tick = orderbook_data[0] symbol = active_tick["symbol"] price = active_tick["price"] # 下方可直接调用两个变量编写交易逻辑 logger.info(f"当前交易对: {symbol}, 对应价格: {price}") # 例:价格达到30000触发信号可直接写 if price >= 30000: 执行对应逻辑 sleep(1) #####################################################
核心逻辑说明
- 新增空值判断:Websocket刚启动尚未收到推送时,
get_data()会返回空值,加判断可以避免脚本启动时报索引错误 - Bybit返回的L2订单簿数据是列表结构,列表内每一项对应一个盘口档位的挂单数据,取
orderbook_data[0]即可拿到单条有效挂单记录 - 取值逻辑和你早年学Java时Map按键取值完全一致:直接通过
["字段名"]的方式,就能从单条记录中取出symbol和price字段赋值给独立变量 - 如果后续需要拿买一、卖一价格,只需要遍历返回的订单簿列表,找到
side字段为Buy的最高报价、side字段为Sell的最低报价即可,字段取值逻辑完全不变 - 如果同时订阅多个交易对,不需要手动硬编码交易对名称,
symbol字段会自动返回对应数据所属的交易对标识
提示:代码里把订阅的交易对和订阅主题拆成了独立变量,后续换交易对只需要修改
target_symbol的值即可,不用重复改多处代码。
内容的提问来源于stack exchange,提问作者Osman
相关产品推荐
相关产品推荐

