Bybit API终极指南:交易自动化,盈利快人一步!

2025-03-08 06:01:41 57

如何配置和使用Bybit API接口?

本文将详细介绍如何在Bybit交易所配置和使用API接口,帮助开发者利用API进行程序化交易、数据分析以及自动化操作。

1. 理解 Bybit API

Bybit API 提供了一整套强大的工具,允许开发者以编程方式与 Bybit 加密货币交易所进行交互。 通过这些应用程序编程接口 (API),你可以自动化交易策略,访问市场数据,并管理你的账户,而无需手动操作 Bybit 平台。

  • 交易管理: 创建并提交限价单、市价单等多种订单类型,执行撤单操作,修改现有订单参数(如价格和数量),并实时查询订单的当前状态(已成交、待成交、已取消等)。 Bybit API 支持多种订单类型和时间有效性策略,以便开发者构建复杂的交易策略。
  • 市场数据: 通过 API 获取实时市场行情,包括最新成交价格、买卖盘口深度等。 访问历史 K 线数据,用于技术分析和回溯测试。 获取不同聚合级别的深度数据(订单簿信息),用于评估市场流动性。 通过历史数据,开发者可以构建量化交易模型并进行策略优化。
  • 账户信息: 查询你的 Bybit 账户余额,包括可用余额、已用保证金等。 实时获取你的持仓信息,包括持仓数量、平均持仓成本、未实现盈亏等。 查询完整的交易历史记录,包括成交时间、成交价格、手续费等详细信息,用于交易分析和报表生成。
  • 资金管理: 通过 API 发起充值请求,将资金转入 Bybit 账户。 发起提现请求,将资金从 Bybit 账户转出到你的钱包地址。 在 Bybit 账户的不同子账户之间进行资金划转(例如,从现货账户到合约账户)。 请注意,充值、提现和划转资金等敏感操作可能需要额外的权限申请和安全验证。

Bybit 提供了两种主要的 API 接口:

  • REST API: 一种基于 HTTP 协议的请求/响应模型,使用标准的 HTTP 方法(GET, POST, PUT, DELETE)进行数据交互。 适用于同步交互模式,即客户端发送请求后等待服务器返回响应。 由于其简单易懂的特性,REST API 非常适合初学者和不需要极低延迟的应用场景。
  • WebSocket API: 一种基于 WebSocket 协议的双向通信协议,允许服务器主动向客户端推送数据,而无需客户端频繁发送请求。 适用于实时数据流和低延迟的应用场景,例如高频交易和实时监控。 WebSocket API 通过建立持久连接,显著降低了网络延迟,提高了数据传输效率。

选择哪种 API 取决于你的具体应用场景和需求。 如果你的应用需要高频率的交易操作或对实时行情数据有极高的需求,例如开发高频交易机器人,那么 WebSocket API 是更合适的选择,因为它能提供更低的延迟和实时数据推送。 如果你只需要执行一些简单的下单或查询账户余额等操作,对延迟要求不高,那么 REST API 则是一个更简单易用且容易理解的选择。

2. 获取 Bybit API 密钥

