Kraken WebSocket API - 常见问题

上次更新时间: 2025年3月31日

Kraken 是否有 WebSocket API?我该如何连接?

Kraken 同时提供 REST API 和 WebSocket API。我们的 WebSocket API 可通过以下安全 URL 访问:

公共(未经身份验证)市场数据源: wss://ws.kraken.com/

私人(已通过身份验证)账户数据源和交易端点: wss://ws-auth.kraken.com/

连接公共市场数据源无需身份验证,但私人数据源需要有效的身份验证令牌。

通过 WebSocket API 发送和接收的所有消息均为 JSON 格式的纯文本。每种消息类型的详细信息可在我们的 WebSocket API 文档中找到。

您有可用的 WebSocket 库吗?

我们提供了多种 WebSocket API 示例代码,可以直接使用,也可以作为您自己实现代码的起点:

  • 一个 WebSocket API 命令行客户端(用 Python 编写),

  • 一个 WebSocket API 测试套件(用 JavaScript 编写),

  • 如何使用我们推荐的 Python WebSocket 模块 (websocket-client) 的示例,

  • 以及一个 WebSocket API (Github)。

我们的 WebSocket API 可以用您喜欢的任何编程语言实现,如果需要,我们的 API 支持团队 将很乐意为您提供帮助或提供其他语言的示例代码。

支持哪些数据源/端点?

我们的 WebSocket API 提供各种实时市场数据源、账户数据源和交易端点。有关可用数据源/端点的完整列表以及每个数据源/端点的实现细节,请参阅我们的 WebSocket API 文档

我如何知道我已成功连接?我如何知道我仍然连接着?

订阅数据源后,将以每秒 1 次心跳的频率接收到 {u'event': u'heartbeat'} 消息。

如果接收到其他消息(市场数据、账户数据等),则不会接收到心跳。何时以及为何接收市场或账户数据取决于您订阅的数据源。

如果您订阅的货币对交易量较低,您可能在很长一段时间内只接收到心跳。

如果您取消订阅数据源,您将不再接收心跳或交易数据,并且在 1 分钟内未订阅任何数据源后,您将从 WebSockets 数据源断开连接。

WebSocket 何时以及为何发送更新数据?

何时以及为何接收市场数据或账户数据取决于您订阅的数据源。例如:

行情:当某个货币对发生交易或批量交易时,将发布该货币对的行情消息。只有当您订阅了该货币对的行情数据源时,才会收到此消息。

交易:同样,当某个货币对发生交易或批量交易时,也将发布该货币对的交易消息。只有当您订阅了该货币对的交易数据源时,才会收到此消息。

OHLC:当某个货币对发生交易或批量交易时,每个 OHLC 区间都会发布更新。只有当您订阅了这些区间时,才会收到更新。跨越区间边界后,在下一次交易发生之前不会发送任何消息。

订单簿:首次订阅订单簿数据源时,将发布具有所选深度的订单簿初始快照。

当新的订单添加到订单簿或执行的交易影响您订阅的订单簿深度时,将发布一条消息,其中包含受影响价格水平和数量的订单簿更新。这些更新可以只包含买单、只包含卖单,或同时包含买单和卖单。有关详细信息,请参阅下面的“如何构建订单簿”。

价差:当新的最高买价或最低卖价订单被下达,或执行的交易改变了最佳买价或最佳卖价时,将发布一条包含更新买价和卖价的价差消息。

WebSocket 数据源提供历史数据还是仅提供当前数据?

WebSocket 市场数据源仅提供当前数据,但可以同时连接 WebSocket API 获取当前数据和 REST API 获取历史数据。

reqid 参数的使用。

订阅请求可以包含客户端提供的 reqid 参数,该参数随后可用于将所需的 WebSocket 订阅请求与该订阅的通道 ID 进行匹配。

请注意,如果您同时进行多个 WebSocket 订阅,它们都将被分配相同的 reqid 值。要分配不同的 reqid 值,每个数据源必须单独订阅。

我想要更多详细信息,在哪里可以找到?

完整的 WebSocket API 规范可在 WebSocket API 文档中找到。

REST 和 WebSocket API 中货币对符号的差异。

WebSocket API 仅接受 ISO 4217-A3 格式的货币对符号,例如 XBT/USD。

REST API AssetPairs 端点可用于在 REST API 版本(例如 XBTUSD 或 XXBTZUSD)和 WebSocket API 版本(例如 XBT/USD)之间转换符号。

https://api.kraken.com/0/public/AssetPairs

wsname 字段提供 WebSocket API 符号。

如何构建订单簿

WebSocket API 订单簿数据源是所有 WebSocket 数据源中最复杂的,但只要正确解释订单簿数据源消息,就可以用几行代码维护订单簿的本地副本。

我们的 WebSocket API 支持页面提供了 解释订单簿数据源消息的详细说明,以及 订单簿数据源示例记录,以及 示例代码(用 Python 编写),用于维护订单簿的有效本地副本。

WebSocket API 连接限制是什么?

WebSocket API 限制了同时连接的最大数量,以防止滥用(例如 DDoS 攻击)。如果您的 WebSocket 客户端同时建立过多连接,将收到以下错误消息:

{“error”: {“message”: “You have reached maximum capacity for WebSocket connections. Please reach out to Kraken support team for any questions.“, “hint”: “Your code may be reconnecting too often or when it has no need to.“, “name”: “WebSocket connection rate error”}}

WebSocket API 允许通过单个 WebSocket 连接进行多个数据源订阅(例如通过单个连接订阅 XBT/USD 货币对的所有可用市场数据),因此可以在不达到 WebSocket 连接限制的情况下流式传输所有货币对的所有可用市场数据。

WebSocket API 速率限制是什么?

所有订单输入界面(网站、Kraken Terminal、REST 和 WebSocket API)都适用相同的交易速率限制,并在我们的速率限制支持页面上详细解释。

单个 WebSocket API 连接的消息速率限制将根据系统负载而异。当消息速率限制超出时,WebSocket API 客户端将收到错误消息 {"Error": "Exceeded msg rate"}。

通过 WebSocket API 交易(下达/取消订单)。

通过 WebSocket API 进行交易可通过 addOrder 和 cancelOrder 端点进行,它们分别用于下达新订单和取消现有(开放)订单。

WebSocket 交易端点可通过与私人账户管理数据源 (openOrders 和 ownTrades) 相同的私人 WebSocket 连接 (wss://ws-auth.kraken.com/) 访问。

有关交易端点的完整详细信息可在 WebSocket API 文档中找到,我们的 WebSocket API 支持页面提供了更多信息和示例,说明如何在您自己的代码中使用交易端点。

连接到 WebSocket API 时,为什么会收到 403 错误?

WebSocket API 连接通过 Cloudflare 中介,因此 Cloudflare 实施的任何安全设置都可能影响与公共 (wss://ws.kraken.com) 和私人 (wss://ws-auth.kraken.com) URL 的连接。

Cloudflare 要求所有 TLS 连接都使用服务器名称指示 (SNI),否则 WebSocket 连接将失败,并返回 HTTP 403 Forbidden 错误。Cloudflare 的支持页面提供了有关其 TLS SNI 要求的更多详细信息。

我们的官方 Python WebSocket API 库已更新以支持 TLS SNI,但某些第三方 WebSocket API 库可能仍受影响。如果您需要任何帮助更新您的 WebSocket API 代码以支持 TLS SNI,请联系我们的 API 支持团队。

WebSocket API 协助。

如果您在实现 WebSocket API 客户端时需要任何帮助,请联系我们的 API 支持团队

需要更多帮助吗?