用 Kraken API 交易?小心这几个坑!90% 的开发者都踩过!

时间:2025-03-17 阅读:73
摘要: 想通过 Kraken API 自动交易?本文为你总结了新手常遇到的问题,包括 API 密钥管理、API 调用方法、数据格式、交易安全以及速率限制等,助你快速上手。

Kraken API 常见问题

Kraken 交易所提供强大的 API 接口,允许开发者通过编程方式访问其交易平台,进行数据查询、下单交易等操作。以下是一些关于 Kraken API 的常见问题及其解答:

1. API 访问权限

问:如何获取 Kraken API 访问权限?

答:为了访问 Kraken 交易所的 API,您需要首先在 Kraken 官方网站上注册并创建一个账户。完成账户注册后,登录您的 Kraken 账户,并导航至账户设置或安全设置部分。在那里,您会找到 API 密钥管理选项。

在 API 密钥管理页面,您可以生成新的 API 密钥对。Kraken 允许您创建多个 API 密钥,每个密钥可以拥有不同的权限集,从而实现更精细的安全控制。生成 API 密钥时,您需要仔细配置该密钥的权限。这些权限包括但不限于:

  • 查询账户余额: 允许 API 密钥读取您的账户余额信息。
  • 下单交易: 允许 API 密钥代表您进行买入或卖出交易。
  • 取消订单: 允许 API 密钥取消您已挂出的订单。
  • 查询交易历史: 允许 API 密钥获取您的历史交易数据。
  • 提取资金: 允许 API 密钥将资金从您的 Kraken 账户转移到外部地址(此权限应谨慎使用,并仅在必要时启用)。
  • 创建提现请求: 允许 API 密钥请求提现。

请务必根据您的实际需求,为每个 API 密钥分配最小必需权限。例如,如果您只需要通过 API 查询市场数据,则无需授予下单交易或提取资金的权限。选择权限后,系统会生成一个 API 密钥(Public Key)和一个私钥(Private Key 或 Secret Key)。 请极其谨慎地保管您的私钥,切勿以任何方式泄露给他人。 私钥泄露可能导致您的账户被盗用或资金损失。

Kraken 还提供了一些额外的安全措施,例如 IP 地址白名单,您可以将 API 密钥限制为仅从特定的 IP 地址访问。建议您启用此功能,以进一步提高 API 密钥的安全性。

定期审查和轮换您的 API 密钥也是一个良好的安全实践。即使您没有怀疑任何安全漏洞,定期更换 API 密钥也可以降低长期风险。

请注意,Kraken API 使用过程中可能存在速率限制,请参考 Kraken 官方 API 文档以获取更详细的信息,以便合理使用 API,避免因超出速率限制而被阻止访问。

问:我应该如何选择 API 密钥权限?

答:选择 API 密钥权限时,务必遵循最小权限原则,这是保障账户安全的关键措施。最小权限原则是指,为应用程序或脚本分配访问权限时,仅授予其执行必要操作所需的最低权限集合。这意味着,仔细分析您的应用程序的功能,并仅选择那些绝对必要的权限。

例如,如果您的应用程序的主要功能是监控账户余额、获取市场数据或跟踪历史交易记录,那么授予交易权限(如买入、卖出或撤销订单)将是不必要的,并且会显著增加安全风险。在这种情况下,您只需要选择读取账户信息、访问市场数据或查看交易历史记录的权限即可。

进一步地,考虑到API权限的细粒度控制,一些平台允许您为不同类型的查询设置不同的权限。例如,您可以允许应用程序读取特定交易对的历史数据,但禁止其访问其他交易对的数据。同样,您可以限制应用程序仅能读取部分账户信息,例如可用余额,而禁止其访问其他敏感信息,例如交易密码或API密钥本身。

这样做的好处是,即使您的应用程序受到恶意攻击或出现安全漏洞,攻击者所能造成的损害也会被限制在最小范围内。例如,如果您的应用程序被攻破,但它没有交易权限,攻击者将无法利用它来盗取您的资金或进行未经授权的交易。

在选择 API 密钥权限时,始终以安全性为首要考虑因素,并仔细评估您的应用程序的实际需求。只授予必要的权限,并定期审查和更新您的权限设置,以确保您的账户安全得到最大程度的保护。

问:API 密钥可以重置吗?

答:是的,在 Kraken 账户设置中,您可以随时生成新的 API 密钥,并使旧的 API 密钥失效,这实际上就是重置的过程。API 密钥重置是确保账户安全的重要措施,尤其是在以下情况下:

  • 密钥泄露风险: 如果您怀疑您的 API 密钥可能已被未经授权的第三方获取,例如,您的服务器或开发环境遭到入侵。
  • 人员变动: 团队成员离职,且该成员曾持有访问 Kraken API 的密钥。
  • 安全审计: 作为例行安全检查的一部分,定期更换 API 密钥是一种良好的安全实践。
  • 误操作: 意外地将 API 密钥提交到公共代码仓库(如 GitHub),或者以其他方式暴露了密钥。

