Kraken API 使用指南
Kraken 提供了一套强大的应用程序编程接口 (API),允许开发者以编程方式访问其交易平台并执行各种操作,例如获取市场数据、管理账户、下单交易等。本文将深入探讨 Kraken API 的使用方法,帮助你了解如何通过代码与 Kraken 平台进行交互。
API 概述
Kraken API 提供对 Kraken 加密货币交易所功能的编程访问,分为公共 API 和私有 API 两部分,满足不同用户的需求。
- 公共 API: 公共 API 无需进行身份验证,允许任何人访问,主要用于获取实时和历史市场数据。这包括但不限于交易对的详细信息(如交易代码、精度、交易费用等)、不同价格级别的市场深度(买单和卖单的挂单量)、以及最近发生的交易记录(包括价格、数量和时间戳)。公共 API 对于数据分析、机器人交易和市场监控至关重要。
- 私有 API: 私有 API 需要通过有效的 API 密钥进行身份验证,并且 API 密钥需要绑定相应的权限。它用于执行与用户账户直接相关的敏感操作,例如查询账户余额(包括可用余额和已占用余额)、提交和管理订单(包括市价单、限价单、止损单等各种订单类型)、取消未成交的订单、以及检索完整的交易历史记录(包括成交价格、手续费等详细信息)。使用私有 API 务必保证 API 密钥的安全,并采取必要的安全措施防止泄露。
API 密钥
要访问 Kraken 交易所的私有 API 并执行交易、查询账户信息等操作,你需要生成 API 密钥。API 密钥由一个公共密钥(Key)和一个私有密钥(Secret)组成。公共密钥用于识别你的请求,私有密钥用于对请求进行签名,以验证请求的真实性和完整性。
- 登录 Kraken 账户 :使用你的用户名和密码,通过 Kraken 官方网站或应用程序安全地登录你的 Kraken 账户。启用双因素身份验证(2FA)是强烈推荐的安全措施。
- 导航到 API 设置 :成功登录后,在账户仪表板或设置菜单中找到 "API"、"API 设置" 或类似的选项。这个选项通常位于账户安全或高级设置部分。
-
生成 API 密钥
:点击 "Generate API Key" 或类似的按钮,开始创建新的 API 密钥对。Kraken 会要求你为该密钥对设置权限。这是一个关键步骤,你需要仔细考虑你的应用程序需要哪些权限。例如,如果你只需要读取市场数据,则只需授予 "读取市场数据" 权限。如果你需要执行交易,则需要授予 "交易" 权限。务必遵守最小权限原则,只授予你的应用程序所需的最小权限集,以最大限度地降低账户风险。可配置的权限包括:
- 查询账户余额 :允许你的应用程序查询你的账户余额。
- 查询交易历史 :允许你的应用程序访问你的交易历史记录。
- 下单/取消订单 :允许你的应用程序执行交易操作,包括下单和取消订单。
- 提现 :允许你的应用程序从你的账户提现资金(强烈建议禁用此权限,除非你的应用程序绝对需要)。
- 读取市场数据 :允许你的应用程序获取实时市场数据,如价格、交易量等。
- 保存密钥 :生成 API 密钥后,Kraken 会显示你的公共密钥(Key)和私有密钥(Secret)。**务必立即妥善保存这两个密钥,尤其是私有密钥(Secret)。私有密钥只会显示一次,并且丢失后无法恢复。** 将其保存在安全的地方,例如密码管理器或加密的文本文件中。如果你丢失了私有密钥,你将需要重新生成一个新的 API 密钥对,并更新你的应用程序配置。请注意,不要将你的 API 密钥(尤其是私有密钥)泄露给任何其他人或将其提交到公共代码仓库中,否则你的账户可能会面临安全风险。建议使用环境变量或配置文件来存储 API 密钥,并确保这些文件不被意外提交到版本控制系统中。 密钥丢失后,请立即删除旧的密钥对并生成新的密钥对。
API 端点
Kraken API 的 URL 根地址为
https://api.kraken.com
。所有与 Kraken API 的交互,都将此根地址作为基础,然后附加特定的 API 端点,以访问所需的功能和服务。在构建 API 请求时,请务必使用正确的根地址,否则将无法成功连接到 Kraken 的 API 服务器。
-
公共 API 端点
:位于
/0/public/
目录下,用于访问不需要用户身份验证的公开数据。这些端点提供关于市场、交易对、交易历史等信息的访问权限。例如,获取交易对信息的端点是/0/public/AssetPairs
,通过此端点,您可以检索 Kraken 平台上所有可用交易对的详细信息,如交易对名称、交易对对应的资产信息、价格精度等。其他常用的公共 API 端点还包括获取市场深度(/0/public/Depth
)、最近交易记录(/0/public/Trades
)和资产信息(/0/public/Assets
)。 -
私有 API 端点
:位于
/0/private/
目录下,用于执行需要用户身份验证的操作,例如交易、查询余额、提现等。访问这些端点需要提供有效的 API 密钥和签名,以确保安全性。例如,查询余额的端点是/0/private/Balance
,通过此端点,用户可以查询其 Kraken 账户中各种加密货币和法币的余额。为了安全地使用私有 API 端点,务必妥善保管您的 API 密钥,并使用安全的编程实践来防止密钥泄露。其他重要的私有 API 端点包括下单(/0/private/AddOrder
)、取消订单(/0/private/CancelOrder
)和获取订单历史(/0/private/QueryOrders
)。
API 请求
Kraken API 采用标准的 HTTP 请求方法,例如
GET
和
POST
。 这些方法定义了客户端与服务器交互的方式,用于检索或发送数据。理解这些方法对于有效地使用 Kraken API 至关重要。
-
公共 API 请求
:这些请求用于访问不需要用户身份验证的公开数据,例如市场行情、交易对信息和服务器时间。 通常,公共 API 请求使用
GET
方法,参数通过 URL 查询字符串传递。 这种方式允许将参数附加到 URL 后面,以便指定请求的特定数据。 例如,请求特定交易对的市场数据可能需要在 URL 中包含交易对的名称。 -
私有 API 请求
:私有 API 用于访问需要用户身份验证的敏感数据,例如账户余额、交易历史和下单/撤单功能。 由于涉及到用户资金和账户信息,私有 API 请求必须使用
POST
方法,参数通过请求体传递。 使用POST
方法可以更安全地传输敏感数据,防止数据暴露在 URL 中。 私有 API 请求还需要添加一些额外的头部信息,用于身份验证。 这些头部信息通常包括 API 密钥和签名,用于验证请求的来源和完整性,确保只有授权用户才能访问私有 API。 安全的身份验证机制对于保护用户资产至关重要。
身份验证
为了保障私有 API 请求的安全性,你需要使用 API 密钥进行身份验证。身份验证是访问私有 API 的必要步骤,以下是详细的验证过程:
-
构建规范化请求数据
:收集所有需要发送的请求参数,包括查询参数和请求体中的参数。然后,严格按照参数名称的字母顺序对这些参数进行排序。将排序后的参数及其对应的值连接成一个单一的字符串。请务必确保连接过程中没有多余的空格或其他分隔符。例如,如果参数是
amount=10&symbol=BTC&type=buy
,排序后连接的字符串应为amount10symbolBTCtypebuy
。 - 计算 HMAC-SHA512 签名 :使用你的私钥(Secret Key)作为密钥,对上一步中构建的规范化请求数据字符串进行 HMAC-SHA512 哈希计算。HMAC-SHA512 是一种消息认证码算法,它结合了哈希函数(SHA512)和密钥,用于验证数据的完整性和来源。请使用标准的 HMAC-SHA512 算法库来生成签名,确保签名的准确性。不同的编程语言和平台都有相应的库可以使用。
-
添加 HTTP 头部信息
:在发送 HTTP 请求时,需要在请求头部中添加以下两个自定义头部字段:
-
API-Key
: 这是你的公共 API 密钥(Public Key),用于标识你的身份。这个密钥应该安全地存储,并在每次 API 请求时使用。 -
API-Sign
: 这是上一步计算得到的 HMAC-SHA512 签名。服务器将使用你的私钥和接收到的请求数据重新计算签名,并与你提供的API-Sign
进行比较。如果两者匹配,则验证通过,否则请求将被拒绝。
-
示例代码 (Python)
以下是一个使用 Python 访问 Kraken 私有 API 的示例代码,用于查询账户余额。此示例展示了如何通过 API 密钥和私钥进行身份验证,并发送请求以获取账户信息。
import hashlib import hmac import time import urllib.parse import requests import base64
API KEY = "YOUR API KEY" # 替换为你的 Kraken API 密钥。确保妥善保管此密钥,切勿泄露。 API SECRET = "YOUR API SECRET" # 替换为你的 Kraken API 私钥。私钥是访问私有 API 的关键,请务必安全存储。
def get kraken signature(urlpath, data, secret): """ 生成 Kraken API 请求的签名。 Args: urlpath (str): API 端点路径。 data (dict): 请求参数。 secret (str): API 私钥。 Returns: str: 生成的签名。 """ postdata = urllib.parse.urlencode(data) encoded = (urlpath + postdata).encode() message = hashlib.sha256(encoded).digest() mac = hmac.new(base64.b64decode(secret), message, hashlib.sha512) sigdigest = base64.b64encode(mac.digest()) return sigdigest.decode()
def kraken request(uri path, data=None, api key=None, api sec=None): """ 向 Kraken API 发送请求。 Args: uri_path (str): API 端点路径。 data (dict, optional): 请求参数。默认为 None。 api_key (str, optional): API 密钥。默认为 None。 api_sec (str, optional): API 私钥。默认为 None。 Returns: requests.Response: API 响应对象。 """ headers = {} if data is None: data = {}
if api_key and api_sec:
# 添加 nonce 以防止重放攻击。Nonce 是一个必须每次请求都不同的值。
data["nonce"] = str(int(time.time() * 1000))
urlpath = "/" + uri_path
# 生成 API 签名
signature = get_kraken_signature(urlpath, data, api_sec)
# 设置请求头,包含 API 密钥和签名
headers = {
"API-Key": api_key,
"API-Sign": signature
}
# 发送 POST 请求到 Kraken API
req = requests.post(
("https://api.kraken.com" + urlpath),
headers=headers,
data=data
)
return req
# 示例用法:查询账户余额 # response = kraken_request('0/private/Balance', api_key=API_KEY, api_sec=API_SECRET) # if response.status_code == 200: # print(response.()) # else: # print(f"请求失败,状态码: {response.status_code}, 错误信息: {response.text}")
Example usage: Get Account Balance
Retrieving your account balance from the Kraken exchange requires a secure API request. The following Python code snippet demonstrates how to achieve this using your API key and secret.
def get_balance():
resp = kraken_request(
'0/private/Balance',
api_key=API_KEY,
api_sec=API_SECRET
)
if resp.status_code == 200:
return resp.()
else:
return f"Error: {resp.status_code} - {resp.text}"
The
get_balance()
function sends a POST request to the
'0/private/Balance'
endpoint. Crucially, it includes your
API_KEY
and
API_SECRET
for authentication. A successful response (status code 200) returns a JSON object containing your account balance. Failure to authenticate or other errors will result in an error message indicating the status code and a description of the issue. Remember to securely store and manage your API key and secret to prevent unauthorized access to your account.
balance = get_balance()
print(balance)
This code snippet calls the
get_balance()
function and prints the returned value, displaying your current account balance or any error messages that occur. The balance data is structured as a JSON object, providing a detailed breakdown of your holdings in different assets.
代码说明:
-
导入必要的库
:代码段开始时,通过
import
语句引入了几个必要的 Python 库。hashlib
提供了多种哈希算法,在本例中用于 SHA-512 加密。hmac
库用于消息认证码的生成,即 HMAC-SHA512 签名。time
库用于获取当前时间戳,虽然在此示例中未使用,但通常在 API 请求中用于生成 nonce(一次性随机数),防止重放攻击。urllib.parse
库用于处理 URL,尤其是对请求参数进行编码。requests
库则用于发送 HTTP 请求,简化了与 Kraken API 的交互。 -
设置 API 密钥和私钥
:为了进行身份验证,你需要提供 API 密钥和私钥。务必将代码中的占位符
YOUR_API_KEY
和YOUR_API_SECRET
替换为你从 Kraken 交易所获得的实际密钥。API 密钥用于标识你的身份,而私钥则用于生成请求的签名,以确保请求的完整性和真实性。请妥善保管你的私钥,切勿泄露给他人,避免资产损失。 -
get_kraken_signature
函数 :此函数是生成 Kraken API 请求签名的关键。它接收urlpath
(API 端点路径)、data
(请求数据)和secret
(API 私钥)作为参数。使用私钥对nonce
(通常为时间戳或其他随机数)加上请求数据进行 HMAC-SHA512 加密。然后,对加密结果进行 Base64 解码。返回解码后的签名。此签名将作为 HTTP 头部信息的一部分发送给 Kraken 服务器。 -
kraken_request
函数 :该函数负责构造并发送 API 请求。它接收uri_path
(API 端点路径)、data
(请求数据)和api_key
(API 密钥)作为参数。调用get_kraken_signature
函数生成签名。然后,构造包含签名的 HTTP 头部信息,例如API-Key
和API-Sign
。使用requests.post
方法发送 POST 请求到指定的 API 端点,并将头部信息和数据一起发送。函数返回 Kraken 服务器的响应。 -
get_balance
函数 :此函数专门用于获取账户余额。它调用kraken_request
函数,并传递 Kraken API 的/0/private/Balance
端点路径和空数据字典。kraken_request
函数将处理身份验证和请求发送,并将 Kraken 服务器返回的账户余额数据返回给get_balance
函数。 -
打印结果
:代码调用
get_balance
函数获取账户余额,并将结果打印到控制台。通常,结果会以 JSON 格式返回,包含各种加密货币的余额信息。你可以根据需要解析 JSON 数据,并提取特定加密货币的余额。
错误处理
Kraken API 的响应采用 JSON 格式进行数据传输。当 API 请求成功执行后,服务器会返回一个包含
result
字段的 JSON 对象。
result
字段的内容是根据请求的不同操作而返回的实际数据,例如交易信息、账户余额或市场数据。然而,当 API 请求因任何原因失败时,服务器将返回一个包含
error
字段的 JSON 对象。
error
字段则详细说明了导致请求失败的原因,它可能包含一个或多个错误信息。
在开发与 Kraken API 交互的应用程序时,必须实现完善的错误处理机制,以确保程序能够优雅地处理各种潜在的 API 调用失败情况。这样做能够提升应用程序的健壮性和用户体验。
建议在代码中,首先检查 HTTP 响应的状态码
resp.status_code
,确保其值为 200,这表示 HTTP 请求已成功完成。如果状态码不是 200,则表明 HTTP 请求本身可能出现了问题,例如网络错误、服务器错误等。
在确认 HTTP 请求成功后,接下来需要检查响应 JSON 对象中是否存在
error
字段。如果存在,则应进一步解析
error
字段的内容,从中提取出具体的错误信息。这些错误信息可以帮助开发者了解 API 请求失败的根本原因,并采取相应的纠正措施。例如,如果错误信息表明 API 密钥无效,则应提示用户检查并更新其 API 密钥。如果错误信息表明请求参数格式不正确,则应提示用户检查并修改其请求参数。
速率限制
Kraken API 实施了速率限制机制,旨在防止恶意滥用行为,保障服务器稳定运行并为所有用户提供公平的服务。具体的速率限制策略取决于您的账户验证级别以及您所访问的特定 API 端点。不同等级的账户通常会拥有不同的请求配额和频率上限。当您的请求频率超过了允许的速率限制时,API 服务器会返回一个错误代码,表明您已触发速率限制。此时,您需要暂停发送请求,并等待一段预定的时间间隔后才能重新尝试。
在开发基于 Kraken API 的应用程序或交易机器人时,务必将速率限制因素纳入考量。最佳实践包括:避免在短时间内向 API 服务器发送过多的请求,合理规划请求的发送频率。为了提高程序的健壮性,建议实现一种重试机制,当程序遇到速率限制错误时,可以自动等待一段时间,然后重新发送请求。这种机制可以有效应对瞬时流量高峰或网络波动,从而降低因速率限制导致的程序中断风险。还可以采用缓存技术,将频繁请求的数据缓存在本地,减少对 API 服务器的直接访问。
其他注意事项
- 安全性 :在加密货币交易中,安全性至关重要。请务必将你的 Kraken API 密钥和私钥视为最高机密,并采取一切必要措施来妥善保管它们。切勿将这些敏感信息泄露给任何第三方,包括朋友、同事,甚至 Kraken 的客服人员。考虑使用硬件安全模块 (HSM) 或多重签名方案来进一步加强密钥的保护。定期轮换你的 API 密钥,并监控 API 密钥的使用情况,以便及时发现潜在的安全风险。同时,务必启用 Kraken 账户的双因素认证 (2FA),以增加额外的安全保障。
- API 文档 :Kraken 提供了全面且详尽的 API 文档,这是你成功使用 Kraken API 的关键资源。API 文档详细描述了所有可用的 API 端点,包括交易、市场数据、账户管理等。针对每个端点,文档会清晰地说明所需的参数、参数类型、以及可能的取值范围。API 文档还提供了 API 响应格式的详细说明,包括数据结构、字段含义和错误代码。务必仔细阅读并理解 API 文档,以便能够正确地构建 API 请求,并有效地解析 API 响应。Kraken API 文档通常还包含示例代码,可以帮助你快速上手。
- 更新 :Kraken API 并非一成不变,它会定期进行更新和更改,以提升性能、增强安全性,或添加新的功能。这些更新可能会影响你的应用程序的正常运行。因此,定期关注 Kraken 的官方公告至关重要。Kraken 通常会通过其官方网站、博客、社交媒体渠道和 API 邮件列表发布 API 更新信息。务必订阅这些渠道,以便及时了解 API 的最新动态。在 Kraken 发布 API 更新后,请仔细阅读更新说明,了解更新内容以及可能对你的应用程序产生的影响。必要时,你需要及时修改你的应用程序代码,以确保其与最新的 API 版本兼容。避免使用已弃用的 API 端点或参数,以免影响你的应用程序的稳定性和安全性。
通过本文的介绍,相信你已经对 Kraken API 的使用方法有了一个初步的了解。Kraken API 提供了强大的功能,可以让你轻松地与 Kraken 交易所进行交互。你可以利用 Kraken API 开发出各种有用的应用程序,例如自动化交易机器人,可以根据预设的交易策略自动执行交易;市场数据分析工具,可以实时收集和分析市场数据,帮助你做出更明智的投资决策;以及账户管理工具,可以方便地管理你的 Kraken 账户,包括查询余额、查看交易历史等。希望你能充分利用 Kraken API 的强大功能,创造出更多有价值的应用程序。