在使用 Bybit API 之前,你需要先获取 API 密钥 (API Key 和 API Secret)。API 密钥是访问 Bybit API 的凭证,类似于用户名和密码,但专为程序化访问设计。请务必妥善保管您的 API 密钥,避免泄露。

  1. 登录 Bybit 账户: 你需要拥有一个有效的 Bybit 交易账户。如果没有,请先访问 Bybit 官方网站完成注册,并按照指示完成身份验证流程(KYC)。身份验证能确保账户安全,并符合监管要求。
  2. 进入 API 管理页面: 登录 Bybit 账户后,将鼠标悬停在页面右上角的用户头像上。在弹出的下拉菜单中,选择 “API” 选项,即可进入 API 管理页面。该页面是您创建、管理和监控 API 密钥的中心。
  3. 创建新的 API 密钥: 在 API 管理页面,找到并点击 “创建新的 API” 按钮,开始创建您的第一个 API 密钥。您可能需要进行二次身份验证以确认您的操作。
  4. 设置 API 密钥权限: 设置 API 密钥权限至关重要。Bybit 提供了精细化的权限控制机制,允许您根据实际需求自定义 API 密钥的功能范围。请务必仔细阅读并理解每个权限的含义,避免授予不必要的权限,从而降低潜在的安全风险。例如,如果您仅需要获取市场数据用于分析,则只需开启 “读取” 权限,而无需开启 “交易” 或 “提现” 权限。
    • API 名称: 为您的 API 密钥指定一个具有描述性的名称,例如 "MarketDataBot" 或 "TradingAlgorithm_v1"。这将帮助您在管理多个 API 密钥时轻松识别和区分。
    • IP 访问限制: 强烈建议启用 IP 访问限制功能,设置允许访问 API 的 IP 地址白名单。只有来自白名单 IP 地址的请求才能使用该 API 密钥。您可以添加单个 IP 地址,也可以添加 IP 地址段。这能有效防止 API 密钥泄露后被未经授权的第三方滥用,大大提高账户的安全性。 如果您的应用程序部署在云服务器上,请将服务器的公网 IP 地址添加到白名单中。 如果您在本地运行脚本,则需要将您的公网 IP 地址添加到白名单中。
    • 权限设置:
      • 读取: 授予此权限后,API 密钥可以访问账户信息(例如余额、持仓)、市场数据(例如价格、成交量)等只读信息。此权限通常用于数据分析、行情监控等场景。
      • 交易: 授予此权限后,API 密钥可以执行下单、撤单、修改订单等交易操作。使用此权限请务必谨慎,确保您的交易逻辑经过充分测试,并采取必要的风险控制措施,例如设置止损单。
      • 提现: 授予此权限后,API 密钥可以发起提现请求,将资金从您的 Bybit 账户转移到其他地址。 请务必谨慎授予此权限,因为它具有极高的风险。仅在绝对必要时才开启此权限,并采取严格的安全措施,例如设置提现地址白名单。
  5. 获取 API Key 和 API Secret: 成功创建 API 密钥后,系统将生成 API Key 和 API Secret。 API Key 用于标识您的身份,而 API Secret 则用于验证您的请求。 请务必将您的 API Secret 安全地存储在本地,并采取必要的加密措施。切勿将 API Secret 泄露给任何人,也不要将其存储在公共代码仓库中。 API Secret 泄露可能会导致您的账户被盗用,造成资金损失。 建议定期更换 API 密钥,以进一步提高安全性。 您可以使用 Bybit 提供的 API 密钥轮换功能,定期生成新的 API 密钥,并停用旧的 API 密钥。

3. 使用 REST API

3.1. 发送 REST API 请求

