BitMEX 是领先的加密货币衍生品交易所,专注于期货和永续合约的杠杆交易。TsgcWSAPI_Bitmex 组件为 Delphi 开发者同时提供 WebSocket 和 REST API 访问,通过单一组件即可实现实时市场数据流、订单执行、仓位管理及全面的账户操作。
目录
概述
与许多仅支持 WebSocket 的交易所组件不同,TsgcWSAPI_Bitmex 组件提供双接口方案。WebSocket API 通过基于主题的订阅提供交易、订单簿更新、报价和账户数据的实时流。REST API(通过 REST_API 属性访问)提供用于下单、管理仓位和查询市场数据的同步请求-响应方法。这种组合非常适合构建同时需要实时数据流和精确订单执行的完整交易应用程序。
快速入门
创建 TsgcWebSocketClient 和 TsgcWSAPI_Bitmex 组件,将它们关联并配置凭据。WebSocket 连接通过客户端激活,REST API 则通过 REST_API 属性访问。
oClient := TsgcWebSocketClient.Create(nil);
oBitmex := TsgcWSAPI_Bitmex.Create(nil);
oBitmex.Client := oClient;
oBitmex.Bitmex.ApiKey := 'your_api_key';
oBitmex.Bitmex.ApiSecret := 'your_api_secret';
oClient.Active := True;
注意:公共 WebSocket 订阅和公共 REST 端点不需要 API 凭据。仅私有主题(execution、margin、order、position)以及交易/仓位 REST 方法需要身份验证。
WebSocket API
BitMEX WebSocket API 使用基于主题的订阅模型。您订阅一个主题(可选择按标的过滤)并接收持续的更新流。该组件提供三个核心 WebSocket 方法。
| 方法 | 描述 |
|---|---|
Subscribe |
订阅主题数据流,可选择按标的代码过滤。 |
Unsubscribe |
取消订阅之前已订阅的主题数据流。 |
Authenticate |
对 WebSocket 会话进行身份验证以访问私有主题。 |
可用主题
主题定义了您接收的数据类型。您可以同时订阅多个主题。订阅格式为 topic:symbol,其中 symbol 过滤器为可选项。
| 主题 | 需要认证 | 描述 |
|---|---|---|
trade |
否 | 交易所上的实时交易执行。 |
instrument |
否 | 标的数据,包括资金费率和结算信息。 |
orderBookL2 |
否 | 具有增量更新的完整二级订单簿。 |
quote |
否 | 最优买卖报价(盘口最优价)。 |
execution |
是 | 您账户的交易执行和成交记录。 |
margin |
是 | 账户保证金余额和可用余额更新。 |
order |
是 | 您的未成交订单和订单状态更新。 |
position |
是 | 您的未平仓仓位和未实现盈亏更新。 |
WebSocket 订阅示例
// Subscribe to XBTUSD trades
oBitmex.Subscribe('trade:XBTUSD');
// Subscribe to the Level 2 order book
oBitmex.Subscribe('orderBookL2:XBTUSD');
// Subscribe to best bid/ask quotes
oBitmex.Subscribe('quote:XBTUSD');
// Authenticate for private topics
oBitmex.Authenticate;
// Subscribe to your order updates (requires auth)
oBitmex.Subscribe('order');
// Subscribe to your position updates (requires auth)
oBitmex.Subscribe('position');
// Unsubscribe from trades
oBitmex.Unsubscribe('trade:XBTUSD');
REST API:市场数据
REST API 通过组件的 REST_API 属性访问。市场数据方法返回 JSON 字符串,您可以在应用程序中解析。这些是同步调用,会立即返回所请求的数据。
| 方法 | 描述 |
|---|---|
GetInstruments |
检索交易所上所有可用标的的列表。 |
GetInstrumentsActive |
仅检索活跃交易的标的。 |
GetOrderBook |
检索某标的的当前订单簿快照。 |
GetQuotes |
检索最新报价(买/卖)数据。 |
GetTrades |
检索最新公开交易数据。 |
GetExecutions |
检索您账户的原始执行数据。 |
GetExecutionsTradeHistory |
检索您账户的交易执行历史。 |
// Get the order book for XBTUSD
ShowMessage(oBitmex.REST_API.GetOrderBook('XBTUSD'));
// Get all active instruments
ShowMessage(oBitmex.REST_API.GetInstrumentsActive);
// Get recent trades
ShowMessage(oBitmex.REST_API.GetTrades('XBTUSD'));
// Get recent quotes
ShowMessage(oBitmex.REST_API.GetQuotes('XBTUSD'));
REST API:交易
交易方法允许您下单、修改和撤销订单。REST API 支持多种订单类型,包括市价单、限价单、止损单和止损限价单。所有交易方法均需要身份验证。
| 方法 | 描述 |
|---|---|
PlaceOrder |
以完整参数控制下新订单。 |
PlaceMarketOrder |
下市价单,以最优价格立即执行。 |
PlaceLimitOrder |
在指定价格下限价单。 |
PlaceStopOrder |
下止损(市价)单,在止损价格触发。 |
PlaceStopLimitOrder |
下带有触发价格和限价的止损限价单。 |
AmendOrder |
修改现有订单的价格、数量或其他参数。 |
CancelOrder |
通过标识符撤销特定订单。 |
CancelAllOrders |
一次性撤销所有未成交订单。 |
CancelAllOrdersAfter |
设置"死亡开关",在超时后撤销所有订单。 |
GetOrders |
检索所有订单,可选择按状态过滤。 |
下单示例
// Place a limit order: Buy 100 contracts of XBTUSD at $30,000
ShowMessage(oBitmex.REST_API.PlaceLimitOrder(bmsBuy, 'XBTUSD', 100, 30000));
// Place a market order: Sell 50 contracts of XBTUSD
ShowMessage(oBitmex.REST_API.PlaceMarketOrder(bmsSell, 'XBTUSD', 50));
// Place a stop order: triggers when price reaches $28,000
ShowMessage(oBitmex.REST_API.PlaceStopOrder(bmsSell, 'XBTUSD', 100, 28000));
// Place a stop-limit order: triggers at $28,000, limit price $27,500
ShowMessage(oBitmex.REST_API.PlaceStopLimitOrder(bmsSell, 'XBTUSD', 100, 28000, 27500));
// Cancel a specific order
ShowMessage(oBitmex.REST_API.CancelOrder('order-id-here'));
// Cancel all open orders
ShowMessage(oBitmex.REST_API.CancelAllOrders);
注意:CancelAllOrdersAfter 方法充当"死亡开关"。若未在指定超时内续期,将撤销所有订单。这是一种安全机制,可防止应用程序失去连接时出现失控订单。
REST API:仓位
仓位管理方法允许您查询、关闭和配置未平仓仓位,包括杠杆和保证金设置。
| 方法 | 描述 |
|---|---|
GetPosition |
检索某标的的当前仓位。 |
ClosePosition |
通过下平仓市价单关闭未平仓仓位。 |
SetPositionIsolate |
切换仓位的全仓和逐仓保证金模式。 |
SetPositionLeverage |
设置仓位的杠杆倍数。 |
SetPositionRiskLimit |
设置仓位的风险限额。 |
SetPositionTransferMargin |
向逐仓仓位转入或转出保证金。 |
仓位管理示例
// Get current position for XBTUSD
ShowMessage(oBitmex.REST_API.GetPosition('XBTUSD'));
// Set leverage to 10x
ShowMessage(oBitmex.REST_API.SetPositionLeverage('XBTUSD', 10));
// Switch to isolated margin mode
ShowMessage(oBitmex.REST_API.SetPositionIsolate('XBTUSD', True));
// Close the position at market price
ShowMessage(oBitmex.REST_API.ClosePosition('XBTUSD'));
代码示例
以下示例演示了结合 WebSocket 订阅和 REST API 调用的完整工作流:连接、订阅实时交易、查询订单簿并下限价单。
oClient := TsgcWebSocketClient.Create(nil);
oBitmex := TsgcWSAPI_Bitmex.Create(nil);
oBitmex.Client := oClient;
oBitmex.Bitmex.ApiKey := 'your_api_key';
oBitmex.Bitmex.ApiSecret := 'your_api_secret';
oClient.Active := True;
// Subscribe to trades
oBitmex.Subscribe('trade:XBTUSD');
// REST: Get order book
ShowMessage(oBitmex.REST_API.GetOrderBook('XBTUSD'));
// REST: Place a limit order
ShowMessage(oBitmex.REST_API.PlaceLimitOrder(bmsBuy, 'XBTUSD', 100, 30000));
配置与注意事项
API 凭据
从 BitMEX 账户设置中生成 API 密钥和密钥。您可以创建具有特定权限(order、withdraw 等)的密钥。对于交易机器人,仅创建所需权限的密钥,除非绝对必要否则避免启用提现权限。
测试网支持
BitMEX 在 testnet.bitmex.com 提供测试网环境用于开发和测试。配置组件使用测试网端点,在上线前使用模拟资金测试您的集成。Bitmex 属性组包含在生产和测试网环境之间切换的设置。
订单方向枚举
交易方法使用 bmsBuy 和 bmsSell 枚举值来指定订单方向,这些是 BitMEX 组件特有的。
WebSocket 与 REST 的使用场景
对于低延迟至关重要的实时数据流场景(实时价格展示、订单簿可视化、执行监控),使用 WebSocket 订阅。对于按需操作(如下单、查询仓位和获取历史数据),使用 REST API。两种接口相互补充,可同时使用。
速率限制
BitMEX 对 REST API 调用执行速率限制。限制因端点而异,但大多数交易端点通常为每分钟 60 次请求,订单修改和撤销为每分钟 30 次请求。监控响应中的速率限制头部以避免被临时封锁。WebSocket 订阅不受 REST 速率限制约束。
标的代码
BitMEX 使用自己的标的代码格式。比特币永续合约代码为 XBTUSD,而期货合约包含到期日后缀(例如 XBTM25)。使用 GetInstrumentsActive 查询所有当前可交易的标的及其代码。
CancelAllOrdersAfter 方法与定期计时器结合使用作为安全保障。若应用程序崩溃或失去连接,所有订单将在指定超时后自动撤销,保护您免受意外市场波动的影响。