重置 API 密钥后,请务必更新所有使用旧密钥的应用程序或脚本,以避免服务中断。在 Kraken 平台中,重置 API 密钥通常会立即生效,旧密钥将无法继续使用。强烈建议您启用双因素身份验证(2FA),为您的 Kraken 账户增加额外的安全保障,即使 API 密钥泄露,也能有效防止未经授权的访问。

注意: API 密钥的权限控制非常重要。创建 API 密钥时,请仔细配置其访问权限,仅授予必要的权限,避免授予过高的权限,降低潜在的安全风险。例如,如果您的应用程序只需要读取账户余额,则不要授予提现权限。

2. API 调用

问:Kraken API 的请求方法是什么?

答:Kraken API 主要通过 HTTPS 协议进行通信,并遵循 RESTful 架构原则。 这意味着开发者可以使用标准的 HTTP 请求方法,例如 GET 和 POST,来与 API 资源进行交互。 进一步地,Kraken API 还支持其他 HTTP 方法,如 POST,用于提交数据,例如创建新的订单或更新账户设置。使用 HTTPS 协议保证了数据在客户端和服务器之间传输过程中的安全性,防止数据被窃取或篡改。 RESTful 架构的设计使得 API 更易于理解和使用,因为它基于标准的 HTTP 方法和资源标识符(URL)。通过发送带有适当参数的 HTTP 请求到特定的 URL,开发者可以读取、创建、更新或删除 Kraken 交易所的数据。 对于需要身份验证的操作,请求通常需要在 HTTP 头部包含 API 密钥和签名信息,以验证请求的合法性。 错误处理也通过标准的 HTTP 状态码来实现,例如 200 表示成功,400 表示客户端错误,500 表示服务器错误。

问:Kraken API 的请求地址是什么?

答:Kraken API 的请求地址以 https://api.kraken.com/ 为根 URL。所有 API 请求都必须基于此基础地址构建,并根据所请求的功能附加相应的端点。例如,获取公共市场数据和账户信息的端点有所不同。

公共 API 端点用于访问无需身份验证的信息,例如交易对行情、订单簿和最近交易历史。 /0/public/Ticker 是一个常用的公共端点,用于检索特定交易对的行情信息。此端点返回的数据包括交易对的最新成交价、最高价、最低价、交易量等关键指标,方便用户进行市场分析。

另一方面,私有 API 端点用于访问需要身份验证的用户账户信息,例如账户余额、交易历史和订单管理。使用私有 API 需要提供有效的 API 密钥和签名,以确保账户安全。 /0/private/Balance 是一个私有端点,用于查询账户的可用余额。在使用此端点之前,需要设置正确的 API 密钥权限,并使用正确的签名方法进行身份验证。

请务必查阅 Kraken 官方 API 文档,以获取最新的可用端点列表、请求参数和响应格式。 Kraken 会定期更新 API,增加新的功能和改进现有功能。因此,及时了解最新文档对于正确使用 Kraken API 至关重要。务必注意 API 的速率限制,避免因频繁请求而被限制访问。

问:如何进行身份验证?

答:为了确保您能够安全地访问需要身份验证的私有 API 端点,您需要在每个请求的头部信息中包含 API-Key API-Sign 这两个关键字段。 API-Key 字段用于传递您的 API 密钥,该密钥是您身份的唯一标识符,务必妥善保管。 API-Sign 字段则包含一个数字签名,该签名通过特定的加密算法,结合您的 API 密钥、请求参数以及一个密钥(通常是您的 API Secret)生成,用于验证请求的完整性和真实性,防止请求在传输过程中被篡改。

更具体地说, API-Sign 的生成过程通常如下:

  1. 准备数据: 将所有参与签名的请求参数按照字母顺序排序,并将它们拼接成一个字符串。
  2. 添加密钥: 将您的 API Secret(通常与 API Key 配对使用)添加到拼接后的字符串中。API Secret 应严格保密,切勿泄露。
  3. 生成哈希: 使用预定的哈希算法(例如 SHA256 或 HMAC-SHA256)对包含 API Secret 的字符串进行哈希运算,得到一个固定长度的哈希值。
  4. 设置签名: 将生成的哈希值作为 API-Sign 的值添加到请求头中。

服务器收到请求后,会使用相同的算法和您的 API Secret 重新计算签名,并将计算结果与您在 API-Sign 中提供的签名进行比较。如果两个签名一致,则表明请求未被篡改,并且来自合法的用户,服务器将继续处理该请求。反之,如果签名不一致,则服务器将拒绝该请求,并返回相应的错误信息。