Bybit REST API 的请求需要满足以下关键条件,以确保安全、高效地与交易所服务器进行通信:

  • Endpoint: Bybit REST API 的 Endpoint (也称为基准URL) 根据 API 版本和所选择的环境(例如:测试网或主网)而有所不同。例如,Bybit v3 版本的 Endpoint 通常遵循 https://api.bybit.com/v3/ 这样的结构。 请务必查阅 Bybit 官方文档以获取对应 API 版本和环境的最新、准确的 Endpoint 信息。不正确的 Endpoint 会导致请求失败。官方文档会详细说明每个API版本可用的Endpoint, 开发者应仔细核对。
  • HTTP Method: Bybit REST API 采用不同的 HTTP 方法 (例如:GET, POST, PUT, DELETE) 来执行不同类型的操作。 GET 方法通常用于检索数据, POST 方法用于创建或更新资源,PUT 方法用于替换资源,DELETE 方法用于删除资源。选择正确的 HTTP 方法对于成功执行 API 调用至关重要。具体使用哪种HTTP方法需要参照Bybit API文档进行操作。
  • Headers: 每个 REST API 请求的头部 (Headers) 都必须包含特定的信息,以便进行身份验证、数据格式指定和签名验证,保证请求的合法性和安全性:
    • Content-Type: application/ : 明确告知服务器,客户端正在发送的数据格式是 JSON (JavaScript Object Notation)。 JSON 是一种常用的轻量级数据交换格式。
    • X-BAPI-API-KEY : 你的 API Key,这是你在 Bybit 交易所注册后获得的唯一标识符,用于标识你的身份。 将你的 API Key 添加到此头部字段,以便 Bybit 服务器验证你的身份并授权访问 API。 API Key需要妥善保管,避免泄露。
    • X-BAPI-TIMESTAMP : 请求的时间戳(Unix 时间戳),表示请求发送的时间。 必须是 Unix 时间戳,单位为秒。 时间戳用于防止重放攻击,Bybit 服务器会检查时间戳的有效性,判断请求是否过期。
    • X-BAPI-SIGN : 请求的签名。 这是一个使用你的 API Secret 和请求参数生成的加密签名。 用于验证请求的完整性,确保请求在传输过程中没有被篡改。签名算法通常包含时间戳、API Key 和请求参数,使用哈希函数进行加密。签名生成算法的具体细节需要在Bybit的API文档中确认。
  • Parameters: 根据你所调用的特定 API 接口,你需要传递不同的参数来指定请求的具体内容和行为。 参数可以是查询参数 (Query Parameters) 附加在 URL 后面,也可以是请求体 (Request Body) 中的 JSON 数据。 确保你传递了所有必需的参数,并且参数的格式和类型符合 API 文档的要求。

3.2. 生成 API 签名

Bybit REST API 请求需要进行签名,以确保请求的安全性,防止未经授权的访问,并验证请求的完整性。签名算法是保障交易安全的关键环节。下面详细介绍签名生成的过程:

  1. 构建签名字符串:
    • 对于 GET 请求 ,需将所有请求参数按照其 ASCII 码的字母顺序进行排序。随后,使用等号 = 连接参数名和对应的参数值。不同的参数对之间使用连接符 & 进行分隔。将 API 接口的 endpoint 路径与排序后的参数字符串拼接起来,形成最终的签名字符串。参数值需要进行 URL 编码,以确保特殊字符的正确传递。
    • 对于 POST 请求 ,直接将请求体 (通常是 JSON 格式) 作为签名字符串。需要特别注意的是,JSON 对象的 key 必须是字符串类型,并且要保证请求体的内容与签名时使用的内容完全一致。任何细微的差别,例如空格或字段顺序的变化,都将导致签名验证失败。
  2. 计算签名: 使用安全散列算法 HMAC-SHA256,以你的 API Secret 作为密钥,对构建好的签名字符串进行哈希计算。API Secret 必须妥善保管,切勿泄露,否则可能导致账户被盗用。HMAC-SHA256 算法能够生成一个固定长度的哈希值,用于验证请求的完整性和来源。
  3. 将签名转换为十六进制字符串。 将计算得到的哈希值转换为十六进制字符串表示形式。这是因为十六进制字符串更易于在 HTTP 请求中传递和处理。

以下是一个 Python 示例,演示如何生成 API 签名:

import hashlib import hmac import time import

def generate_signature(api_secret, timestamp, endpoint, query_params=None, body=None): """ 生成 Bybit API 签名。 函数功能:根据提供的 API Secret、时间戳、API 接口地址、查询参数和请求体(适用于 POST 请求)生成 Bybit API 签名。 签名用于验证 API 请求的真实性和完整性,确保请求未被篡改。

Args:
    api_secret: 你的 API Secret,从 Bybit 平台获取。
    timestamp: 请求的时间戳(Unix 时间戳,单位为秒),精确到秒级别。
    endpoint: API Endpoint,例如 '/v5/order/create'。
    query_params: GET 请求的参数字典,例如 {'symbol': 'BTCUSDT', 'side': 'Buy'}。
    body: POST 请求的请求体(JSON 格式),例如 {'symbol': 'BTCUSDT', 'side': 'Buy', 'qty': 0.01}。

Returns:
    API 签名,为十六进制字符串。
"""
if query_params:
    sorted_params = sorted(query_params.items())
    query_string = '&'.join([f'{k}={v}' for k, v in sorted_params])
    sign_string = endpoint + '?' + query_string
