Kraken API 更新 sgcWebSockets

· 功能

Kraken 是运营历史最长、最值得信赖的加密货币交易所之一,提供现货和期货市场。面向 Delphi 的 TsgcWSAPI_KrakenTsgcWSAPI_Kraken_Futures 组件可全面访问 Kraken 的 WebSocket 和 REST API,支持实时行情数据流、账户管理、订单下达以及期货交易,所有功能均可在单一代码库中实现。

目录

概述

Kraken API 分为两个独立平台,各自对应一个组件:

组件市场说明
TsgcWSAPI_Kraken现货通过 WebSocket 和 REST 在 Kraken 现货交易所进行加密货币交易
TsgcWSAPI_Kraken_Futures期货以杠杆仓位交易永续合约和固定到期期货合约

两个组件均采用双通道方式:WebSocket 连接用于低延迟实时数据流,REST 端点用于查询余额、下单及获取历史数据等请求/响应操作。

配置

现货和期货组件均需提供 API 凭证才能进行私有(已认证)操作。行情数据等公共端点无需认证。

属性类型说明
Kraken.ApiKeyString您的 Kraken API 密钥,在 Kraken 账户设置页面生成
Kraken.ApiSecretString您的 Kraken API 密钥,用于对私有请求进行签名

注意:请在 kraken.com > Security > API 生成 API 密钥。仅分配应用所需的权限。对于只读仪表盘,请完全禁用交易和提现权限。

现货 WebSocket API

现货 WebSocket API 提供行情数据和私有账户事件的实时流。方法分为公共频道(无需认证)和私有频道(需要有效的 WebSocket 令牌)。

公共频道

方法说明
SubscribeTicker / UnSubscribeTicker实时行情信息,包含最优买/卖价、24 小时成交量及价格统计
SubscribeOHLC / UnSubscribeOHLC可配置时间间隔的实时 OHLC(K 线)数据
SubscribeTrade / UnSubscribeTrade显示交易所每笔成交的实时成交记录
SubscribeBook / UnSubscribeBook可配置深度的订单簿快照和增量更新
SubscribeSpread / UnSubscribeSpread实时最优买/卖价差更新
SubscribeAll / UnSubscribeAll一次性订阅或取消订阅指定交易对的所有公共频道

私有频道

方法说明
SubscribeOwnTrades / UnSubscribeOwnTrades您自己成交记录的实时数据流
SubscribeOpenOrders / UnSubscribeOpenOrders您挂单的实时更新(新建、修改、取消、已成交)
AddOrder通过 WebSocket 下单(延迟低于 REST)
CancelOrder通过 WebSocket 取消现有订单
// Subscribe to public ticker data for BTC/USD
oKraken.SubscribeTicker('XBT/USD');
// Subscribe to the order book with 10-level depth
oKraken.SubscribeBook('XBT/USD');
// Subscribe to real-time trades
oKraken.SubscribeTrade('ETH/USD');
// Subscribe to private channels (requires API key)
oKraken.SubscribeOwnTrades;
oKraken.SubscribeOpenOrders;

现货 REST API

现货 REST API 通过 TsgcWSAPI_Kraken 组件的 REST_API 属性访问,提供行情查询、账户管理、交易及资金操作等全套端点。

公共 REST 方法

方法说明
GetServerTime返回服务器当前时间(用于时钟同步)
GetAssets列出所有可用资产及其属性(小数精度、显示名称)
GetAssetPairs列出所有可交易资产对及手续费结构和保证金信息
GetTicker返回一个或多个交易对的行情数据(买价、卖价、最新价、成交量、VWAP)
GetOHLC返回指定交易对和时间间隔的 OHLC K 线数据
GetOrderBook返回指定交易对在指定深度的当前订单簿
GetTrades返回指定交易对的近期成交记录
GetSpread返回指定交易对的近期价差数据

私有 REST 方法 - 账户与交易

