OKX WebSocket 交易 API 与 Delphi 集成
TsgcWSAPI_OKX 组件通过统一的 WebSocket 接口为 OKX 交易所提供全面的 Delphi 访问支持。它支持公共市场数据流、私有账户频道以及直接交易操作(包括市价单和限价单),所有功能均通过单个组件实现。本指南详细介绍了每个可用方法和配置属性,并提供可运行的代码示例,帮助您在 Delphi 中开始 OKX 交易。
目录
WebSocket 公共频道
公共频道无需身份验证即可向所有连接的客户端推送市场数据。这些频道涵盖合约信息、行情、订单簿、成交、K 线、资金费率等内容。每个订阅方法都有对应的取消订阅方法。
市场数据频道
| 方法 |
描述 |
SubscribeInstruments |
订阅合约更新(新上市、下市、状态变更)。 |
SubscribeTicker |
订阅指定合约的实时行情数据。 |
SubscribeOpenInterest |
订阅期货和永续合约的持仓量更新。 |
SubscribeCandlestick |
订阅指定时间间隔的 K 线数据。 |
SubscribeTrades |
订阅指定合约的实时成交数据。 |
SubscribeOrderBook |
订阅可配置深度的订单簿更新。 |
价格与指数频道
| 方法 |
描述 |
SubscribeEstimatedPrices |
订阅期权和期货的预估交割/行权价格。 |
SubscribeMarkPrice |
订阅用于保证金和盈亏计算的标记价格更新。 |
SubscribeMarkPriceCandlestick |
订阅基于标记价格的 K 线数据。 |
SubscribePriceLimit |
订阅合约的涨跌停价格(价格区间)更新。 |
SubscribeIndexCandlestick |
订阅基于指数价格的 K 线数据。 |
SubscribeIndexTicker |
订阅指定指数的行情更新。 |
SubscribeFundingRate |
订阅永续合约的资金费率更新。 |
期权与系统频道
| 方法 |
描述 |
SubscribeOptionSummary |
订阅期权摘要数据(希腊值、波动率、持仓量)。 |
SubscribeStatus |
订阅系统状态更新(维护、中断)。 |
SubscribePublicStructureBlockTrades |
订阅公共结构化大宗交易数据。 |
SubscribeBlockTickers |
订阅大宗交易行情更新。 |
注意:上述每个 Subscribe 方法都有对应的
UnSubscribe 方法(如
UnSubscribeTicker),用于停止接收该频道的更新。
WebSocket 私有频道
私有频道需要身份验证,可实时推送账户状态、持仓、订单和算法交易活动的更新。订阅这些频道前,请将 OKX.IsPrivate := True 并提供有效的 API 凭证。
账户与持仓频道
| 方法 |
描述 |
SubscribeAccount |
实时订阅账户余额和权益更新。 |
SubscribePositions |
订阅持仓更新(开仓、平仓、数量变化)。 |
SubscribeBalanceAndPosition |
通过单一数据流订阅余额和持仓的综合更新。 |
SubscribePositionRisk |
订阅持仓风险预警更新(接近强平)。 |
SubscribeAccountGreeks |
订阅账户级别的期权持仓希腊值更新。 |
订单与算法频道
| 方法 |
描述 |
SubscribeOrders |
订阅订单状态更新(已下单、已成交、已撤销、部分成交)。 |
SubscribeOrdersAlgo |
订阅算法订单更新(触发、止盈/止损、追踪止损)。 |
SubscribeAdvanceAlgo |
订阅高级算法订单更新(冰山单、TWAP)。 |
询价与大宗交易频道
| 方法 |
描述 |
SubscribeRfqs |
订阅大宗交易的询价(RFQ)更新。 |
SubscribeQuotes |
订阅响应询价的报价更新。 |
SubscribePrivateStructureBlockTrades |
订阅私有结构化大宗交易更新。 |
网格交易频道
| 方法 |
描述 |
SubscribeSpotGridAlgoOrders |
订阅现货网格算法订单更新。 |
SubscribeContactGridAlgoOrders |
订阅合约网格算法订单更新。 |
SubscribeGridPositions |
订阅网格交易持仓更新。 |
SubscribeGridSubOrders |
订阅网格策略内单个子订单的更新。 |
WebSocket 交易操作
OKX 支持直接通过 WebSocket 连接下单和管理订单,与 REST API 调用相比延迟更低。这些方法需要身份验证。
| 方法 |
描述 |
PlaceOrder |
以完全控制所有订单参数的方式下达新订单。 |
PlaceMarketOrder |
以最优可用价格立即执行的市价单。 |
PlaceLimitOrder |
以指定价格下限价单,仅在市场达到该价格时执行。 |
CancelOrder |
通过订单 ID 撤销现有订单。 |
AmendOrder |
修改现有订单(无需撤销并重新下单即可修改价格或数量)。 |
注意:基于 WebSocket 的交易延迟明显低于基于 REST 的下单方式。OKX 优先处理 WebSocket 订单,是延迟敏感型策略的首选方法。
代码示例
以下示例演示如何创建和配置 TsgcWSAPI_OKX 组件、通过 API 进行身份验证、订阅行情数据、监控订单,以及直接通过 WebSocket 连接下市价单和限价单。
var
oClient: TsgcWebSocketClient;
oOKX: TsgcWSAPI_OKX;
begin
// Create the WebSocket client
oClient := TsgcWebSocketClient.Create(nil);
oOKX := TsgcWSAPI_OKX.Create(nil);
oOKX.Client := oClient;
// Configure API credentials
oOKX.OKX.ApiKey := 'your_api_key';
oOKX.OKX.ApiSecret := 'your_api_secret';
oOKX.OKX.Passphrase := 'your_passphrase';
oOKX.OKX.IsPrivate := True;
// Connect to OKX
oClient.Active := True;
// Subscribe to BTC-USDT ticker
oOKX.SubscribeTicker('BTC-USDT');
// Subscribe to order updates for spot trading
oOKX.SubscribeOrders(okxitSpot);
// Place a market buy order
oOKX.PlaceMarketOrder(okxosBuy, 'BTC-USDT', 0.001);
// Place a limit buy order
oOKX.PlaceLimitOrder(okxosBuy, 'BTC-USDT', 0.001, 30000);
end;
处理 WebSocket 事件
分配一个事件处理程序来处理传入的 WebSocket 消息。该事件为每次更新提供频道名称和 JSON 有效载荷。
procedure TForm1.OnOKXEvent(Sender: TObject;
const aChannel, aData: string);
begin
// aChannel identifies the subscription (e.g., 'tickers', 'orders')
// aData contains the JSON payload
Memo1.Lines.Add(aChannel + ': ' + aData);
end;
使用模拟交易模式
OKX 提供用于测试的模拟交易环境。连接前将 OKX.IsDemo := True 即可启用。模拟模式连接到拥有模拟余额的独立端点,让您无需冒真实资金风险即可测试交易逻辑。
// Enable demo trading mode
oOKX.OKX.IsDemo := True;
oOKX.OKX.IsPrivate := True;
oClient.Active := True;
配置与注意事项
配置属性
所有配置均通过组件的 OKX 属性访问。
| 属性 |
类型 |
描述 |
OKX.ApiKey |
String |
您的 OKX API 密钥。请从 OKX API 管理页面生成。 |
OKX.ApiSecret |
String |
您的 OKX API 密钥。请妥善保管,切勿在客户端代码中暴露。 |
OKX.Passphrase |
String |
创建 API 密钥时设置的密码短语。所有已验证请求均需提供。 |
OKX.IsDemo |
Boolean |
设置为 True 时,连接到使用模拟资金的 OKX 模拟交易环境。默认为 False。 |
OKX.IsPrivate |
Boolean |
设置为 True 时,启用 WebSocket 连接上的身份验证。私有频道和交易操作需要此设置。默认为 False。 |
重要注意事项
安全性:切勿将 API 密钥、密钥或密码短语直接硬编码到生产代码中。请使用安全的配置文件或环境变量来存储凭证。
- 如需私有频道或交易操作,请在连接前将
OKX.IsPrivate := True。公共频道无需身份验证即可使用。
- 上线前请使用
OKX.IsDemo := True 在 OKX 模拟环境中进行测试。模拟模式使用专门为模拟平台生成的独立 API 凭证。
SubscribeOrders 方法接受合约类型参数(如 okxitSpot、okxitFutures、okxitSwap、okxitOption),用于按交易类型筛选订单更新。
PlaceMarketOrder 和 PlaceLimitOrder 便捷方法接受订单方向参数(如 okxosBuy、okxosSell)、合约 ID、数量以及(限价单的)价格。
AmendOrder 方法允许在不撤销并重新下单的情况下修改有效订单的价格或数量,从而降低延迟并避免丢失队列位置。
- OKX 对 WebSocket 消息强制执行速率限制。请参阅 OKX 官方文档了解每秒订阅和交易请求的当前限制。
- WebSocket 订阅在连接生命周期内持续有效。如果连接断开,重新连接后需要重新订阅。