elif body:
    sign_string = .dumps(body)  # 重要:body 必须是 JSON 格式的字符串
else:
    sign_string = endpoint

message = str(timestamp) + sign_string
signature = hmac.new(api_secret.encode('utf-8'), message.encode('utf-8'), hashlib.sha256).hexdigest()
return signature

示例

api_secret = "YOUR_API_SECRET" # 替换成你的API Secret。API Secret是与API Key配对使用的密钥,用于验证请求的身份和完整性。务必妥善保管,避免泄露,因为它允许访问你的账户。如果API Secret泄露,应立即更换。在生产环境中,不要直接在代码中硬编码API Secret,而是应该使用环境变量或密钥管理服务来安全存储和访问。

timestamp = int(time.time()) # 获取当前Unix时间戳。时间戳用于防止重放攻击,确保每个请求都是新鲜的。许多交易所API都要求请求中包含时间戳,并且时间戳必须在一定的时间窗口内(例如,前后5分钟)。时间戳应该是UTC时间,并且精确到秒或毫秒,具体取决于交易所的要求。如果服务器时间与本地时间相差较大,可能导致API请求失败。

endpoint = "/v3/private/account/wallet/balance" # 示例Endpoint。Endpoint定义了API的具体功能和访问路径。在这个例子中,它用于获取账户中USDT的余额。不同的Endpoint对应不同的API功能,例如交易下单、查询订单状态、获取市场行情等。API文档会详细描述每个Endpoint的功能、参数和返回结果。 /v3 表示API的版本,不同的版本可能具有不同的功能和数据结构。

query_params = {"coin": "USDT"} # 定义查询参数。在这个例子中,指定了要查询的币种为USDT。查询参数用于过滤和定制API的返回结果。不同的Endpoint支持不同的查询参数,例如交易对、订单类型、时间范围等。查询参数通常以字典或JSON格式传递给API。

signature = generate_signature(api_secret, timestamp, endpoint, query_params=query_params) # 生成API签名。API签名用于验证请求的真实性和完整性,防止请求被篡改。签名算法通常使用HMAC-SHA256等哈希算法,结合API Secret、时间戳、Endpoint和查询参数等生成。不同的交易所使用不同的签名算法,需要仔细阅读API文档。

print(f"API Signature: {signature}") # 打印生成的API签名。在调试API请求时,可以打印签名来验证签名是否正确。如果签名不正确,API请求将失败。在生产环境中,不应该将签名打印到日志中,以防止API Secret泄露。

3.3. 发送请求示例 (Python)

以下是一个 Python 示例,演示如何使用 REST API 获取账户余额。此示例使用了 Bybit 交易所的 API,但概念可以应用于其他交易所。

确保您已安装 requests 库,可以使用以下命令安装:

pip install requests

接下来,以下是示例代码:

import requests
import time
import hashlib
import hmac
import 

def generate_signature(api_secret, timestamp, endpoint, query_params=None, body=None):
    """
    生成 API 请求的签名。

    Args:
        api_secret (str): 您的 API Secret.
        timestamp (int): 请求的时间戳 (Unix 时间).
        endpoint (str): API 端点,例如 "/v3/private/account/wallet/balance".
        query_params (dict, optional): 查询参数的字典. Defaults to None.
        body (dict, optional): 请求体的字典. Defaults to None.

    Returns:
        str: 生成的签名.
    """
    sign_string = ""
    if query_params:
        sorted_params = sorted(query_params.items())
        query_string = '&'.join([f'{k}={v}' for k, v in sorted_params])
        sign_string = endpoint + '?' + query_string
    elif body:
        sign_string = endpoint + .dumps(body, separators=(',', ':'))  # 重要:body必须是JSON格式的字符串,并确保使用separators
    else:
        sign_string = endpoint

    message = str(timestamp) + sign_string
    signature = hmac.new(api_secret.encode('utf-8'), message.encode('utf-8'), hashlib.sha256).hexdigest()
    return signature