请务必仔细阅读 API 文档,了解具体的签名算法和参数要求,以确保您的请求能够顺利通过身份验证。

问:如何生成 API-Sign 签名?

答:生成 API-Sign 签名是确保 API 请求安全性的关键步骤。此签名用于验证请求的来源和完整性,防止恶意篡改。签名过程涉及使用您的私钥对请求数据进行加密处理。以下是详细的签名算法步骤,以及一些注意事项:

  1. 构造消息字符串:

    消息字符串是用于生成签名的基础数据。准确地将请求的 nonce 值和请求的 URL 路径拼接在一起。 nonce 是一个随机数,用于防止重放攻击,确保每个请求的唯一性。URL 路径是指不包含域名的部分,例如 /api/v1/orders 。拼接顺序务必保证正确,通常是 nonce + URL 路径

  2. 计算 SHA-256 哈希:

    对构造好的消息字符串进行 SHA-256 哈希计算。SHA-256 是一种广泛使用的密码学哈希函数,它将任意长度的输入转换为固定长度(256 位)的哈希值。您需要使用相应的编程语言提供的 SHA-256 算法库来完成此步骤。确保选择正确的编码方式(通常是 UTF-8)对字符串进行编码,然后再进行哈希计算。不同的编码方式会产生不同的哈希值。

  3. 使用私钥进行 HMAC-SHA512 签名:

    这是签名过程的核心步骤。使用您的私钥对 SHA-256 哈希值进行 HMAC-SHA512 签名。HMAC (Hash-based Message Authentication Code) 是一种使用密钥的哈希算法,用于验证数据的完整性和来源。SHA512 是 HMAC 使用的哈希函数。私钥是只有您知道的秘密密钥,用于对数据进行签名。请务必妥善保管您的私钥,防止泄露。泄露的私钥可能导致您的账户被盗用。同样,需要选择正确的编码方式进行签名操作。

  4. Base64 编码:

    对 HMAC-SHA512 签名结果进行 Base64 编码。Base64 是一种将二进制数据转换为 ASCII 字符串的编码方式,它可以将签名结果转换为可以在 HTTP 请求头中安全传输的文本格式。Base64 编码不会改变数据的实际内容,只是改变了数据的表示形式。

不同的编程语言,例如 Python、Java、JavaScript、PHP 等,都有相应的库和工具包可以帮助您生成 API-Sign 签名。例如,在 Python 中,您可以使用 hashlib hmac 模块;在 Java 中,您可以使用 javax.crypto 包;在 JavaScript 中,您可以使用 crypto 模块。使用这些库时,请务必参考相关的文档和示例代码,以确保正确地实现签名算法。一些 API 平台还提供了签名算法的示例代码和 SDK,可以帮助您快速集成签名功能。请注意,在使用任何第三方库之前,请确保该库是安全可靠的,并定期更新到最新版本,以防止安全漏洞。

问:如何处理 Kraken API 的速率限制?

答:Kraken API 采用速率限制机制,旨在维护系统的稳定性和公平性,防止恶意滥用行为。速率限制的具体参数,例如每分钟或每秒钟允许的请求次数,取决于您的账户等级(Tier)以及您所使用的 API 功能。通常,账户等级越高,允许的请求速率也越高。如果您在短时间内发送的 API 请求超过了预设的速率限制,Kraken API 将会返回 429 Too Many Requests HTTP 状态码错误,表明您的请求被服务器暂时拒绝。

为了优雅地处理 Kraken API 的速率限制,并确保您的应用程序能够持续稳定地运行,您可以采取以下几种关键策略:

  • 实施指数退避 (Exponential Backoff) 策略: 当您的应用程序收到 429 错误响应时,不要立即重试发送请求。相反,您应该暂停一段时间后再尝试。指数退避策略意味着每次重试前增加等待的时间,例如,第一次等待 1 秒,第二次等待 2 秒,第三次等待 4 秒,依此类推。这样做可以有效缓解服务器的压力,并给服务器足够的时间来恢复。您还需要设置一个最大重试次数,以避免无限循环。
  • 优化 API 请求效率: 仔细审查您的代码,找出可以减少 API 请求的地方。例如,如果您需要获取多个交易对的数据,可以尝试使用 Kraken API 提供的批量请求功能,一次性获取所有需要的数据,而不是为每个交易对单独发送请求。避免不必要的重复请求,并仅请求您真正需要的数据,从而降低 API 使用量。
  • 考虑使用 WebSocket API 获取实时数据: 如果您的应用程序需要实时的市场数据更新,比如实时价格或交易信息,可以考虑使用 Kraken 提供的 WebSocket API。WebSocket 协议允许客户端和服务器之间建立持久的连接,从而实现双向的实时数据传输。相比于轮询 REST API,WebSocket API 通常具有更低的延迟和更高的吞吐量,能够更有效地满足实时数据需求,并减少对 REST API 速率限制的影响。在使用WebSocket API时,也需要注意连接数限制等相关参数。
  • 监控 API 使用情况: 密切监控您的API使用情况,以便了解您的应用程序何时接近速率限制。通过监控,您可以主动调整您的应用程序的行为,以避免触发速率限制。Kraken可能提供API使用统计信息,或者您可以自己记录API请求和响应。
  • 了解您的账户等级和对应的速率限制: 查阅Kraken的官方文档,详细了解您当前账户等级对应的速率限制参数,例如每分钟允许的请求数量,以及不同API endpoint的速率限制是否不同。 根据这些信息,您可以更好地规划您的API请求策略。

