WebSocket 频道分为两类:公开频道和私有频道。
您可以在 OKX 属性中配置以下属性。
当客户端成功连接到 OKX 服务器时,将触发 OnOKXConnect 事件。如果连接时出现任何错误,将触发 OnOKXError 事件并附带错误详情。
OnOKXConnect 事件触发后,您即可开始向 OKX 服务器发送和接收消息。
oClient := TsgcWebSocketClient.Create(nil);
oOKX := TsgcWSAPI_OKX.Create(nil);
oOKX.Client := oClient;
oOKX.OKX.ApiKey := 'alsdjk23kandfnasbdfdkjhsdf';
oOKX.OKX.ApiSecret := 'aldskjfk3jkadknfajndsjfj23j';
oOKX.OKX.Passphrase := 'secret_passphrase';
oClient.Active := True;
procedure OnOKXConnect(Sender: TObject; aMessage, aCode, aRawMessage: string);
begin
DoLog('#OKX Connected');
end;
procedure OnOKXError(Sender: TObject; aCode, aMessage, aRawMessage: string);
begin
DoLog('#error: ' + aMessage);
end;
websocket 数据流提供订单和交易的实时市场数据更新。websocket 数据流有一些公共频道,如 ticker、trades 等。
您可以订阅以下公共频道:
| 方法 | 描述 |
| SubscribeInstruments | 首次订阅后将推送完整的合约列表。此后,当合约状态发生任何变化(如期货交割、期权行权、新合约/交易对上市、交易暂停等)时,将推送相关合约信息。 |
| SubscribeTicker | 检索最新成交价、买价、卖价和 24 小时交易量。数据每 100 毫秒推送一次。 |
| SubscribeOpenInterest | 检索未平仓合约数量。数据每 3 秒推送一次。 |
| SubscribeCandlestick | 检索某个合约的K线数据,推送频率最快为 500ms 推送一次数据。 |
| SubscribeTrades | 获取近期成交数据。每当有成交发生时,数据将被推送。 |
| SubscribeEstimatedPrices |
检索期货合约和期权的预计交割/行权价格。 仅在交割/行权前一小时推送预计交割/行权价格,有价格变动时推送。 |
| SubscribeMarkPrice | 检索标记价格。当标记价格发生变化时,每 200 毫秒推送一次数据;当标记价格未发生变化时,每 10 秒推送一次数据。 |
| SubscribeMarkPriceCandlestick | 检索标记价格的 K 线数据。数据每 500 毫秒推送一次。 |
| SubscribePriceLimit | 获取仪器的最高买入价和最低卖出价。当限价有变化时,数据将每 5 秒推送一次;如果限价无变化,则不推送。 |
| SubscribeOrderBook |
检索订单簿数据。 books 用于 400 档深度,book5 用于 5 档深度,bbo-tbt 用于逐笔 1 档深度,books50-l2-tbt 用于逐笔 50 档深度,books-l2-tbt 用于逐笔 400 档深度。
|
| SubscribeOptionSummary | 检索所有 OPTION 合约的详细定价信息。数据将一次性推送。 |
| SubscribeFundingRate | 检索资金费率。数据将在 30 秒至 90 秒内推送。 |
| SubscribeIndexCandlestick | 获取指数的 K 线数据。每 500 毫秒推送一次数据。 |
| SubscribeIndexTicker | 获取指数行情数据 |
| SubscribeStatus | 获取系统维护状态,并在系统维护状态变化时推送。首次订阅:"推送最新变更数据";每次状态变化时,推送变更内容。 |
| SubscribePublicStructureBlockTrades | 每当发生大宗交易时,数据将被推送。 |
| SubscribeBlockTickers | 检索最近 24 小时内的最新大宗交易量。数据将在交易执行事件触发时推送。此外,还将根据订阅粒度每 5 分钟推送一次。 |
| SubscribeAllTrades | 检索所有交易数据。每当发生交易时,数据将被推送。 |
| SubscribeLiquidationOrders | 获取强制平仓订单。当发生强制平仓订单时,将推送数据。 |
| SubscribeADLWarning | 检索 ADL 预警数据。当自动减仓风险增加时,将推送数据。 |
| SubscribeEconomicCalendar | 检索经济日历事件。当经济事件有更新时,数据将被推送。 |
| SubscribePublicBlockTrades | 获取公开大宗交易数据。每当发生大宗交易时,数据将被推送。 |
| SubscribeOptionTrades | 检索期权交易数据。每当发生期权交易时,数据将被推送。 |
| SubscribeCallAuctionDetails | 获取集合竞价详情。当集合竞价信息更新时,数据将被推送。 |
oClient := TsgcWebSocketClient.Create(nil);
oOKX := TsgcWSAPI_OKX.Create(nil);
oOKX.Client := oClient;
oOKX.OKX.ApiKey := 'alsdjk23kandfnasbdfdkjhsdf';
oOKX.OKX.ApiSecret := 'aldskjfk3jkadknfajndsjfj23j';
oOKX.OKX.Passphrase := 'secret_passphrase';
oClient.Active := True;
procedure OnOKXConnect(Sender: TObject; aMessage, aCode, aRawMessage: string);
begin
oOKX.SubscribeInstruments(okxitFutures);
end;
包括账户频道、订单频道和仓位频道等,需要登录。
您可以订阅以下私有频道:
| 方法 | 描述 |
| SubscribeAccount | 获取账户信息。当下单、撤单、成交等事件触发时,数据将被推送。同时也会按照订阅粒度定期推送。 |
| SubscribePositions | 获取持仓信息。初始快照将根据订阅粒度推送。当下单/撤单等事件触发时,数据将被推送,也会根据订阅粒度定期推送。 |
| SubscribeBalanceAndPosition | 获取账户余额和持仓信息。当发生成交、资金划转等事件时,数据将被推送。 |
| SubscribeOrders | 检索订单信息。首次订阅时不会推送数据;仅在下单/撤单等事件触发时才推送数据。 |
| SubscribeOrdersAlgo | 获取算法订单(包括触发订单、OCO 订单、条件订单)。首次订阅时不推送数据,仅在下单/撤单等事件触发时才推送数据。 |
| SubscribeAdvanceAlgo |
检索高级算法订单(包括冰山订单、TWAP 订单、追踪订单)。首次订阅时推送数据,下单/撤单等事件触发时也会推送数据。 |
| SubscribePositionRisk | 此推送频道仅用作风险警告,不建议作为策略交易的风险判断依据。 在市场波动不剧烈的情况下,有可能发生在推送此消息的同时,持仓已被强制平仓的情况。 |
| SubscribeAccountGreeks | 检索账户希腊值信息。当持仓增减或账户中的现金余额发生变化等事件触发时,数据将被推送;同时也会按照订阅粒度定期推送。 |
| SubscribeRfqs | 检索 Rfq 列表。 |
| SubscribeQuotes |
获取报价。 |
| SubscribePrivateStructureBlockTrades | 检索结构化大宗交易。 |
| SubscribeSpotGridAlgoOrders | 检索现货网格算法订单。首次订阅时会推送数据。当下单/撤单等事件触发时会推送数据。 |
| SubscribeContactGridAlgoOrders | 获取合约网格算法订单。首次订阅时会推送数据,下单/撤单等事件触发时也会推送数据。 |
| SubscribeGridPositions | 获取网格持仓。首次订阅时会推送数据,下单/撤单等事件触发时也会推送数据。 |
| SubscribeGridSubOrders | 获取网格子订单。首次订阅时会推送数据,下单等事件触发时也会推送数据。 |
| SubscribeFills | 检索已成交订单数据。当订单成交时,数据将被推送。 |
| SubscribeDepositInfo | 检索存款信息。当存款状态更新时,数据将被推送。 |
| SubscribeWithdrawalInfo | 检索提款信息。当提款状态更新时,数据将被推送。 |
oClient := TsgcWebSocketClient.Create(nil);
oOKX := TsgcWSAPI_OKX.Create(nil);
oOKX.Client := oClient;
oOKX.OKX.ApiKey := 'alsdjk23kandfnasbdfdkjhsdf';
oOKX.OKX.ApiSecret := 'aldskjfk3jkadknfajndsjfj23j';
oOKX.OKX.Passphrase := 'secret_passphrase';
oClient.Active := True;
procedure OnOKXConnect(Sender: TObject; aMessage, aCode, aRawMessage: string);
begin
oOKX.SubscribeOrders(okxitFutures, 'BTC-USD', 'BTC-USD-200329');
end;
WebSocket 交易需要身份验证。
只有在资金充足的情况下才能下单。以下是请求参数表:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| id | String | 是 | 消息的唯一标识符 由客户端提供。它将在响应消息中返回,用于标识对应的请求。 由大小写字母数字组合、纯数字或纯字母组成,最长 32 个字符。 |
| > instId | String | 是 | 工具 ID,例如 BTC-USD-190927-5000-C |
| > tdMode | String | 是 | 交易模式 保证金模式 isolated cross非保证金模式 cash |
| > ccy | String | 否 | 保证金货币 仅适用于 cross MARGIN 中的 Single-currency margin 订单。 |
| > clOrdId | String | 否 | 客户端提供的订单 ID 由区分大小写的字母数字组合、纯数字或纯字母组成,最多 32 个字符。 |
| > 标签 | String | 否 | 订单标签 由区分大小写的字母数字字符组合而成,全数字或全字母,长度不超过 16 个字符。 |
| > 侧 | String | 是 | 订单方向, buy sell |
| > posSide | String | 可选 | 持仓方向 在 net 模式下默认为 net 在 long/short 模式下为必填项,只能为 long 或 short。仅适用于 FUTURES/SWAP。 |
| > ordType | String | 是 | 订单类型market:市价单limit:限价单post_only:只挂单fok:全部成交或取消订单ioc:立即成交或取消订单optimal_limit_ioc :带立即成交或取消的市价单
|
| > sz | String | 是 | 买入或卖出的数量。 |
| > px | String | 可选 | 价格 仅适用于 limit、post_only、fok、ioc 订单。 |
| > reduceOnly | Boolean | 否 | 是否仅减少仓位, true false,默认为 false。仅适用于 MARGIN 订单,以及处于 net 模式下的 FUTURES/SWAP 订单仅适用于 Single-currency margin 和 Multi-currency margin |
| > tgtCcy | String | 否 | 数量类型base_ccy:基础货币,quote_ccy:计价货币仅适用于以市价单交易的 SPOT 以市价单买入默认为 quote_ccy, 卖出默认为 base_ccy
|
| > banAmend | Boolean | 否 | 是否禁止修改现货订单,true 或 false,默认为 false。 当 banAmend 为 true 时,余额不足将导致下单失败。仅适用于 SPOT 市价单。 |
下单示例
只有当您拥有足够的资金时,才能下单。
// Place Martket Order
TsgcWSAPI_OKX1.PlaceMarketOrder(okxosBuy, 'ETH-BTC', 1);
// Place Limit Order
TsgcWSAPI_OKX1.PlaceLimitOrder(okxosBuy, 'ETH-BTC', 1, 0.25);
取消订单示例
取消未完成的订单。
TsgcWSAPI_OKX1.CancelOrder('ETH-BTC', '457589362405027840');
修改订单
修改未完成的订单。
TsgcWSAPI_OKX1.AmendOrder('ETH-BTC', '457589362405027840', '', 2);
WebSocket Trade API 还支持一次性下达、取消和修改多个订单的批量操作。这些操作需要身份验证。
| 方法 | 描述 |
| BatchPlaceOrders | 在单个请求中下多个订单。每次最多可下 20 个订单。 |
| BatchCancelOrders | 在单次请求中取消多个订单。每次最多可取消 20 个订单。 |
| BatchAmendOrders | 在单个请求中修改多个未完成的订单。每次最多可修改 20 个订单。 |
| MassCancelOrders | 批量取消特定工具类型的所有挂单。 |