api_key = "YOUR_API_KEY"  # 替换成你的 API Key
api_secret = "YOUR_API_SECRET"  # 替换成你的 API Secret
endpoint = "/v3/private/account/wallet/balance"
base_url = "https://api.bybit.com"  # 或使用你所需的测试网地址 (如 https://api-testnet.bybit.com)
url = base_url + endpoint
timestamp = int(time.time() * 1000)  # Bybit 需要毫秒级时间戳
query_params = {"coin": "USDT"}

signature = generate_signature(api_secret, timestamp, endpoint, query_params)

headers = {
    "Content-Type": "application/",  # 明确指定 JSON 内容类型
    "X-BAPI-API-KEY": api_key,
    "X-BAPI-TIMESTAMP": str(timestamp),
    "X-BAPI-SIGN": signature
}

response = requests.get(url, headers=headers, params=query_params)

print(response.())  # 使用 .() 方法将响应解析为 JSON 格式

代码说明:

  • generate_signature 函数:此函数使用 API Secret、时间戳、端点和任何查询参数或请求体来生成请求签名。签名用于验证请求的真实性。注意这里增加了对 `body` 的支持,并且强调 body 必须是符合JSON格式的字符串。 同时增加了separators,确保生成的签名与服务器端一致。
  • api_key api_secret :将 YOUR_API_KEY YOUR_API_SECRET 替换为您在 Bybit 交易所获得的实际 API 密钥和密钥。
  • endpoint :指定要调用的 API 端点。在此示例中,我们使用 /v3/private/account/wallet/balance 获取账户余额。
  • base_url :指定 API 的基本 URL。对于生产环境,使用 https://api.bybit.com 。对于测试环境,使用 https://api-testnet.bybit.com
  • timestamp : Bybit API V3 需要毫秒级的时间戳。原来的例子中使用秒级时间戳,修改成了毫秒级。
  • headers :HTTP 头部包含 API 密钥、时间戳和签名。 Content-Type 被明确设置为 application/ .
  • response :使用 requests.get() 方法发送 GET 请求。传递 URL、头部和查询参数。使用 response.() 将响应解析为 JSON 格式,并打印出来。

重要提示:

  • 始终保护您的 API 密钥和密钥。不要将它们存储在代码中或与他人分享。
  • Bybit API 使用频率限制。请查阅 Bybit API 文档以了解详细信息。
  • 仔细阅读 Bybit API 文档,以确保您正确理解每个端点的要求和响应格式。
  • 注意处理异常情况,比如网络错误或者 API 返回错误。增加适当的错误处理机制。

此示例提供了一个基本框架,您可以根据自己的需要进行修改和扩展。 例如,您可以添加错误处理、参数验证和日志记录。

4. 使用 WebSocket API

4.1. 建立 WebSocket 连接

Bybit WebSocket API 使用 WSS (WebSocket Secure) 协议,确保数据传输的安全性。你需要选择并使用一个合适的 WebSocket 客户端库来建立连接,例如 Python 的 websocket-client 或 JavaScript 的 ws 库。WSS 协议通过 TLS/SSL 加密 WebSocket 连接,防止中间人攻击,保障数据完整性和机密性。

以下是一个 Python 示例,演示如何使用 websocket-client 库建立 WebSocket 连接,并订阅市场数据:

import websocket import

def on_message(ws, message): """ 收到服务器消息时的回调函数。 message 参数包含接收到的数据,通常为 JSON 格式的字符串。需要进行解析才能使用。 """ print(f"Received: {message}")

def on_error(ws, error): """ 发生错误时的回调函数。 error 参数包含错误信息,例如连接错误、超时等。 """ print(f"Error: {error}")

def on_close(ws, close_status_code, close_msg): """ 连接关闭时的回调函数。 close_status_code 参数包含关闭状态码,例如 1000 表示正常关闭。 close_msg 参数包含关闭原因的描述信息。 """ print("Connection closed")

