BitMEX 平台 API 支持详解
BitMEX 作为领先的加密货币衍生品交易所,为用户提供了强大的 API 接口,允许开发者以编程方式访问平台数据和执行交易。理解 BitMEX API 的功能和使用方式,对于构建自动化交易策略、数据分析工具和集成 BitMEX 功能到现有系统至关重要。
API 概览
BitMEX API 提供两种主要的访问方式:REST API 和 WebSocket API,每种方式都针对不同的应用场景进行了优化,以满足不同的数据访问和交易需求。
- REST API: 适用于执行诸如检索历史交易数据、查询账户信息、提交和管理订单等操作。它基于传统的请求-响应模式,客户端发起HTTP请求,服务器处理请求并返回JSON格式的响应数据。REST API 的优势在于其简单性和易用性,易于集成到各种编程语言和平台中,适合对数据实时性要求不高,但需要进行复杂交易操作的场景。使用REST API,开发者可以创建、读取、更新和删除(CRUD)账户、订单和仓位等资源。
- WebSocket API: 专门设计用于实时数据流的传输,比如实时市场数据(例如,最新成交价、订单簿深度、交易量)和账户状态更新。它采用双向通信模式,建立持久的连接,服务器可以主动将数据推送到客户端,而无需客户端频繁发起请求。这种模式显著降低了延迟,并提高了数据更新的效率,特别适合需要高速、低延迟的数据更新的应用,例如高频交易策略、实时风险管理系统和订单簿可视化工具。WebSocket API 通常使用JSON格式进行数据传输,并支持多种消息类型,以满足不同的数据订阅需求。
选择 REST API 还是 WebSocket API 取决于您的具体应用场景和性能需求。如果您需要实时的市场数据或账户更新,并希望尽可能降低延迟,那么 WebSocket API 是更合适的选择。反之,如果您只需要偶尔获取历史数据或执行交易操作,并且对实时性要求不高,那么 REST API 则更为方便快捷,并且易于集成。某些高级交易策略可能会同时使用这两种 API,利用 REST API 进行订单管理,并使用 WebSocket API 获取实时市场数据,从而实现最佳的交易性能。
REST API 接口
BitMEX REST API 接口提供了全面的功能,方便开发者进行程序化交易和数据分析。这些接口可以分为以下几个主要类别,每个类别都包含一系列用于执行特定任务的端点:
-
交易接口 (Trading Endpoints):
用于执行交易相关的操作,例如下单、修改订单、取消订单等。这些接口是自动化交易策略的核心,允许用户以编程方式管理其订单。常用的接口包括:
-
/order
:创建新的订单,替换现有的订单(修改订单),或取消单个订单。该接口支持各种订单类型,如市价单、限价单、止损单等,并通过参数控制订单的行为。 -
/order/bulk
:批量创建、替换或取消多个订单。这对于需要快速执行一系列相关订单的策略非常有用,例如同时设置止盈和止损订单。 -
/order/cancelAll
:取消所有未成交的订单。在市场剧烈波动或需要快速平仓时,此接口非常有用。 -
/order/cancelAllAfter
:在指定的时间段过后自动取消所有未成交的订单。这允许用户设置一个时间窗口,如果订单在指定时间内没有成交,则自动取消,避免长时间挂单带来的风险。
-
-
市场数据接口 (Market Data Endpoints):
用于获取实时的和历史的市场数据,例如最新的成交价格、订单簿深度、交易量等。这些接口对于构建交易策略、进行风险管理和执行市场分析至关重要。常用的接口包括:
-
/trade
:获取最近的成交记录。用户可以指定返回的成交记录数量和起始时间,以便跟踪市场动态。 -
/trade/bucketed
:获取聚合的成交记录,例如 OHLC(开盘价、最高价、最低价、收盘价)数据,也就是通常所说的 K 线数据。用户可以指定不同的时间周期(例如,1 分钟、5 分钟、1 小时、1 天)和聚合函数,以便进行技术分析和趋势识别。 -
/orderBook/L2
:获取 Level 2 订单簿的详细信息,包括每个价格级别的买单和卖单的数量。这对于高频交易者和套利者非常重要,因为他们需要快速访问订单簿的深度信息。 -
/instrument
:获取关于特定合约的详细信息,例如合约代码、保证金要求、结算时间等。 -
/instrument/active
:获取当前活跃合约的列表。这对于快速了解当前市场上可交易的合约非常有用。 -
/instrument/indices
:获取各种指数的价格信息,例如 BitMEX 上的各种指数成分。这些指数可以作为市场参考,也可以用于构建指数相关的交易策略。
-
-
账户接口 (Account Endpoints):
用于获取用户的账户信息,例如账户余额、可用保证金、持仓情况等。这些接口对于监控账户风险、管理资金和评估交易表现至关重要。常用的接口包括:
-
/user/wallet
:获取用户的钱包信息,包括可用余额、已用余额等。 -
/user/margin
:获取用户的保证金信息,包括风险等级、维持保证金等。这些信息对于了解账户的风险状况非常重要。 -
/position
:获取用户的持仓信息,包括持仓数量、平均持仓成本、盈亏情况等。这对于跟踪交易结果和评估投资组合表现至关重要。 -
/user/affiliateStatus
:获取用户的联盟状态信息,包括邀请码、返佣比例等(如果用户是联盟会员)。
-
-
辅助接口 (Utility Endpoints):
用于执行一些辅助性的操作,例如获取服务器状态、测试连接、管理 API 密钥等。常用的接口包括:
-
/apiKey
:创建、修改和删除 API 密钥。API 密钥用于验证用户的身份,并授权用户访问 API 接口。 -
/schema
:获取 API 的 schema 定义。这对于了解 API 的结构和参数非常有用,可以帮助开发者更好地使用 API。 -
/announcement
:获取 BitMEX 发布的公告信息,例如维护通知、新功能发布等。 -
/chat
:发送聊天消息。此接口仅在 BitMEX 测试网络上可用,用于测试聊天功能。
-
所有 REST API 请求都必须通过安全的 HTTPS 协议发送,以确保数据的加密和安全性。 在调用任何API之前,请务必阅读BitMEX的官方API文档,了解每个接口的详细参数和使用方法。 同时,需要注意API的使用频率限制,避免因超出限制而被暂时禁止访问。
WebSocket API 接口
BitMEX WebSocket API 提供低延迟的实时市场数据和账户更新,是构建高频交易策略和实时监控系统的关键。客户端需要建立持久的 WebSocket 连接,通过发送 JSON 格式的订阅请求来接收感兴趣的数据流。与 REST API 相比,WebSocket API 减少了轮询开销,显著提高了数据传输效率。
常用的订阅频道包括:
-
trade
:实时成交记录,包括成交价格、数量、成交时间和成交方向(买/卖)。此频道对于跟踪市场微观结构和价格波动至关重要。 -
orderBookL2
:实时 Level 2 订单簿,提供市场深度信息,显示不同价格级别的买单和卖单数量。Level 2 数据对于算法交易和订单簿分析至关重要。可以使用orderBook10
频道获取精简的订单簿快照。 -
instrument
:合约信息更新,包括合约的最新交易价格、最高价、最低价、交易量、资金费率等关键参数。此频道用于监控合约状态和风险。 -
position
:持仓信息更新,包括持仓数量、平均入场价格、未实现盈亏、已实现盈亏、杠杆倍数等。对于风险管理和账户监控至关重要。 -
execution
:成交记录更新,提供用户执行的每笔交易的详细信息,包括成交价格、数量、手续费和订单 ID。此频道用于交易历史记录跟踪和审计。 -
order
:订单状态更新,包括订单的创建、修改、取消和成交等事件。订单状态信息包括订单 ID、订单类型、订单价格、订单数量、订单状态(例如,新建、已取消、已成交)等。 -
margin
:保证金信息更新,提供账户的保证金余额、可用余额、已用保证金、风险限额等。此频道对于监控账户风险和避免爆仓至关重要。 -
wallet
:钱包信息更新,提供账户的钱包余额、存款、提款等信息。此频道用于资金管理和账户审计。
通过订阅这些频道,开发者可以实时获取 BitMEX 平台的各种数据,并根据这些数据进行分析和交易。例如,可以基于
trade
和
orderBookL2
数据构建高频交易策略,利用
position
和
margin
数据进行风险管理,并使用
execution
和
order
数据跟踪交易执行情况。 为了优化性能,可以根据实际需求选择订阅特定的频道和数据字段。 某些频道支持过滤参数,以减少数据流量。 例如,可以只订阅特定合约的
trade
数据。
API 身份验证
为了确保用户资金安全以及平台交易的稳健性,BitMEX API 采用严格的身份验证机制。REST API 通过 API 密钥及其生成的签名来进行身份验证,而 WebSocket API 则利用 API 密钥、过期时间以及相应的签名完成身份验证流程。这种双重验证机制有效防止未经授权的访问和潜在的安全风险。
详细的身份验证步骤如下:
- 获取 API 密钥: 您需要在 BitMEX 官方网站上创建 API 密钥。创建过程中,务必仔细设置与您的交易策略相符的权限,例如仅允许交易操作,或者根据需要启用提现权限。精细化的权限控制是保障账户安全的重要措施。
- 生成签名: 接下来,使用 API 密钥中的 secretKey 对请求的参数进行签名。这些参数通常包括请求路径(例如 `/api/v1/order`)、请求体(例如 JSON 格式的订单信息)以及过期时间(UNIX 时间戳)。签名算法采用 HMAC-SHA256,这是一种安全可靠的哈希算法,能有效防止篡改。签名过程确保了请求的完整性和真实性。
- 在请求中包含身份验证信息: 将 API 密钥和生成的签名添加到 HTTP 请求的 Header 中。这些信息将作为身份凭证,供 BitMEX 服务器验证您的请求是否合法。正确设置 HTTP Header 至关重要,否则会导致身份验证失败。
针对 REST API,需要在 HTTP Header 中添加以下字段:
-
api-key
: 您的 API 密钥。这是您访问 API 的身份标识,务必妥善保管。 -
api-signature
: 使用 secretKey 生成的签名。此签名基于请求参数计算,是验证请求真实性的关键。 -
api-expires
: 过期时间,以 UNIX 时间戳表示。过期时间限制了签名的有效时长,防止重放攻击。建议设置合理的过期时间,平衡安全性和便捷性。
对于 WebSocket API,需要在建立连接时发送一个包含身份验证信息的
authKey
消息。此消息包含 API 密钥、过期时间和签名。服务器将验证这些信息,以确认连接请求的合法性。
authKey
消息的 JSON 格式如下:
{
"op": "authKey",
"args": [API_KEY, EXPIRES, SIGNATURE]
}
其中:
-
API_KEY
: 您的 API 密钥。 -
EXPIRES
: 过期时间 (UNIX 时间戳),必须是未来的时间点。 -
SIGNATURE
: 使用 secretKey 和过期时间等参数生成的 HMAC-SHA256 签名。
错误处理
BitMEX API 接口在交互过程中可能返回各种类型的错误代码,这些错误代码对于开发者理解 API 调用状态和调试应用程序至关重要。开发者应当仔细分析这些错误代码,并根据具体的错误类型采取相应的处理措施,以提升程序的健壮性和用户体验。
常见的错误代码包括:
-
400 Bad Request
:该错误表示客户端发送的请求格式不正确或包含无效参数。常见原因包括缺少必要的请求参数、参数值超出允许范围、或参数类型不匹配。开发者应仔细检查请求体和URL参数,确保符合 API 文档的要求。详细的错误信息通常会包含在响应体中,便于定位具体的问题所在。 -
401 Unauthorized
:当客户端尝试访问需要身份验证的资源时,如果未提供有效的身份验证凭据,或者提供的凭据无效(例如错误的 API 密钥或密码),API 将返回此错误。开发者需要检查 API 密钥是否已正确配置,并且拥有访问所需资源的权限。还需确保请求头中包含了正确的身份验证信息。 -
403 Forbidden
:此错误表明客户端已通过身份验证,但没有足够的权限访问请求的资源。这可能是由于 API 密钥的权限设置不正确,或者用户账户没有被授权执行特定的操作。开发者应检查 API 密钥的权限设置,并确保用户账户具有相应的访问权限。 -
429 Too Many Requests
:为了防止 API 被滥用,BitMEX API 对请求频率进行了限制。当客户端在短时间内发送过多的请求时,API 将返回此错误。开发者应该实施速率限制策略,例如使用指数退避算法来重试请求,或者使用缓存来减少对 API 的请求次数。BitMEX 通常会在响应头中提供有关速率限制的信息,例如剩余的请求次数和重置时间。 -
500 Internal Server Error
:此错误表示服务器在处理请求时遇到了未知的内部错误。这通常是服务器端的问题,客户端无法直接解决。开发者可以尝试稍后重新发送请求,或者联系 BitMEX 技术支持寻求帮助。如果频繁出现此错误,应考虑 API 服务本身可能存在问题。
除了以上常见的错误代码,BitMEX API 还可能返回其他类型的错误代码,开发者应仔细阅读 API 文档,了解所有可能的错误类型及其含义。在开发过程中,应充分考虑各种可能的错误情况,并实现适当的错误处理机制,例如使用 try-except 块捕获异常、记录错误日志、向用户显示友好的错误提示信息等,以保证程序的稳定性和可靠性,并提高用户体验。同时,应当对API返回的错误信息进行分析和记录,这有助于快速定位和解决问题。
Rate Limiting (频率限制)
为保障系统稳定性和公平性,防止API接口被恶意滥用或过度消耗资源,BitMEX交易所对所有API端点实施了严格的频率限制策略。这意味着在特定时间段内,每个用户或IP地址可以发出的请求数量存在上限。不同类型的API接口,例如交易下单、获取行情数据、查询账户信息等,由于其资源消耗和重要性不同,对应的频率限制也会有所差异。开发者务必仔细查阅BitMEX官方API文档,了解每个接口具体的频率限制参数。
当客户端请求超过预设的频率限制时,BitMEX服务器会返回标准HTTP状态码
429 Too Many Requests
错误,表明请求已被服务器拒绝。响应头中通常会包含
Retry-After
字段,指示客户端在多长时间后可以安全地重试请求。开发者应妥善处理此类错误,避免程序崩溃或数据丢失。
开发者应当采取有效措施来控制API请求的发送频率,以避免触发频率限制。常见的策略包括:
- 延迟机制: 在每个API请求之间引入适当的延迟(例如几百毫秒),确保请求频率低于限制。
- 请求队列: 将API请求放入队列中,按照一定的速率逐个发送,有效平滑请求峰值。
- 批量处理: 对于支持批量操作的API接口,将多个操作合并到一个请求中,减少请求总数。
- 缓存机制: 对于不经常变化的数据,使用本地缓存或分布式缓存,减少对API的直接请求。
-
错误处理和重试:
实现完善的错误处理逻辑,当收到
429
错误时,根据Retry-After
字段进行延迟重试,并采用指数退避策略,避免短时间内重复触发频率限制。
通过合理设计和优化API请求策略,开发者可以有效地避免频率限制,确保应用程序的稳定性和可靠性,同时为BitMEX交易所提供更流畅的用户体验。
API 文档
BitMEX 提供了一套全面的 API(应用程序编程接口),允许开发者通过编程方式与交易所进行交互。 官方API文档是开发者理解和有效利用BitMEX API的关键资源。它详细描述了每个可用的API端点、请求方法(如GET、POST、PUT、DELETE)、认证方式、数据格式(通常是JSON)、速率限制以及其他重要信息。
文档中详细列出了每个API接口的功能,例如查询市场数据、下单、查询账户信息、获取历史交易数据等。针对每个接口,文档会明确指出需要传递的参数,包括参数名称、参数类型(例如字符串、整数、布尔值)、参数是否为必填项,以及参数值的有效范围。还详细说明了API的返回值,包括返回数据的结构、数据类型、每个字段的含义,以及示例响应。理解这些信息对于正确构造API请求和解析API响应至关重要。
API文档还会涵盖错误代码及其含义。当API请求失败时,服务器会返回一个错误代码,开发者可以根据错误代码来判断问题所在,并采取相应的措施进行修复。仔细研究错误代码说明有助于快速定位和解决API调用过程中遇到的问题。
开发者应认真研读API文档,透彻理解每个API接口的功能和使用方法,遵循API的使用规范和最佳实践。理解API的速率限制至关重要,它规定了在一定时间内可以发出的请求数量。超出速率限制可能会导致API请求被拒绝。还应关注API的版本更新和弃用通知,及时调整代码以适应新的API版本。 BitMEX API 文档是成功进行程序化交易和集成BitMEX平台的基石。
API 文档的地址为: https://www.bitmex.com/api/explorer/ 。建议开发者在开始使用BitMEX API之前,仔细阅读并理解该文档,以便更好地利用API进行开发和交易。
代码示例
以下是一个使用 Python 语言调用 BitMEX REST API 获取账户余额的示例:
import requests import hashlib import hmac import time import
APIKEY = "YOURAPIKEY" APISECRET = "YOURAPISECRET" BASE_URL = "https://www.bitmex.com"
def generate_signature(secret, verb, path, expires, data): """Generates an API signature.""" data = '' if data is None else .dumps(data) message = verb + path + str(expires) + data signature = hmac.new(secret.encode('utf-8'), message.encode('utf-8'), digestmod=hashlib.sha256).hexdigest() return signature
def getwalletbalance(): """Gets the wallet balance.""" verb = "GET" path = "/api/v1/user/wallet" expires = int(time.time()) + 60 # 1 minute data = None
signature = generate_signature(API_SECRET, verb, path, expires, data)
headers = {
"api-key": API_KEY,
"api-signature": signature,
"api-expires": str(expires)
}
url = BASE_URL + path
response = requests.get(url, headers=headers)
if response.status_code == 200:
print(response.())
else:
print(f"Error: {response.status_code} - {response.text}")
if name == "main": getwalletbalance()
这是一个简单的示例,演示了如何使用 API 密钥和签名进行身份验证,并调用 REST API 获取账户余额。开发者可以根据自己的需求,修改和扩展这个示例,实现更复杂的功能。
BitMEX API 提供了强大的功能,允许开发者以编程方式访问平台数据和执行交易。理解 BitMEX API 的功能和使用方式,对于构建自动化交易策略、数据分析工具和集成 BitMEX 功能到现有系统至关重要。 开发者需要仔细阅读 API 文档,了解 API 的使用方法和注意事项,并进行充分的测试,以保证程序的稳定性和可靠性。