方法说明
GetAccountBalance返回账户中所有资产的余额
GetTradeBalance返回交易余额信息(权益、保证金、可用保证金、盈亏)
GetOpenOrders返回所有当前挂单
GetClosedOrders返回近期已成交订单
QueryOrders按交易 ID 查询特定订单
GetTradesHistory返回您的交易历史
QueryTrades按成交 ID 查询特定成交
GetLedgers返回账本记录(入金、出金、交易、手续费)
QueryLedgers按 ID 查询特定账本记录
GetTradeVolume返回您的 30 天交易量及费率等级
AddOrder通过 REST 下单
CancelOrder通过 REST 取消现有订单
GetWebSocketsToken生成私有 WebSocket 订阅所需的令牌

私有 REST 方法 - 导出与报告

方法说明
AddExport请求数据导出(成交记录或账本记录)
ExportStatus检查待处理导出请求的状态
RetrieveExport下载已完成的导出文件
RemoveExport删除导出报告

私有 REST 方法 - 资金操作

方法说明
GetDepositMethods返回指定资产的可用充值方式
GetDepositAddresses返回指定资产和方式的充值地址
GetStatusOfRecentDeposits返回近期充值交易的状态
GetWithdrawalInformation返回指定资产的提现详情(手续费、最小额、限额)
WithdrawFunds发起向外部地址的提现
GetStatusOfRecentWithdraws返回近期提现交易的状态
RequestWithdrawalCancelation尝试取消待处理的提现
RequestWalletTransfer在 Kraken 钱包之间划转资金(如现货转期货)
// Public REST: Get ticker data
ShowMessage(oKraken.REST_API.GetTicker('XBTUSD'));
// Public REST: Get OHLC data
ShowMessage(oKraken.REST_API.GetOHLC('XBTUSD'));
// Private REST: Get account balance
ShowMessage(oKraken.REST_API.GetAccountBalance);
// Private REST: Get open orders
ShowMessage(oKraken.REST_API.GetOpenOrders);

期货 WebSocket API

TsgcWSAPI_Kraken_Futures 组件提供 Kraken 期货市场的实时数据流,包括永续合约和固定到期期货。

公共频道

方法说明
SubscribeTicker / UnSubscribeTicker实时期货行情,包含标记价格、指数价格和资金费率
SubscribeTrade / UnSubscribeTrade期货市场实时成交记录
SubscribeBook / UnSubscribeBook期货合约订单簿快照和增量更新
SubscribeHeartBeat / UnSubscribeHeartBeat通过定期心跳消息监控连接健康状态
SubscribeTickerLite / UnSubscribeTickerLite负载较小的精简行情,适用于高频监控

私有频道

方法说明
SubscribeOpenOrdersVerbose / UnSubscribeOpenOrdersVerbose包含完整订单信息的实时详细挂单更新
SubscribeOpenPositions / UnSubscribeOpenPositions期货持仓的实时更新
SubscribeAccountLog / UnSubscribeAccountLog实时账户活动日志(资金费用、强制平仓等)
SubscribeFills / UnSubscribeFills期货订单成交的实时通知
SubscribeOpenOrders / UnSubscribeOpenOrders轻量级挂单状态更新
SubscribeAccountBalanceAndMargins / UnSubscribeAccountBalanceAndMargins期货账户余额和保证金的实时更新
SubscribeNotifications / UnSubscribeNotifications账户系统通知和告警

期货 REST API

期货 REST API 通过 TsgcWSAPI_Kraken_FuturesREST_API 属性访问,提供行情数据、订单管理、账户查询和资金划转等端点。

公共 REST 方法

方法说明
GetFeeSchedules返回期货交易的当前费率表
GetHistory返回期货合约的历史行情数据
GetInstruments列出所有可用期货合约及其合约规格
GetTickers返回所有期货合约的行情数据

私有 REST 方法 - 账户与订单

方法说明
GetAccounts返回期货账户余额和保证金信息
GetFills返回期货订单的近期成交历史
GetHistoricalExecutions返回历史订单执行记录
GetHistoricalOrders返回历史订单数据
GetHistoricalTriggers返回条件单的历史触发事件
GetOpenPositions返回所有当前未平仓期货持仓
GetNotifications返回账户通知

私有 REST 方法 - 订单管理