def on_open(ws): """ 连接建立成功时的回调函数。 在这个函数中,可以执行订阅操作,发送订阅消息到服务器。 """ print("Connection opened") # 订阅行情数据 (例如 BTCUSDT 的 trade 数据) # 通过构造包含 "op": "subscribe" 和 "args" 的 JSON 消息来订阅数据。 # "args" 数组包含要订阅的主题,例如 "trade.BTCUSDT" 表示订阅 BTCUSDT 交易对的交易数据。 # "req_id" 字段是可选的,用于标识订阅请求。 subscribe_message = { "req_id": "123", # 订阅 ID,可以自定义,方便跟踪请求。 "op": "subscribe", "args": ["trade.BTCUSDT"] # 订阅 BTCUSDT 交易对的交易数据。还可以订阅其他主题,如深度信息 "orderbook.1.BTCUSDT"。 } ws.send(.dumps(subscribe_message))

if __name__ == '__main__': ws_url = "wss://stream.bybit.com/v5/public" # 或使用你所需的测试网地址 (wss://stream-testnet.bybit.com/v5/public) # Bybit 提供主网和测试网两个 WebSocket 地址。使用测试网可以进行开发和测试,避免影响真实交易。

ws = websocket.WebSocketApp(ws_url,
                                     on_open=on_open,
                                     on_message=on_message,
                                     on_error=on_error,
                                     on_close=on_close)

ws.run_forever()

4.2. 订阅和取消订阅频道

为了有效地接收所需的特定数据流,你需要订阅相应的频道。Bybit WebSocket API 提供了一系列丰富的频道,涵盖了市场数据、账户信息等多个方面。通过订阅,你的应用程序可以实时获取相关数据,从而做出快速响应和决策。以下列出一些常用的频道:

  • trade. : 提供特定交易对( )的实时成交数据。每一笔成功撮合的交易都会通过此频道推送,包含成交价格、成交数量、交易方向等信息。例如, trade.BTCUSDT 将推送 BTCUSDT 交易对的实时成交数据。
  • orderbook. . : 提供特定交易对( )的实时深度数据。 参数决定了订单簿的深度,即显示的买卖盘档位数量。 例如, orderbook.50.BTCUSDT 将推送 BTCUSDT 交易对的 50 档买卖盘数据。 订阅此频道可以获取当前市场买卖力量的分布情况。
  • kline. . : 提供特定交易对( )的 K 线数据。 参数定义了 K 线的周期,例如 1m (1 分钟),5m (5 分钟),1h (1 小时),1d (1 天) 等。例如, kline.1m.BTCUSDT 将推送 BTCUSDT 交易对的 1 分钟 K 线数据,包含开盘价、最高价、最低价、收盘价和成交量等信息,是技术分析的重要数据来源。
  • position : 提供账户持仓信息 (需要认证)。 订阅此频道需要进行身份验证,因为涉及用户的敏感账户数据。 推送的信息包括持仓数量、平均持仓成本、盈亏等。
  • order : 提供订单更新信息 (需要认证)。 订阅此频道同样需要进行身份验证。 推送的信息包括订单状态的变更,例如订单被创建、部分成交、完全成交、取消等。

要订阅频道,你需要构造一个 JSON 格式的订阅消息,并通过 WebSocket 连接发送给 Bybit 服务器。 订阅消息的核心字段包括 req_id , op args req_id 是请求 ID,用于标识请求,可以是任意字符串。 op 字段必须设置为 "subscribe",表示订阅操作。 args 字段是一个字符串数组,包含了要订阅的频道名称。例如:

{ "req_id": "123", "op": "subscribe", "args": ["trade.BTCUSDT", "orderbook.50.BTCUSDT"] }

上述 JSON 消息表示订阅 BTCUSDT 交易对的实时成交数据和 50 档深度数据。 请注意,一次订阅消息可以订阅多个频道,只需将多个频道名称添加到 args 数组中即可。 合理地组织订阅频道可以减少网络流量和服务器负载。 服务器会根据你的订阅请求,持续推送相关数据。 为了保证连接的稳定性和数据的完整性,建议实现心跳机制,定期发送 ping 消息,防止连接断开。

