Kraken API 接口使用指南
Kraken 是一家知名的加密货币交易所,提供了一套全面的 API (Application Programming Interface) 允许开发者与他们的平台进行交互,执行各种操作,例如获取市场数据、下单交易、管理账户等等。本文将深入探讨如何使用 Kraken API 接口,并提供一些示例代码片段来帮助你入门。
理解 Kraken API 的组成
Kraken API 主要分为两大类,分别服务于不同的用户需求和安全级别:
-
Public API (公共 API):
这类API无需任何形式的身份验证即可访问,它们的主要职责是提供实时的和历史的市场数据,包括但不限于:
- 交易对信息: 详细描述 Kraken 交易所支持的各种加密货币交易对,例如比特币/美元 (BTC/USD)、以太坊/欧元 (ETH/EUR) 等,并提供每个交易对的交易规则和限制。
- 市场数据: 提供每个交易对的实时价格信息,包括买入价、卖出价、最高价、最低价、成交量等关键指标,帮助用户了解市场动态。
- 订单簿: 展示当前市场上未成交的买单和卖单,提供市场深度信息,帮助用户评估市场的流动性和潜在的交易机会。
- 近期交易: 提供最近发生的交易记录,包括交易价格、交易数量和交易时间,帮助用户分析市场趋势和交易活动。
- 数据分析: 用于收集历史交易数据,进行量化分析、回溯测试,并开发交易策略。
- 价格监控: 用于实时监控市场价格,设置价格提醒,并在达到预设条件时触发交易信号。
- 信息聚合: 用于将 Kraken 的市场数据整合到第三方平台或应用程序中,为用户提供更全面的市场信息。
-
Private API (私有 API):
相反,私有 API 需要严格的身份验证机制才能访问,它允许用户执行涉及到账户安全和资金操作的敏感操作。使用私有 API 前,用户必须生成并安全地保管 API 密钥和私钥,并对API密钥进行权限配置:
- 交易执行: 允许用户提交、修改和取消各种类型的订单,例如市价单、限价单、止损单等,从而实现自动交易。
- 账户管理: 允许用户查询账户余额、交易历史、订单状态等信息,方便用户管理自己的账户。
- 资金提取: 允许用户将资金从 Kraken 账户提取到其他钱包或银行账户,但需要进行额外的安全验证。
- 限制 API 密钥的权限: 只授予 API 密钥执行必要操作的权限,避免授予过多的权限。
- 使用 IP 白名单: 限制 API 密钥只能从指定的 IP 地址访问,防止未经授权的访问。
- 定期更换 API 密钥: 定期更换 API 密钥,降低密钥泄露的风险。
获取 API 密钥
要使用 Kraken 的 Private API 进行自动化交易、数据分析或其他需要账户权限的操作,你需要在 Kraken 账户中创建 API 密钥对。API 密钥由公钥 (API Key) 和私钥 (Private Key) 组成,类似于用户名和密码,用于验证你的身份并授权访问你的账户。
- 登录 Kraken 账户: 访问 Kraken 官方网站 (通常是 kraken.com) 并使用你的用户名和密码进行登录。确保你使用的是 Kraken 的官方域名,并验证 SSL 证书的有效性,以防止钓鱼攻击。
- 导航至 API 设置: 登录后,在账户设置中找到 "API" 或 "Security" 部分。具体的菜单名称可能因 Kraken 界面的更新而有所不同,但通常可以在用户设置或安全设置下找到 "API Key Management" 选项。
- 创建新的 API 密钥: 点击 "Generate New Key" 或类似的按钮,开始创建新的 API 密钥对。Kraken 可能会要求你进行二次验证 (2FA),以确保账户安全。
-
配置权限:
为你的 API 密钥设置所需的权限是至关重要的步骤。仔细阅读每个权限的描述,并只授予 API 密钥执行特定任务所需的最小权限集。常见的权限包括:
- "Query Funds" (查询资金): 允许 API 密钥查询账户中的资金余额。
- "Trade" (交易): 允许 API 密钥进行买卖交易。
- "Withdraw" (提款): 允许 API 密钥从你的 Kraken 账户中提款。
- "Query Ledger": 允许 API 密钥查询交易历史记录。
- "Query Orders": 允许 API 密钥查询未完成和已完成的订单。
- 保存密钥: 创建密钥后,系统会显示你的 API 密钥 (公钥) 和私钥。 务必将私钥妥善保存,不要泄露给任何人。 Kraken 只会显示私钥一次,不会再次显示。你应该将私钥存储在安全的地方,例如加密的数据库、密钥管理系统或硬件钱包中。如果私钥泄露,任何人都可以使用它来访问你的 Kraken 账户。
使用 Public API 获取市场数据
通过 Kraken 交易所提供的 Public API,开发者可以轻松获取各种加密货币的市场数据。 该 API 基于 HTTP 协议,只需向指定的 API 端点发送请求即可获得数据。 API 响应通常采用 JSON 格式,易于解析和使用。以下示例展示了如何使用 Python 编程语言获取比特币/美元 (BTC/USD) 交易对的实时价格信息:
import requests
def get_btc_usd_price():
"""
从 Kraken API 获取 BTC/USD 交易对的最新价格。
"""
url = "https://api.kraken.com/0/public/Ticker?pair=XBTUSD" # XBTUSD 是 Kraken 交易所中 BTC/USD 交易对的交易代码。请注意,交易代码可能因交易所而异。
try:
response = requests.get(url)
response.raise_for_status() # 检查 HTTP 响应状态码,如果请求失败(例如,返回 404 或 500 错误),则抛出 HTTPError 异常。
data = response.()
if data["error"]:
print("API Error:", data["error"])
return None
# 解析 API 响应数据
# Kraken API 返回的 JSON 结构中,"result" 字段包含了请求的数据。
# "XXBTZUSD" 是 Kraken 交易所中 BTC/USD 交易对的特定标识符,可能需要根据实际情况进行调整。
ticker_data = data["result"]["XXBTZUSD"]
# "c" 字段代表当前价格,它是一个包含多个值的列表,其中 [0] 表示最新成交价格。
current_price = ticker_data["c"][0]
print(f"BTC/USD Price: {current_price}")
return current_price
except requests.exceptions.RequestException as e:
# 捕获请求过程中可能发生的任何异常,例如网络连接错误、超时等。
print(f"Request Error: {e}")
return None
if data["error"]:
print("API Error:", data["error"])
return None
# 解析响应数据
ticker_data = data["result"]["XXBTZUSD"] # 注意交易对代码可能需要根据实际情况调整
current_price = ticker_data["c"][0] # "c" 代表当前价格,[0] 表示最新价格
print(f"BTC/USD Price: {current_price}")
return current_price
except requests.exceptions.RequestException as e:
print(f"Request Error: {e}")
return None
if __name__ == "__main__":
get_btc_usd_price()
在这个 Python 示例中,我们使用了
requests
库发送一个 HTTP GET 请求到
/0/public/Ticker
API 端点。
pair=XBTUSD
参数指定了我们想要获取的交易对信息,即比特币/美元 (BTC/USD)。API 返回的数据是一个 JSON 对象,需要对其进行解析以提取所需的实时价格信息。请注意,实际应用中,应根据交易所的 API 文档调整交易对代码和数据解析方式,并进行适当的错误处理和异常捕获,以确保程序的健壮性。
使用 Private API 进行交易
使用 Kraken Private API 进行交易需要进行身份验证,这是为了保障账户安全和交易的合法性。身份验证的核心在于创建一个签名,该签名利用你的 API 私钥对请求参数进行加密处理。这个过程确保了只有拥有私钥的用户才能发起交易,防止未经授权的访问。以下是一个使用 Python 编程语言,通过 Kraken 的 Private API 以限价方式买入 BTC/USD 交易对的详细示例:
import requests
import hashlib
import hmac
import time
import urllib.parse
import base64
API_KEY = "YOUR_API_KEY" # 请务必替换为你的真实 API 密钥
API_SECRET = "YOUR_API_SECRET" # 请务必替换为你的真实 API 私钥
def kraken_request(uri_path, data, api_key, api_sec):
"""向 Kraken 私有 API 发送身份验证请求"""
postdata = urllib.parse.urlencode(data)
encoded = (uri_path + hashlib.sha256(postdata.encode()).digest()).encode()
signature = hmac.new(base64.b64decode(api_sec), encoded, hashlib.sha512)
sigdigest = base64.b64encode(signature.digest()).decode()
headers = {
'API-Key': api_key,
'API-Sign': sigdigest
}
url = "https://api.kraken.com" + uri_path
try:
response = requests.post(url, headers=headers, data=data)
response.raise_for_status() # 检查 HTTP 状态码,如果不是 200 OK 则抛出异常
return response.() # 将响应解析为 JSON 格式
except requests.exceptions.RequestException as e:
print(f"Request Error: {e}")
return None
def place_limit_buy_order(pair, volume, price):
"""以指定的限价单价格买入指定数量的交易对"""
data = {
"nonce": str(int(time.time() * 1000)), # 使用当前时间戳生成唯一 nonce 值,防止重放攻击
"pair": pair,
"type": "buy",
"ordertype": "limit",
"price": str(price),
"volume": str(volume)
}
uri_path = "/0/private/AddOrder"
response_data = kraken_request(uri_path, data, API_KEY, API_SECRET)
if response_data and not response_data["error"]:
print("Order placed successfully!")
print(response_data)
else:
print("Order failed!")
if response_data:
print(response_data["error"])
if __name__ == "__main__":
# 示例:以 30000 美元的价格买入 0.01 BTC
pair = "XBTUSD" # 交易对,例如 "XBTUSD" 代表比特币/美元
volume = 0.01 # 交易数量,例如 0.01 代表 0.01 个比特币
price = 30000.0 # 限价价格,例如 30000.0 代表 30000 美元
place_limit_buy_order(pair, volume, price)
在这个示例中,我们详细地展示了如何使用 Kraken 的 Private API 进行限价买单。以下是步骤分解,其中重点介绍每个步骤的目的和所涉及的技术细节:
-
构建请求参数:
创建一个包含交易所需参数的字典。
nonce
参数至关重要,它是一个时间戳,用于防止重放攻击。pair
定义交易的货币对(例如,XBTUSD)。type
指定订单类型(“buy” 或 “sell”)。ordertype
定义更具体的订单类型,如 “limit”(限价单)或 “market”(市价单)。price
设置限价单的价格,只有当市场价格达到或低于此价格时,订单才会被执行。volume
设置要购买或出售的资产数量。 -
生成签名:
使用你的 API 私钥对请求进行哈希加密,生成一个唯一的签名。这个过程涉及到使用
hmac
(Keyed-Hashing for Message Authentication) 和hashlib
库。使用 SHA256 算法对请求数据进行哈希处理。然后,使用 HMAC-SHA512 算法,结合你的私钥,对哈希后的数据进行签名。 这个签名被包含在请求头中,用于验证请求的真实性和完整性。 -
设置请求头:
为了通过身份验证,需要将 API 密钥和生成的签名添加到 HTTP 请求头中。
API-Key
头部包含你的 API 公钥,用于标识你的账户。API-Sign
头部包含之前生成的签名,用于验证请求的合法性。 -
发送 POST 请求:
使用
requests
库发送一个 HTTPS POST 请求到 Kraken API 的/0/private/AddOrder
端点。确保使用 HTTPS 以加密通信,保护你的 API 密钥和交易数据。 -
处理响应:
接收到 API 的响应后,解析 JSON 格式的响应数据。检查
error
字段,如果为空,则表示订单已成功提交。如果error
字段包含错误信息,则表示订单提交失败,你需要根据错误信息进行调试和修复。 成功的订单响应通常会包含订单的 ID 和其他相关信息。
错误处理
在使用 Kraken API 进行交易或数据查询时,可能会遇到各种错误。 对这些错误进行周全的检测和处理至关重要,这能确保你的应用程序能够平稳、可靠地运行,并提供及时的反馈给用户。 Kraken API 使用 JSON(JavaScript 对象表示法)格式返回错误信息,便于解析和处理。每个API响应中,应当仔细检查
error
字段,该字段包含了关于错误的详细信息,例如错误代码和文字描述,这些信息能帮助开发者快速定位问题根源。
错误处理不仅涉及捕获错误,还包括理解错误的含义,并采取适当的措施来解决这些错误。例如,对于余额不足的错误,可以提示用户充值;对于API密钥无效的错误,可以引导用户检查密钥配置。良好的错误处理机制能够提升用户体验,并减少因错误导致的交易失败或数据丢失。
- Invalid API key: API 密钥无效或已过期。这可能是由于密钥输入错误、权限配置不当,或者密钥已被Kraken禁用。请确保API密钥正确无误,并且拥有执行所需操作的权限。同时,检查API密钥是否已过期,如果过期,需要重新生成新的API密钥。
- Incorrect signature: 请求签名不正确。Kraken API 使用签名来验证请求的真实性和完整性。签名不正确通常是由于签名算法实现错误、时间戳偏差过大,或者使用了错误的密钥。请仔细检查签名算法的实现,并确保时间戳与Kraken服务器的时间同步。
- Insufficient funds: 账户余额不足,无法完成交易。在下单前,务必检查账户余额是否足够支付交易所需的费用,包括交易金额和手续费。可以使用 Kraken API 提供的查询余额的接口,实时获取账户余额信息。
- Order minimum not met: 订单金额低于最低要求。Kraken 对于不同的交易对设置了不同的最低订单金额。在下单前,请查阅 Kraken API 文档或交易平台信息,了解当前交易对的最低订单金额要求。
安全注意事项
在使用 Kraken API 进行加密货币交易和数据访问时,安全性是至关重要的。API 密钥一旦泄露,可能导致资金损失和账户被盗用。以下是一些经过实践验证的安全建议,旨在帮助您最大限度地保护您的 Kraken 账户和 API 密钥:
- API 密钥和私钥的绝对保密性至关重要。 永远不要将您的 API 密钥和私钥硬编码到应用程序的代码中,避免将它们提交到公共代码仓库(如 GitHub),也不要通过不安全的渠道(如电子邮件或即时消息)共享给他人。考虑使用环境变量、配置文件或安全的密钥管理系统(例如 HashiCorp Vault)来安全地存储和访问这些敏感凭据。
- 最小权限原则是 API 安全的基础。 在创建 API 密钥时,只授予执行特定任务所需的最低权限。例如,如果您的应用程序只需要读取市场数据,则不要授予提款或交易权限。Kraken API 提供了细粒度的权限控制,请务必仔细审查并选择最适合您需求的权限。
-
强制使用 HTTPS 加密所有 API 通信。
确保您的应用程序始终使用 HTTPS 协议(TLS/SSL 加密)与 Kraken API 进行通信。HTTPS 可以防止中间人攻击,并保护您的 API 密钥和数据在传输过程中免受窃听和篡改。检查您的代码,确保所有 API 请求都以
https://api.kraken.com
开头。 - 定期审查 API 密钥的使用情况和权限设置。 定期检查您的 Kraken 账户中 API 密钥的活动日志,监控是否存在任何异常或未经授权的活动。如果您发现任何可疑行为,立即撤销受影响的 API 密钥并创建一个新的。同时,定期审查 API 密钥的权限设置,确保它们仍然符合您的应用程序的需求,并删除不必要的权限。
- 启用双重验证 (2FA) 是保护 Kraken 账户的关键措施。 启用双重验证可以显著提高您的 Kraken 账户的安全性,即使您的密码泄露,攻击者也需要提供额外的验证码才能访问您的账户。强烈建议您使用基于时间的一次性密码 (TOTP) 的 2FA 应用程序,例如 Google Authenticator 或 Authy。
希望这些安全建议能够帮助您安全地使用 Kraken API 接口。 为了全面了解 API 的所有功能、限制和最佳实践,请务必仔细阅读 Kraken API 的官方文档,并关注 Kraken 官方的安全公告和更新。