Phemex API交易配置求助:Python调用WebSocket获取比特币实时数据异常
问题排查及解决方案
核心错误点
- 客户端初始化参数错误:你已定义
API_ID、API_SECRET变量,但实例化Client时传入的是字符串常量"API_ID"、"API_SECRET",实际密钥没有被传入,直接导致鉴权失败。 - 未主动发送订阅指令:Phemex WebSocket服务不会主动推送数据,连接建立后需要主动发送对应行情的订阅请求才能收到推送,这和Binance部分公共频道的连接逻辑有差异。
- 环境不匹配风险:如果你生成的是Phemex主网的API密钥,连接测试网节点
wss://testnet.phemex.com/ws会直接鉴权失败,测试网需要单独在测试网平台注册账号生成专属密钥。
修正后代码示例(以订阅BTCUSDT永续合约实时成交行情为例)
from phemex.client import Client from phemex.exceptions import PhemexAPIException import websocket, json, pprint, talib, numpy, requests API_ID = "替换为你的实际API key" API_SECRET = "替换为你的实际API secret" # 主网节点用 wss://ws.phemex.com,测试网保留当前地址即可 SOCKET = "wss://testnet.phemex.com/ws" # 修正参数传入,用变量而非字符串 client = Client(API_ID, API_SECRET, True) def on_open(ws): print("opened connection") # 连接建立后主动发送订阅请求,这里订阅BTCUSDT永续合约的实时tick频道 subscribe_msg = { "id": 1, "method": "trade.subscribe", "params": ["BTCUSDT"] } ws.send(json.dumps(subscribe_msg)) def on_close(ws, close_status_code, close_msg): print(f"closed connection, code: {close_status_code}, msg: {close_msg}") def on_message(ws, message): print("received message") json_message = json.loads(message) pprint.pprint(json_message) def on_error(ws, error): print(f"error occurred: {error}") ws = websocket.WebSocketApp(SOCKET, on_open=on_open, on_close=on_close, on_message=on_message, on_error=on_error) ws.run_forever()
补充说明
- 如果需要订阅其他行情(比如K线、订单深度),修改订阅请求中
method和params的对应值即可,参数规则可参考Phemex官方接口文档。 - 运行前确认你使用的API密钥和连接的节点环境(主网/测试网)一致,测试网的资产和交易数据和主网完全隔离。
内容的提问来源于stack exchange,提问作者Dani
相关产品推荐
相关产品推荐