方法说明
SendMarketOrder以当前最优价格下市价单
SendLimitOrder以指定价格下限价单
SendStopOrder下在指定价格触发的止损单
SendTakeProfit下止盈单
CancelAllOrders一次性取消所有期货挂单
CancelOrderByOrderId使用 Kraken 订单 ID 取消特定订单
CancelOrderByCliOrderId使用客户端订单 ID 取消特定订单
EditOrderByOrderId使用 Kraken 订单 ID 修改现有订单
EditOrderByCliOrderId使用客户端订单 ID 修改现有订单

私有 REST 方法 - 划转与报告

方法说明
Transfer在期货子账户之间划转资金
WalletTransfer在不同钱包类型之间划转
SubAccountTransfer在子账户之间划转
WithdrawalToSpotWallet将资金从期货钱包转回现货钱包
GetFeeScheduleVolumes返回用于费率等级计算的您的交易量
GetAccountLogCSV以 CSV 文件形式下载账户活动日志

完整代码示例

以下示例演示如何连接 Kraken 现货 API、通过 REST 获取行情数据、查询账户余额,以及通过 WebSocket 订阅实时行情。

var
  oClient: TsgcWebSocketClient;
  oKraken: TsgcWSAPI_Kraken;
begin
  // Create and configure the WebSocket client
  oClient := TsgcWebSocketClient.Create(nil);
  oKraken := TsgcWSAPI_Kraken.Create(nil);
  oKraken.Client := oClient;
  // Configure API credentials for private endpoints
  oKraken.Kraken.ApiKey := 'your_api_key';
  oKraken.Kraken.ApiSecret := 'your_api_secret';
  // Connect to Kraken
  oClient.Active := True;
  // REST: Get ticker data for BTC/USD
  ShowMessage(oKraken.REST_API.GetTicker('XBTUSD'));
  // REST: Get account balance (requires API key)
  ShowMessage(oKraken.REST_API.GetAccountBalance);
  // WebSocket: Subscribe to real-time ticker
  oKraken.SubscribeTicker('XBT/USD');
end;

期货示例

期货组件的配置方式与现货相同,使用 TsgcWSAPI_Kraken_Futures 替代即可:

var
  oClient: TsgcWebSocketClient;
  oFutures: TsgcWSAPI_Kraken_Futures;
begin
  oClient := TsgcWebSocketClient.Create(nil);
  oFutures := TsgcWSAPI_Kraken_Futures.Create(nil);
  oFutures.Client := oClient;
  // Configure API credentials
  oFutures.Kraken.ApiKey := 'your_futures_api_key';
  oFutures.Kraken.ApiSecret := 'your_futures_api_secret';
  oClient.Active := True;
  // REST: Get all available futures instruments
  ShowMessage(oFutures.REST_API.GetInstruments);
  // REST: Get account information
  ShowMessage(oFutures.REST_API.GetAccounts);
  // WebSocket: Subscribe to futures ticker
  oFutures.SubscribeTicker('PI_XBTUSD');
  // WebSocket: Subscribe to private account updates
  oFutures.SubscribeOpenPositions;
  oFutures.SubscribeAccountBalanceAndMargins;
end;

注意事项与最佳实践

现货与期货 API 密钥

Kraken 的现货和期货交易使用各自独立的 API 密钥。请在 Kraken 设置页面为每个平台生成专用密钥,不要在两个组件之间复用同一密钥。

私有频道的 WebSocket 令牌

现货交易所的私有 WebSocket 订阅需要通过 GetWebSocketsToken REST 方法获取的临时令牌。当 API 凭证配置正确后,组件会自动处理此流程,但请注意令牌会过期并在需要时自动刷新。

速率限制

Kraken 对 REST 和 WebSocket API 均实施速率限制。REST 端点采用计数器机制,每次调用会增加计数,计数器随时间衰减。超过限制将导致临时封禁。建议使用 WebSocket 订阅获取实时数据,而非轮询 REST 端点。

资产对命名规范

注意:Kraken 的 REST 和 WebSocket API 使用不同的命名规范。REST 端点通常使用连写格式(如 XBTUSD),而 WebSocket 频道使用斜杠分隔格式(如 XBT/USD)。组件会处理这种差异,但在解析响应时请留意。可使用 GetAssetPairs 查询所有可用交易对的确切名称。