3. 数据格式

问:Kraken API 返回的数据格式是什么?

答:Kraken API 的响应主要采用 JSON (JavaScript Object Notation) 格式。JSON 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,因此被广泛应用于 Web API 的数据传输。Kraken 使用 JSON 格式返回交易数据、账户信息、市场深度等各种信息。每个 API 端点返回的 JSON 结构会有所不同,具体取决于请求的功能。开发者应该参考 Kraken 官方 API 文档,了解每个端点返回的具体 JSON 格式定义。例如,交易对的信息可能会包含交易对的名称、价格、交易量等字段,每个字段都有明确的数据类型和含义。开发者可以通过编程语言提供的 JSON 解析库,例如 Python 的 `` 模块或 JavaScript 的 `JSON.parse()` 方法,来解析 Kraken API 返回的 JSON 数据,从而方便地提取和使用其中的信息。正确解析 JSON 响应是使用 Kraken API 的关键步骤,能够确保应用程序能够正确地处理和利用 Kraken 提供的各种金融数据。

问:如何解析 JSON 数据?

答:不同的编程语言都提供了相应的库或内置函数来解析 JSON(JavaScript Object Notation)数据,使其能够被程序理解和操作。 JSON 是一种轻量级的数据交换格式,广泛应用于 Web API 和配置文件中。以下列举几种常见编程语言中解析 JSON 的方法,并提供更详细的说明:

Python:

Python 中,可以使用内置的 模块来解析 JSON 数据。该模块提供了 .loads() 函数将 JSON 字符串转换为 Python 对象(例如字典或列表),以及 .dumps() 函数将 Python 对象转换为 JSON 字符串。


import 

_string = '{"name": "Alice", "age": 30, "city": "New York"}'
python_object = .loads(_string)
print(python_object["name"])  # 输出: Alice

python_data = {"name": "Bob", "age": 25, "city": "Los Angeles"}
_string = .dumps(python_data)
print(_string) # 输出: {"name": "Bob", "age": 25, "city": "Los Angeles"}

.loads() 可以处理包含各种数据类型的 JSON 字符串,包括字符串、数字、布尔值、列表和嵌套的 JSON 对象。 .dumps() 函数也支持多种参数,例如 indent 用于格式化 JSON 输出,使其更易于阅读。

JavaScript:

在 JavaScript 中,可以使用内置的 JSON.parse() 方法将 JSON 字符串解析为 JavaScript 对象,以及 JSON.stringify() 方法将 JavaScript 对象转换为 JSON 字符串。


let String = '{"name": "Alice", "age": 30, "city": "New York"}';
let javascriptObject = JSON.parse(String);
console.log(javascriptObject.name); // 输出: Alice

let javascriptData = {name: "Bob", age: 25, city: "Los Angeles"};
let Stringified = JSON.stringify(javascriptData);
console.log(Stringified); // 输出: {"name":"Bob","age":25,"city":"Los Angeles"}

Java:

在 Java 中,可以使用诸如 Gson 或 Jackson 等库来解析 JSON 数据。这些库提供了更灵活和强大的 API,可以处理复杂的 JSON 结构。


// 使用 Gson
import com.google.gson.Gson;

String String = "{\"name\": \"Alice\", \"age\": 30, \"city\": \"New York\"}";
Gson gson = new Gson();
MyClass myObject = gson.fromJson(String, MyClass.class);
System.out.println(myObject.name); // 输出: Alice

//使用 Jackson
import com.fasterxml.jackson.databind.ObjectMapper;

String String = "{\"name\": \"Alice\", \"age\": 30, \"city\": \"New York\"}";
ObjectMapper mapper = new ObjectMapper();
MyClass myObject = mapper.readValue(String, MyClass.class);
System.out.println(myObject.name); // 输出: Alice

// MyClass 需要定义相应的属性
class MyClass {
    public String name;
    public int age;
    public String city;
}

其他语言:

大多数其他编程语言(例如 PHP, C#, Go, Ruby 等)也提供了类似的 JSON 解析库或函数。 一般来说,解析 JSON 的过程都是将 JSON 字符串转换为该语言中的相应数据结构(例如,字典,哈希表,对象等)。

在实际应用中,选择合适的 JSON 解析库取决于项目的具体需求和编程语言的生态系统。 需要考虑库的性能、易用性、依赖项以及对不同 JSON 结构的支持程度。

问:如何处理 API 返回的错误?

答:Kraken API 通过 JSON 格式的数据响应,并在其中的 error 字段中明确指示任何遇到的问题。 为了确保您的应用程序稳定可靠,务必仔细检查每个 API 响应中的 error 字段。如果该字段包含任何错误信息,应立即根据返回的具体错误代码和消息采取适当的措施。例如,您可以记录错误、向用户显示友好的错误消息或自动重试请求(如果适用)。

Kraken API 错误信息通常遵循一定的模式,方便您进行解析和处理。 error 字段可能包含一个或多个错误代码,每个代码都以字符串形式呈现。以下是一些常见的错误及其详细解释:

  • EAPI:Invalid key :此错误表明您提供的 API 密钥无效。请仔细检查您使用的 API 密钥是否正确,并确认它是否已激活。确保密钥已正确配置,并且具有执行所需操作的权限。如果问题仍然存在,请尝试重新生成新的 API 密钥。
  • EAPI:Rate limit exceeded :Kraken API 对请求频率有限制,以防止滥用并确保所有用户的公平使用。 当您的应用程序在短时间内发送过多的请求时,就会遇到此错误。 为了解决这个问题,您应该实施速率限制策略。这包括使用指数退避算法来重试请求,并维护一个请求队列以避免一次发送太多请求。查看 Kraken API 文档以了解具体的速率限制策略和建议。
  • EOrder:Insufficient funds :在尝试下单时,如果您的账户余额不足以支付订单所需的金额,则会发生此错误。 请验证您的账户中是否有足够的可用资金来执行交易。 您可能需要先存入更多资金,或者调整订单的大小以适应您的现有余额。
  • EOrder:Order minimum not met :Kraken 交易所对每种交易对都有最小交易量要求。如果您尝试下的订单低于此最小交易量,则会收到此错误。 检查您尝试交易的交易对的最小交易量要求,并确保您的订单大小满足或超过该要求。 这可以在 Kraken 的 API 文档或交易界面中找到。

除了上述常见错误之外,Kraken API 还可能返回其他错误代码,具体取决于您执行的操作和遇到的问题。 查阅 Kraken API 文档以获取完整的错误代码列表及其含义,以便您可以有效地处理各种错误情况。

在处理 API 错误时,强烈建议实施适当的日志记录和监控机制。 这使您可以跟踪发生的错误、识别重复出现的问题并主动解决它们。 通过仔细处理 API 错误,您可以构建更强大、更可靠的应用程序,从而提供更好的用户体验。

4. 交易相关

问:如何通过 API 下单?

答:您可以通过调用 /0/private/AddOrder API 端点来提交订单。该端点允许您程序化地执行交易,而无需手动操作交易界面。使用此端点时,务必提供必要的参数,以确保订单能够按照您的意愿执行。

以下是一些关键参数的详细说明:

  • pair (交易对): 指定要交易的货币对,例如 XBTUSD ETHUSD 。 确保交易对的拼写正确,并且平台支持该交易对。
  • type (订单类型): 定义订单的执行方式。常见的订单类型包括:
    • market (市价单): 以当前市场最优价格立即执行。
    • limit (限价单): 只有当市场价格达到您指定的价格时才执行。
    • stop-loss (止损单): 当市场价格达到您设定的止损价时触发,通常用于限制潜在损失。
    • take-profit (止盈单): 当市场价格达到您设定的止盈价时触发,通常用于锁定利润。
    • 还有更多高级订单类型,例如 stop-loss-limit , take-profit-limit , trailing-stop , 和 trailing-stop-limit , 请参考API文档了解具体用法。
  • ordertype (订单类型): 进一步指定订单的执行方式。通常与 type 参数结合使用,以提供更精细的控制。
  • side (买卖方向): 指示您是买入 ( buy ) 还是卖出 ( sell )。
  • ordertype (订单类型): 订单的具体类型,例如 'market' (市价单), 'limit' (限价单)等。
  • price (价格): 对于限价单,指定您希望买入或卖出的价格。 对于市价单,此参数通常可以省略。
  • volume (数量): 指定您希望交易的货币数量。 确保数量单位与交易对的规定一致。
  • leverage (杠杆): 如果您正在进行保证金交易,则指定使用的杠杆倍数。 请谨慎使用杠杆,因为它会放大潜在的利润和损失。
  • starttm (起始时间): 允许您指定订单生效的起始时间,可以用于预定未来的交易。
  • expiretm (过期时间): 允许您指定订单的过期时间,如果订单在该时间之前未被执行,则会被自动取消。
  • close (平仓): 针对减少仓位的特殊订单,可以指定减少的数量等参数。
  • oflags (订单标记): 允许您添加额外的订单标记,例如 post-only, reduce-only等。

在发送 API 请求之前,请务必仔细阅读 API 文档,了解所有可用参数及其含义。 强烈建议使用测试环境 (sandbox) 进行测试,以确保您的代码能够正确处理各种情况,避免在真实交易环境中出现意外错误。 尤其注意错误处理机制,以便能够及时发现和解决问题。 错误代码和消息可以帮助您诊断问题并采取相应的措施。 安全地存储和管理您的 API 密钥至关重要,以防止未经授权的访问和潜在的资金损失。考虑使用双因素认证 (2FA) 等安全措施来进一步保护您的账户。

问:有哪些订单类型?

答:Kraken API 支持多种订单类型,旨在满足不同交易策略和风险管理需求,包括:

  • 市价单 (Market Order): 以当前市场上最优价格立即执行的订单。这意味着您的订单将尽快成交,但不保证成交价格。适用于希望快速进入或退出市场的交易者。
  • 限价单 (Limit Order): 只有当市场价格达到或优于您指定的价格时才会执行的订单。您可以设定一个期望的买入或卖出价格。买入限价单的价格应低于当前市场价格,卖出限价单的价格应高于当前市场价格。如果市场价格未达到指定价格,订单将不会成交。
  • 止损单 (Stop Loss Order): 一种保护性订单,旨在限制潜在的损失。只有当市场价格达到您预设的止损价格时,止损单才会触发,并自动转换为市价单执行。止损单通常用于在价格下跌时卖出,或者在价格上涨时买入以平仓空头头寸。触发后,订单将以当时可用的最佳市场价格成交,可能与止损价格略有偏差。
  • 止损限价单 (Stop Loss Limit Order): 结合了止损单和限价单的特性。当市场价格达到您指定的止损价格时,止损限价单会被触发,并创建一个限价单。只有当市场价格达到或优于您指定的限价时,订单才会成交。这种订单类型允许您更好地控制成交价格,但也存在订单无法成交的风险。
  • 止盈单 (Take Profit Order): 与止损单类似,但用于锁定利润。当市场价格达到您指定的止盈价格时,止盈单会被触发,并自动转换为市价单执行。适用于希望在达到预期利润目标时自动平仓的交易者。与止损单相同,实际成交价格可能与止盈价格略有偏差。
  • 止盈限价单 (Take Profit Limit Order): 类似于止损限价单,结合了止盈单和限价单的功能。当市场价格达到您指定的止盈价格时,止盈限价单会被触发,并创建一个限价单。只有当市场价格达到或优于您指定的限价时,订单才会成交。这种订单类型允许您在锁定利润的同时控制成交价格,但同样存在订单无法成交的风险。

问:如何查询订单状态?

答:您可以使用 /0/private/QueryOrders API 端点来查询您的订单状态。此端点允许您灵活地检索订单信息,满足不同的查询需求。 为了查询特定订单的状态,您需要在请求中提供相应的订单 ID。 这将返回与该 ID 关联的订单的详细信息,包括当前状态、创建时间、成交价格等。 如果您需要了解所有订单的状态,您可以省略订单 ID,API 将返回所有订单的列表及其各自的状态。

/0/private/QueryOrders API 端点支持多种查询参数,以便更精确地筛选和检索订单信息。 常用的参数包括:

  • txid (交易 ID): 用于查询具有特定交易 ID 的订单。
  • trades (是否包含交易): 指示是否在结果中包含与订单相关的交易历史。如果设置为 true ,则将返回有关订单执行的详细信息,例如成交价格、交易数量和时间戳。
  • userref (用户参考 ID): 您可以在创建订单时指定一个用户参考 ID。 使用此参数可以根据该 ID 查询订单。
  • start (起始时间): 用于指定查询订单的起始时间,只返回在该时间之后创建的订单。 时间格式为 Unix 时间戳。
  • end (结束时间): 用于指定查询订单的结束时间,只返回在该时间之前创建的订单。 时间格式为 Unix 时间戳。
  • ofs (偏移量): 用于分页查询,指定结果集的起始位置。
  • count (数量): 用于分页查询,指定要返回的订单数量。

通过灵活组合这些参数,您可以根据自己的需求精确地查询订单状态,从而更好地监控您的交易活动。 请务必参考 API 文档以获取完整的参数列表和使用说明。

问:如何取消订单?

答:您可以通过调用 /0/private/CancelOrder API 端点来取消订单。此 API 允许您撤销先前提交的未成交订单,从而有效停止其执行。要成功取消订单,您必须提供待取消订单的唯一标识符,即订单 ID。 请务必在请求中准确指定订单 ID,否则可能导致取消失败。在取消成功后,相应的订单将从您的活动订单列表中移除,并且冻结的资产(如有)将被释放回您的可用余额。取消请求可能由于订单已成交、已取消或系统错误等原因而失败,建议您在调用 API 后验证响应结果以确认取消操作是否成功。

5. WebSocket API

问:什么是 Kraken WebSocket API?

答:Kraken WebSocket API 是一种强大的实时双向通信协议接口,专门设计用于提供快速、高效的市场数据和账户数据访问。它允许用户以订阅的方式接收持续更新的数据流,包括但不限于实时价格变动、交易量统计、订单簿深度、以及个人账户余额和订单状态的实时更新。与传统的 REST API 相比,WebSocket API 的优势在于其显著降低的延迟和大幅提升的吞吐量。这是因为它使用持久连接,避免了每次请求-响应交互都建立新连接的开销。利用 WebSocket,您可以构建对市场变化极其敏感的应用程序,例如高频交易机器人、实时图表工具和个性化警报系统,从而更快地响应市场动态,做出更明智的交易决策。

问:如何连接到 Kraken WebSocket API?

答:连接 Kraken 的 WebSocket API 需要建立一个 WebSocket 连接。Kraken 的 WebSocket 服务器地址为 wss://ws.kraken.com 。建立连接后,您可以发送订阅消息以接收实时市场数据,例如价格、订单簿更新和交易信息。在建立连接之前,请务必参考 Kraken 的官方 API 文档,了解最新的连接规范、认证要求(如果需要)以及消息格式。

请注意 WebSocket 连接的稳定性和数据传输速率。根据您的应用场景,可能需要实现心跳机制来保持连接活跃,并处理潜在的连接中断情况。 为了确保数据安全,请始终通过 wss(WebSocket Secure)协议建立连接,该协议使用 TLS/SSL 加密来保护数据传输过程。

Kraken 的 WebSocket API 提供了多种交易对和数据类型供您选择。您可以根据自身需求,灵活地订阅不同的频道和数据流。在订阅之前,详细阅读 Kraken API 文档中的频道说明和数据结构,以便正确解析和处理接收到的数据。

问:如何订阅市场数据?

答:订阅市场数据需要通过发送特定格式的 JSON 消息来实现。该消息必须包含明确的字段,以便服务器能够正确识别和处理您的订阅请求。以下详细说明了构成订阅消息的各个字段及其含义。

一个有效的市场数据订阅消息必须包含以下三个关键字段: event pair subscription event 字段用于指定消息的类型,在本例中为 "subscribe",表明这是一个订阅请求。 pair 字段用于指定您希望订阅的市场交易对,例如 BTC/USD 或 ETH/BTC。 subscription 字段则用于定义具体的订阅内容,例如实时价格 (ticker)、深度数据 (depth) 或交易信息 (trades)。

以下是一个 JSON 消息示例,展示了如何订阅 BTC/USD 交易对的实时价格数据(即 ticker 数据):


{
  "event": "subscribe",
  "pair": ["XBT/USD"],
  "subscription": {
    "name": "ticker"
  }
}

在此示例中, event 字段设置为 "subscribe",表示这是一个订阅请求。 pair 字段包含一个数组,其中包含要订阅的交易对 "XBT/USD" (比特币/美元)。请注意,某些交易所使用 "XBT" 作为比特币的交易代码。 subscription 字段包含一个名为 "name" 的键,其值设置为 "ticker",表示您希望订阅该交易对的实时价格更新。

发送此 JSON 消息后,服务器将会向您推送 BTC/USD 交易对的实时价格数据。 不同的交易所可能支持不同的 subscription 名称,例如 "depth" 用于订阅订单簿深度数据,"trades" 用于订阅实时交易数据。请务必查阅您所使用的交易所的 API 文档,以了解其支持的订阅类型和相应的 subscription 名称, 以及它们对 pair 的格式要求(例如是使用["XBT/USD"]数组,还是"XBT/USD"字符串)。

某些交易所可能允许您在 pair 字段中指定多个交易对,以便一次性订阅多个市场的数据。 您只需在 pair 数组中添加多个交易对即可,例如 "pair": ["XBT/USD", "ETH/USD"]

问:如何处理 WebSocket 消息?

答:Kraken WebSocket API 采用 JSON(JavaScript Object Notation)格式实时推送数据。处理这些消息的第一步是建立稳定的 WebSocket 连接。成功连接后,服务器会根据您订阅的频道和事件类型,持续发送JSON格式的消息。您需要使用适当的JSON解析库,例如JavaScript中的`JSON.parse()`或Python中的`.loads()`,将接收到的字符串数据转换为程序可以处理的对象或字典。解析后的JSON对象通常包含`event`(事件类型)、`channel`(频道名称)、`data`(数据载荷)等字段。根据`event`字段的值(例如`systemStatus`、`subscriptionStatus`、`trade`、`ohlc`等),可以确定消息的具体类型和含义。例如,`trade`事件表示有新的交易发生,`data`字段会包含交易的价格、数量、时间戳等信息。您需要根据消息类型编写相应的处理逻辑,例如更新本地的订单簿、计算移动平均线、或触发警报等操作。需要注意的是,WebSocket连接可能会因为网络问题或其他原因中断,因此您需要实现重连机制,并在连接中断时妥善处理未完成的数据。同时,为了保证数据安全,建议对WebSocket连接进行加密,例如使用WSS(WebSocket Secure)协议。

6. 安全注意事项

问:如何保证 API 使用的安全性?

答:保障 API 使用的安全性至关重要,以下是一些关键建议,旨在降低潜在风险并维护数据完整性:

  • 妥善保管 API 密钥: API 密钥是访问 API 的凭证,绝对不能泄露给任何未经授权的第三方。将 API 密钥视为高度机密的密码,避免将其存储在公共代码库、配置文件或客户端应用程序中。使用环境变量或安全的密钥管理系统来存储和访问 API 密钥。
  • 使用最小权限原则: 在配置 API 密钥的权限时,仅授予应用程序执行其所需功能的最低权限。避免授予过多的权限,以降低潜在的安全风险。如果应用程序只需要读取数据,则不应授予写入权限。
  • 定期重置 API 密钥: 定期更换 API 密钥是预防安全漏洞的有效措施。即使密钥泄露,定期更换也能最大限度地减少潜在损害。考虑设置自动密钥轮换策略,以简化此过程。
  • 使用安全的网络连接: 始终通过 HTTPS 协议访问 API,确保数据在传输过程中进行加密。HTTPS 使用 SSL/TLS 协议对数据进行加密,防止数据被窃听或篡改。避免使用不安全的 HTTP 连接,尤其是在传输敏感数据时。
  • 验证 API 响应: 验证 API 响应的完整性,以防止数据篡改。可以使用数字签名或哈希函数来验证响应的真实性。确保响应来自可信的来源,并且没有被恶意篡改。
  • 监控 API 使用情况: 监控 API 使用情况,以便及时发现异常行为。例如,可以监控 API 请求的数量、频率和来源。如果发现异常活动,例如突然的请求量激增或来自未知 IP 地址的请求,立即采取行动。实施速率限制和请求配额,以防止 API 被滥用。
  • 了解 Kraken 的安全策略: 仔细阅读 Kraken 的安全策略,并遵守相关规定。Kraken 交易所拥有完善的安全措施,了解并遵守其安全策略有助于更好地保护您的 API 密钥和账户安全。关注 Kraken 的安全公告和更新,及时了解最新的安全威胁和防范措施。

7. 更多资源

问:在哪里可以找到更多关于 Kraken API 的信息?

答:您可以通过以下资源深入了解 Kraken API 的各项功能和使用方法:

  • Kraken API 文档: Kraken 官方网站是获取权威信息的首选途径。其 API 文档详细阐述了每个 API 端点的功能、请求参数的类型和含义(包括必选和可选参数)、以及各种响应格式的详细说明。您可以从中了解到如何构造有效的 API 请求,以及如何解析服务器返回的数据。务必仔细阅读,以便掌握 API 的完整细节。
  • Kraken API 社区: Kraken 拥有活跃的社区论坛,是与其他开发者交流经验、分享技巧、并解决开发难题的理想场所。在这里,您可以提出您在使用 API 过程中遇到的各种问题,并从经验丰富的开发者那里获得解答和建议。社区成员也经常分享他们自己编写的代码片段和实用工具,这对您学习和应用 Kraken API 将非常有帮助。
  • Kraken API 示例代码: 为了帮助开发者快速上手,Kraken 官方提供了一系列示例代码,涵盖了各种常见的 API 用例。这些示例代码通常使用多种编程语言编写(例如 Python、JavaScript、Java 等),方便不同背景的开发者学习和参考。通过阅读和运行这些示例代码,您可以快速了解如何使用 Kraken API 进行数据查询、交易下单、资金管理等操作。
  • Stack Overflow: Stack Overflow 是一个大型的程序员问答网站,上面汇集了大量的技术问题和解答。您可以在 Stack Overflow 上搜索关于 Kraken API 的问题,很可能找到其他开发者遇到的类似问题以及相应的解决方案。您也可以在 Stack Overflow 上提问,并获得来自全球各地开发者的帮助。在提问时,请尽量提供详细的问题描述和相关代码,以便其他开发者更好地理解您的问题。

希望这些资源能帮助您更全面地掌握 Kraken API,并顺利地开发出您需要的应用程序。