Kraken 是运营历史最长、最值得信赖的加密货币交易所之一,提供现货和期货市场。面向 Delphi 的 TsgcWSAPI_Kraken 和 TsgcWSAPI_Kraken_Futures 组件可全面访问 Kraken 的 WebSocket 和 REST API,支持实时行情数据流、账户管理、订单下达以及期货交易,所有功能均可在单一代码库中实现。
目录
概述
Kraken API 分为两个独立平台,各自对应一个组件:
| 组件 | 市场 | 说明 |
|---|---|---|
TsgcWSAPI_Kraken | 现货 | 通过 WebSocket 和 REST 在 Kraken 现货交易所进行加密货币交易 |
TsgcWSAPI_Kraken_Futures | 期货 | 以杠杆仓位交易永续合约和固定到期期货合约 |
两个组件均采用双通道方式:WebSocket 连接用于低延迟实时数据流,REST 端点用于查询余额、下单及获取历史数据等请求/响应操作。
配置
现货和期货组件均需提供 API 凭证才能进行私有(已认证)操作。行情数据等公共端点无需认证。
| 属性 | 类型 | 说明 |
|---|---|---|
Kraken.ApiKey | String | 您的 Kraken API 密钥,在 Kraken 账户设置页面生成 |
Kraken.ApiSecret | String | 您的 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_Futures 的 REST_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 查询所有可用交易对的确切名称。