当不再需要接收某个频道的数据时,你可以取消订阅该频道。 取消订阅操作与订阅操作类似,你需要构造一个 JSON 格式的取消订阅消息,并通过 WebSocket 连接发送给 Bybit 服务器。取消订阅消息的结构与订阅消息基本相同,唯一的区别是 op 字段必须设置为 "unsubscribe"。 例如:

{ "req_id": "123", "op": "unsubscribe", "args": ["trade.BTCUSDT", "orderbook.50.BTCUSDT"] }

上述 JSON 消息表示取消订阅 BTCUSDT 交易对的实时成交数据和 50 档深度数据。 与订阅操作类似,一次取消订阅消息可以取消订阅多个频道。 成功发送取消订阅消息后,服务器将停止推送相应频道的数据。 及时取消不再需要的频道可以有效减少网络流量和服务器负载,提高应用程序的运行效率。

4.3. 使用 WebSocket API 进行身份验证 (Private 频道)

为了能够订阅私有频道,例如 position (仓位信息)或 order (订单信息),你需要先通过身份验证。私有频道的数据只对已授权的用户开放,未经身份验证无法访问。

身份验证过程包含以下关键步骤:

  1. 生成数字签名: 你需要使用你的 API Secret (API 密钥的秘密部分) 对包含 op=auth 以及当前时间戳的字符串进行 HMAC-SHA256 哈希计算。这个签名是你的身份凭证,证明你拥有合法的 API 密钥。 HMAC-SHA256 是一种常用的加密算法,能够确保信息的完整性和真实性。
  2. 构建并发送认证消息: 将你的 API Key (API 密钥的公开部分)、生成的时间戳和计算得到的签名,封装成一个符合特定格式的 JSON 消息。然后,将这个 JSON 消息通过 WebSocket 连接发送到指定的 WebSocket 服务器。服务器会验证这个消息,确认你的身份。

以下是一个 Python 示例代码,展示了如何生成签名并发送认证消息。请注意替换 YOUR_API_KEY YOUR_API_SECRET 为你实际的 API 密钥。


import websocket
import hashlib
import hmac
import time
import 

api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"

timestamp = str(int(time.time()))
sign = hmac.new(
    api_secret.encode("utf-8"),
    f"GET/realtime{timestamp}".encode("utf-8"),
    hashlib.sha256
).hexdigest()

auth_message = {
    "op": "auth",
    "args": [api_key, timestamp, sign]
}

def on_open(ws):
    print("Connection opened")
    ws.send(.dumps(auth_message)) # 发送认证消息

def on_message(ws, message):
    print(f"Received: {message}")

ws = websocket.WebSocketApp("wss://stream.bybit.com/v5/private", # 私有频道需要连接到不同的URL
                                on_open=on_open,
                                on_message=on_message)

ws.run_forever()

代码解释:

  • websocket : Python WebSocket 客户端库,用于建立和维护 WebSocket 连接。
  • hashlib hmac : 用于计算 HMAC-SHA256 签名。
  • time.time() : 获取当前时间戳,用于生成签名。时间戳是防止重放攻击的重要手段。
  • .dumps() : 将 Python 字典转换为 JSON 字符串,以便通过 WebSocket 发送。
  • wss://stream.bybit.com/v5/private : Bybit 交易所用于私有频道数据流的 WebSocket URL。 注意:私有频道需要连接到特定的 URL,与公共频道不同。
  • on_open 函数:当 WebSocket 连接建立成功时调用,用于发送认证消息。
  • on_message 函数:当接收到服务器消息时调用,用于处理接收到的数据。

在成功完成身份验证之后,你就可以订阅你需要的私有频道了。服务器会根据你的权限,推送相应的数据到你的 WebSocket 连接。

The End

发布于:2025-03-08,除非注明,否则均为链探索原创文章,转载请注明出处。