想用 Kraken API 自动化交易?新手快速上手指南!
使用 Kraken API 进行自动化交易操作
简介
Kraken 是全球领先且历史悠久的加密货币交易所之一,以其安全性和多样化的交易服务而闻名。Kraken 不仅提供现货交易,还支持杠杆交易、期货交易以及场外交易(OTC)服务,满足不同风险偏好的投资者需求。其核心优势在于提供了强大而全面的 API(应用程序编程接口),允许用户通过程序化方式访问和管理其账户,进行自动化交易,并获取市场数据。
通过 Kraken API,开发者和交易者可以构建定制化的交易解决方案,例如自动化交易机器人、市场数据分析工具和投资组合管理系统。API 提供了广泛的功能,涵盖了账户管理、订单管理、市场数据获取、资金划转等各个方面。使用 API 可以显著提高交易效率,降低人为操作失误,并实现更复杂的交易策略。
本文将深入探讨如何有效利用 Kraken API 进行自动化交易操作。我们将详细介绍如何生成和管理 API 密钥,这是访问 API 的关键步骤。然后,我们将介绍一些常用的 API 接口及其使用方法,例如获取账户余额、提交订单、查询订单状态、以及获取实时市场数据。我们还将提供一些实际的应用示例,展示如何使用 API 构建简单的交易机器人,并实现一些基本的自动化交易策略。通过本文的学习,读者将能够掌握使用 Kraken API 进行自动化交易的基本技能,并为构建更复杂的交易系统奠定基础。
准备工作
在使用 Kraken API 之前,需要进行一些准备工作,以确保您可以安全且有效地访问和使用 Kraken 交易所提供的各项功能。
- 注册 Kraken 账户: 如果您还没有 Kraken 账户,请前往 Kraken 官网( https://www.kraken.com/ )注册一个账户。完成注册后,务必按照 Kraken 的要求完成身份验证 (KYC)。KYC 流程通常包括提供身份证明文件、地址证明等信息,以符合监管要求并提高账户安全性。未完成 KYC 验证的账户可能无法使用全部 API 功能。
-
生成 API 密钥:
登录您的 Kraken 账户,进入“安全” -> “API” 页面。点击“生成新密钥”按钮,系统将引导您创建一个新的 API 密钥对。在创建密钥时,您需要设置相应的权限,以控制该密钥可以访问的 API 功能。
- 重要提示: 请务必谨慎设置 API 密钥的权限,只授予必要的权限。例如,如果您只需要读取市场数据,则仅授予“读取数据”权限。如果您需要进行交易,则授予“交易”权限。强烈建议避免授予“提币”等敏感权限,以最大限度地降低账户被盗用的风险。创建密钥时,强烈建议启用 Two-Factor Authentication (2FA) 认证,为您的 API 密钥增加一层额外的安全保护。2FA 可以使用 Google Authenticator、Authy 等应用程序生成动态验证码,确保即使 API 密钥泄露,未经 2FA 验证的请求也无法通过。同时,定期审查并更新您的 API 密钥权限,可以进一步提高账户安全性。
-
选择编程语言和库:
选择您熟悉的编程语言,例如 Python、JavaScript、Java、C# 等。 对于每种语言,都有相应的 Kraken API 库可供使用,这些库可以简化与 Kraken API 的交互,并提供更友好的接口。 例如,Python 中常用的库包括
krakenex
、ccxt
(CryptoCurrency eXchange Trading Library) 和python-kraken-sdk
。ccxt
是一个更通用的加密货币交易库,支持许多交易所,而krakenex
和python-kraken-sdk
则是专门为 Kraken API 设计的。选择合适的库取决于您的项目需求和个人偏好。 -
安装必要的库:
使用您选择的编程语言的包管理器安装相应的 Kraken API 库。 例如,在 Python 中,可以使用 pip 安装
krakenex
:bash pip install krakenex
如果您选择使用
ccxt
,则可以使用以下命令安装:bash pip install ccxt
在安装完成后,您可以在您的 Python 代码中导入这些库,并使用它们提供的函数来调用 Kraken API。 确保您使用的库是最新的版本,以便获得最新的功能和安全补丁。
常用 API 接口
Kraken API 提供了全面的功能,通过多种接口,用户可以访问账户信息,实时掌握市场数据,并进行高效的交易下单。以下将详细介绍一些在加密货币交易中常用的 API 接口,帮助开发者更好地理解和使用 Kraken API:
- 账户信息接口: 此类接口允许用户查询账户余额、交易历史、持仓情况等敏感信息。在调用这些接口时,务必确保使用安全的身份验证方法,例如 API 密钥对,并严格控制密钥的访问权限,防止未经授权的访问。需要注意 Kraken API 的调用频率限制,避免因频繁请求而被限制访问。
- 市场数据接口: 市场数据接口提供实时的交易对价格、交易量、深度数据等信息。这些数据对于量化交易策略的开发至关重要。用户可以通过订阅 WebSocket 推送的方式,实时获取市场数据的更新,从而实现低延迟的交易决策。历史市场数据也通常可以通过 API 获取,用于回测和分析。
- 交易下单接口: 交易下单接口允许用户提交买入或卖出订单。Kraken API 支持多种订单类型,包括市价单、限价单、止损单等。在提交订单时,需要仔细确认交易对、订单类型、价格和数量等参数,避免因参数错误导致交易失败或产生不必要的损失。同时,需要关注 Kraken API 的费用结构,了解不同订单类型的交易手续费。
- 提现/充值接口: 这些接口允许用户进行加密货币的充值和提现操作。在进行充值操作时,务必仔细核对充值地址,避免将加密货币发送到错误的地址。在进行提现操作时,需要注意提现手续费和最小提现金额。Kraken API 通常会提供多种提现方式,用户可以根据自己的需求选择合适的提现方式。
在使用 Kraken API 时,务必参考 Kraken 官方文档,了解 API 的详细参数、返回值和错误代码。同时,建议使用官方提供的 SDK 或第三方 API 客户端,简化 API 的调用过程,提高开发效率。安全性是使用 API 的首要考虑因素,务必采取必要的安全措施,保护 API 密钥和用户数据。
1. 公共接口 (Public Endpoints)
公共接口是无需提供 API 密钥即可访问的数据端点,设计初衷是为了方便开发者和用户获取实时的市场信息和公共数据。这些接口通常用于获取交易对的价格、交易量和其他关键指标,使得用户无需进行身份验证就能进行初步的市场分析和数据收集。
-
/0/public/Ticker
: 获取指定交易对的实时 Ticker 信息。Ticker 信息包含了该交易对在过去一段时间内的关键市场数据,例如:- 最高价 (High): 指定时间段内达到的最高成交价格。
- 最低价 (Low): 指定时间段内达到的最低成交价格。
- 成交量 (Volume): 指定时间段内的总交易量,通常以基础货币计价。
- 最新成交价 (Last Trade Price): 最近一笔交易的成交价格。
- 加权平均价 (Volume Weighted Average Price, VWAP): 根据成交量加权计算的价格,可以更准确地反映市场价格趋势。
- 买一价 (Ask): 当前市场最佳买入价格。
- 卖一价 (Bid): 当前市场最佳卖出价格。
示例 (Python):
使用 Python 和 krakenex 库与 Kraken 交易所的 API 进行交互,可以便捷地获取市场数据。以下代码演示了如何查询比特币 (XXBT) 与欧元 (ZEUR) 交易对的行情信息。
import krakenex
api = krakenex.API()
data = api.query_public('Ticker', {'pair': 'XXBTZEUR'})
print(data)
这段代码首先导入 krakenex 库,然后创建一个 Kraken API 实例。通过调用
query_public
方法,指定 'Ticker' 端点和 'pair' 参数,可以获取指定交易对的实时行情数据。返回的数据是一个包含交易对相关信息的字典,包括成交量、最高价、最低价等。
/0/public/OHLC
:
获取指定交易对的 OHLC (Open, High, Low, Close) 数据,用于绘制 K 线图。 OHLC 数据是金融市场分析的重要工具,它记录了特定时间段内的开盘价、最高价、最低价和收盘价。这些数据可以用于生成 K 线图,从而帮助交易者分析价格趋势和市场情绪。 Kraken API 提供的
/0/public/OHLC
端点允许开发者获取指定交易对在特定时间范围内的 OHLC 数据。 通过调整请求参数,例如时间间隔和起始时间,可以获取不同粒度的 OHLC 数据,满足各种分析需求。 例如,可以使用这些数据构建交易策略,或者进行技术分析。
示例 (Python):
使用 Python 和 krakenex 库可以方便地与 Kraken 交易所的 API 交互,获取各种市场数据。以下代码演示了如何获取比特币 (XXBTZEUR) 与欧元 (EUR) 交易对的 60 分钟 K 线数据。
import krakenex
api = krakenex.API()
data = api.query_public('OHLC', {'pair': 'XXBTZEUR', 'interval': 60}) # 获取 XXBTZEUR 交易对的 60 分钟 K 线数据
print(data)
代码详解:
-
import krakenex
: 导入 krakenex 库,该库封装了与 Kraken API 交互所需的方法。请确保已安装该库 (可以使用pip install krakenex
命令安装)。 -
api = krakenex.API()
: 创建 Kraken API 的实例,用于后续的 API 调用。 -
data = api.query_public('OHLC', {'pair': 'XXBTZEUR', 'interval': 60})
: 调用query_public
方法,访问 Kraken API 的公共端点。 -
'OHLC'
: 指定要查询的 API 端点,这里是 "OHLC",表示获取 Open-High-Low-Close (开盘价-最高价-最低价-收盘价) 数据,也就是 K 线数据。 -
{'pair': 'XXBTZEUR', 'interval': 60}
: 传递给 API 端点的参数。 -
'pair': 'XXBTZEUR'
: 指定交易对为比特币/欧元 (XXBTZEUR)。 Kraken 使用特定的交易对代码,例如 XXBTZEUR 代表比特币/欧元。 -
'interval': 60
: 指定 K 线的时间间隔为 60 分钟。Kraken 支持多种时间间隔,例如 1 (1 分钟), 5 (5 分钟), 15 (15 分钟), 30 (30 分钟), 60 (1 小时), 240 (4 小时), 1440 (1 天), 10080 (1 周), 21600 (15 天)。 -
print(data)
: 打印从 API 返回的数据。返回的数据通常是一个包含 K 线数据的字典,可以进一步解析和使用。
/0/public/Depth
: 获取指定交易对的订单簿 (Order Book) 数据,订单簿数据包含买单 (bid) 和卖单 (ask) 的价格和数量,反映了市场当前的买卖力量对比,是进行交易决策的重要参考。此接口允许你深入了解市场深度,评估价格走向。
示例 (Python):
使用 Python 和
krakenex
库可以轻松访问 Kraken 交易所的公开 API。 以下示例演示如何获取 BTC/EUR 交易对的深度数据。
你需要安装
krakenex
库。可以使用 pip 进行安装:
pip install krakenex
然后,你可以使用以下代码来获取并打印订单簿深度:
import krakenex
api = krakenex.API()
# 'pair' 参数指定交易对, 'count' 指定要返回的买卖单数量。 XXBTZEUR 代表比特币/欧元
data = api.query_public('Depth', {'pair': 'XXBTZEUR', 'count': 10}) # 获取前 10 个买卖单
print(data)
api.query_public()
方法用于查询 Kraken 的公共 API。 'Depth' 参数指定要获取订单簿深度数据。
pair
参数定义了要查询的交易对 (例如,'XXBTZEUR' 代表比特币/欧元)。
count
参数控制返回的订单数量(买单和卖单)。
返回的
data
是一个字典,包含了订单簿的买单和卖单信息。 你可以进一步解析这个字典来获取具体的订单价格和数量。
/0/public/Trades
:
Trades
端点允许你检索特定交易对的最新成交历史。 这对于分析市场趋势和成交量非常有用。
例如,要获取 ETH/USD 交易对的最近成交记录,你可以使用以下代码:
import krakenex
api = krakenex.API()
# ZETHZUSD 代表以太坊/美元
data = api.query_public('Trades', {'pair': 'ZETHZUSD'})
print(data)
返回的数据将包含一个列表,其中每个元素代表一个成交记录。 每个成交记录通常包含成交价格、成交数量、成交时间和买卖方向等信息。 你可以根据需要解析这些数据。
注意:Kraken API 可能会限制请求频率。 在编写应用程序时,请务必遵循 Kraken 的 API 使用条款,并实施适当的速率限制,以避免被封禁。
示例 (Python):
本示例展示如何使用 Python 和 Kraken API 获取交易数据。你需要安装
krakenex
库。可以通过
pip install krakenex
命令进行安装。
核心代码如下:
import krakenex
api = krakenex.API()
data = api.query_public('Trades', {'pair': 'XXBTZEUR'})
print(data)
代码解释:
-
import krakenex
: 导入 krakenex 库,该库封装了与 Kraken 交易所 API 交互的功能。 -
api = krakenex.API()
: 创建 Kraken API 类的实例。这个实例用于后续的 API 调用。 -
data = api.query_public('Trades', {'pair': 'XXBTZEUR'})
: 调用query_public
方法来获取公开交易数据。 -
'Trades'
: 指定要查询的 API 端点,这里是获取交易数据的端点。 -
{'pair': 'XXBTZEUR'}
: 传递查询参数,指定交易对。XXBTZEUR
代表比特币 (XBT) 与欧元 (EUR) 的交易对。 Kraken 使用 XBT 代替 BTC 来表示比特币。 -
print(data)
: 打印返回的数据。 返回的数据通常是一个包含时间戳、价格和交易量的列表。数据的具体结构取决于 Kraken API 的响应。
注意事项:
-
确保你的 Python 环境已经安装了
krakenex
库。 -
XXBTZEUR
是 Kraken 交易所使用的比特币/欧元的交易对代码。你可以根据需要更改交易对代码来查询其他交易对的数据。 例如,查询以太坊/美元交易对,可以使用{'pair': 'XETHZUSD'}
。 - Kraken API 的调用频率有限制。过高的调用频率可能会导致 API 调用失败。 在实际应用中,需要合理控制 API 调用频率。
-
可以使用
query_private
方法查询私有数据,例如账户余额和交易历史。 调用query_private
方法需要提供 API 密钥和私钥。 请妥善保管你的 API 密钥和私钥。
2. 私有接口 (Private Endpoints)
私有接口,也称为认证接口,必须提供有效的 API 密钥才能访问。这些接口主要用于执行需要用户授权的操作,例如账户管理、资金划转、交易下单、查询历史订单等。API 密钥通常包含一个公钥和一个私钥,公钥用于标识用户,私钥用于对请求进行签名,确保请求的完整性和真实性。
-
/0/private/Balance
: 获取账户余额信息。该接口返回用户账户中各种加密货币及法币的余额信息。详细信息可能包括可用余额、冻结余额、总余额以及未结算的收益等。为了确保账户安全,所有对此接口的访问都需要通过 API 密钥进行身份验证。交易所通常会对调用频率进行限制,防止滥用。
示例 (Python):
import krakenex
api = krakenex.API()
api.load_key('kraken.key') # 从文件中加载 API 密钥
data = api.query_private('Balance') # 查询账户余额
print(data)
-
kraken.key
文件格式:kraken.key
文件应包含两行文本。第一行是您的公共 API 密钥 (API Key),用于身份验证;第二行是您的私有 API 密钥 (Private Key),用于签署交易请求。确保此文件具有适当的权限,以防止未经授权的访问,建议设置为仅用户可读写。
/0/private/Balance
API 调用:
此API端点用于获取账户余额信息。Kraken API 采用RESTful架构,
/0/private/Balance
表示一个私有(需要API密钥)的端点,用于查询账户中各种加密货币和法币的可用余额。返回的数据结构会包含不同资产的代码以及对应的余额数量,例如:{'ZUSD': '100.0000', 'XXBT': '1.50000000'}。请注意,你需要先使用
load_key()
方法加载API密钥,才能成功调用私有 API 端点。
示例 (Python):
使用 Python 和 Kraken API 客户端库,你可以轻松与 Kraken 交易所进行交互。以下示例展示了如何使用
krakenex
库查询你的账户余额。
确保你已经安装了
krakenex
库。你可以使用 pip 进行安装:
pip install krakenex
然后,按照以下步骤操作:
import krakenex
# 创建 Kraken API 实例
api = krakenex.API()
# 从文件中加载 API 密钥 (强烈建议不要在代码中硬编码密钥)
api.load_key('kraken.key')
# 调用私有 API 接口查询账户余额 (这里查询的是欧元余额)
data = api.query_private('TradeBalance', {'asset': 'ZEUR'})
# 打印返回的数据
print(data)
说明:
-
krakenex.API()
: 创建 Kraken API 实例。 -
api.load_key('kraken.key')
: 从kraken.key
文件加载 API 密钥。该文件应该包含两行:第一行是 API 密钥,第二行是私钥。 注意安全:请勿将 API 密钥直接写入代码中。避免将密钥泄露到公共代码仓库中。 -
api.query_private('TradeBalance', {'asset': 'ZEUR'})
: 调用私有 API 的TradeBalance
接口,查询欧元 (ZEUR) 资产的交易余额。 -
print(data)
: 打印 API 返回的数据。返回的数据通常是 JSON 格式,包含了账户余额的详细信息。
/0/private/AddOrder
:
下单接口,可以创建各种类型的订单,包括:
- 市价单 (Market Order): 以当前市场最优价格立即执行的订单。
- 限价单 (Limit Order): 以指定的价格或更好的价格执行的订单。如果市场价格没有达到指定的价格,订单将保持挂单状态,直到价格到达或订单被取消。
- 止损单 (Stop-Loss Order): 当市场价格达到指定的止损价格时,订单会被触发并以市价单的形式执行,用于限制潜在的损失。
- 止损限价单 (Stop-Loss Limit Order): 当市场价格达到指定的止损价格时,订单会被触发并以限价单的形式挂出。 这种订单类型可以更好地控制成交价格,但也可能存在无法成交的风险。
- 追踪止损单 (Trailing Stop Order): 止损价格会随着市场价格的上涨而自动调整,始终保持与市场价格一定的距离,用于锁定利润并限制潜在的损失。
使用
AddOrder
接口需要提供必要的参数,例如交易对 (pair)、订单类型 (type)、订单方向 (ordertype)、交易量 (volume) 和价格 (price,如果需要)。
import krakenex api = krakenex.API() api.loadkey('kraken.key') data = api.queryprivate('AddOrder', { 'pair': 'XXBTZEUR', 'type': 'buy', 'ordertype': 'market', 'volume': '0.01' # 购买 0.01 BTC }) print(data)
示例 (Python): 下一个限价卖单import krakenex api = krakenex.API() api.loadkey('kraken.key') data = api.queryprivate('AddOrder', { 'pair': 'XXBTZEUR', 'type': 'sell', 'ordertype': 'limit', 'price': '30000', # 卖出价格 30000 欧元 'volume': '0.01' # 卖出 0.01 BTC }) print(data)
/0/private/CancelOrder
: 取消订单接口。
示例 (Python):
使用 Kraken 交易所的 API 取消订单,需要使用 Python 编程语言以及 krakenex 库。 krakenex 库是 Kraken API 的 Python 封装,方便开发者与 Kraken 交易所进行交互。
需要安装 krakenex 库。可以使用 pip 包管理器进行安装:
pip install krakenex
安装完成后,就可以使用以下代码取消订单:
import krakenex
api = krakenex.API()
# 加载 API 密钥。强烈建议将 API 密钥存储在安全的地方,例如单独的文件中,而不是直接硬编码到脚本中。
# load_key() 函数用于从文件中加载 API 密钥。
api.load_key('kraken.key')
# 替换为实际的订单 ID。订单 ID 是 Kraken 交易所分配给每个订单的唯一标识符。
order_id = 'OU2I6X-IE47S-6N6J3M'
# 使用 query_private() 函数调用 Kraken API 的 CancelOrder 接口。
# 该接口用于取消指定的订单。
# 'txid' 参数指定要取消的订单 ID。
data = api.query_private('CancelOrder', {'txid': order_id})
# 打印 API 返回的数据。API 返回的数据包含有关订单取消操作的信息,例如取消是否成功、取消的原因等。
print(data)
代码说明:
-
import krakenex
: 导入 krakenex 库。 -
api = krakenex.API()
: 创建 Kraken API 对象。 -
api.load_key('kraken.key')
: 加载 API 密钥。确保kraken.key
文件包含你的 API 密钥和私钥。 -
data = api.query_private('CancelOrder', {'txid': 'OU2I6X-IE47S-6N6J3M'})
: 调用CancelOrder
接口,并传入订单 ID 作为参数。txid
对应于 Kraken 交易所中的订单 ID。 -
print(data)
: 打印 API 返回的数据。检查返回的数据,确认订单是否成功取消。如果取消失败,API 返回的数据会包含错误信息。
/0/private/OpenOrders
: 获取当前未成交的订单列表。这是一个常用的 API 接口,可以用于查询当前账户中所有未成交的订单信息。 可以用来查询订单的详细信息,并确认订单的状态。
示例 (Python):
要通过 Python 与 Kraken API 交互,可以使用
krakenex
库。需要安装该库:
pip install krakenex
然后,可以使用以下代码连接到 API 并查询私有数据:
import krakenex
api = krakenex.API()
# 从文件中加载 API 密钥
api.load_key('kraken.key')
# 查询私有 API 端点,例如 'OpenOrders'
data = api.query_private('OpenOrders')
# 打印返回的数据
print(data)
api.load_key('kraken.key')
函数从名为
kraken.key
的文件中加载 API 密钥。此文件应包含两行,第一行包含 API 密钥,第二行包含私钥。
api.query_private('OpenOrders')
函数向 Kraken API 发送一个私有请求,请求当前未成交的订单。此函数返回包含订单信息的 Python 字典。
可以使用
krakenex
库查询各种其他私有 API 端点,例如:
/0/private/ClosedOrders
:
获取已成交的订单列表。 该接口提供查询已完成(成交、取消等)订单的详细信息,包括订单类型、价格、数量、手续费等。 可以通过指定时间范围、交易对等参数来过滤结果。 返回的数据结构通常包含订单ID、状态、成交时间、成交价格、成交数量等信息,方便用户进行交易历史分析和统计。
示例 (Python):
使用 Kraken 的官方 Python 客户端库
krakenex
可以简化与 Kraken 交易所 API 的交互。你需要安装该库。通常可以使用 pip 命令安装:
pip install krakenex
。
接下来,导入
krakenex
模块:
import krakenex
然后,创建一个
krakenex.API
类的实例:
api = krakenex.API()
为了访问私有 API 端点(例如,查询已关闭的订单),你需要提供 API 密钥。你可以使用
load_key
方法从文件中加载密钥。密钥文件通常包含两行:第一行是 API 密钥,第二行是私有密钥。确保
kraken.key
文件位于你的脚本可以访问的位置,并且具有正确的权限。
api.load_key('kraken.key')
现在,你可以使用
query_private
方法调用私有 API 端点。例如,要获取已关闭的订单,可以调用
ClosedOrders
端点。请注意,Kraken API 会返回包含错误信息的响应,即使请求成功。为了获得实际的数据,你可能需要检查返回的字典中的 'error' 键。如果列表为空,则没有错误。实际数据位于 'result' 键下。
data = api.query_private('ClosedOrders')
print(data)
上述代码将打印包含已关闭订单信息的字典。该字典的结构可能会很复杂,具体取决于你使用的 API 端点和传递的参数。你可能需要解析返回的 JSON 结构,以提取你感兴趣的特定数据。
需要注意的是,使用 API 密钥需要谨慎,确保妥善保管你的密钥,避免泄露。密钥泄露可能导致账户被盗用。
自动化交易示例
以下是一个简化的自动化交易示例,使用 Python 编程语言编写,旨在演示如何实现一个基础的移动平均线交叉策略。该策略利用短期和长期移动平均线的交叉点来生成买卖信号,是量化交易中常见的策略之一。示例代码使用了
krakenex
库与Kraken交易所进行交互,从而实现自动化交易。
为了更好地理解示例,请确保您已安装必要的Python库,例如
krakenex
,可以使用pip进行安装:
pip install krakenex
。您需要在Kraken交易所拥有账户并生成API密钥,以便程序可以安全地访问您的账户并执行交易。请务必妥善保管API密钥,避免泄露。
import krakenex
import time
配置
PAIR = 'XXBTZEUR'
指定交易的货币对,这里设置为 'XXBTZEUR',代表比特币 (XXBT) 兑 欧元 (ZEUR)。在Kraken交易所或其他交易所中,货币对的命名规则可能略有不同。务必根据交易所的规定正确设置。
SMA_PERIOD_SHORT = 20
设置短期简单移动平均线 (SMA) 的周期为 20。这意味着程序将计算过去 20 个时间单位(例如,20根K线,具体取决于你的图表周期)的价格的平均值,用于生成短期SMA线。较短的周期能更快地反映价格变化,但也可能产生更多的噪音信号。
SMA_PERIOD_LONG = 50
设置长期简单移动平均线 (SMA) 的周期为 50。与短期SMA类似,但使用过去 50 个时间单位的价格数据。长期SMA对价格变动的反应较慢,可以用于识别更长期的趋势。 短期SMA和长期SMA的交叉通常被用作交易信号。
TRADE_VOLUME = '0.01'
指定每次交易的交易量为 0.01 个比特币。请注意,这表示的是以比特币计价的数量,而非等值的法币金额。务必根据自己的风险承受能力和资金规模谨慎设置交易量。同时,也要考虑交易所的最小交易量限制。
API_KEY_FILE = 'kraken.key'
指定存储 API 密钥的文件名为 'kraken.key'。程序将从该文件中读取 API 密钥和私钥,用于连接到 Kraken 交易所并执行交易。强烈建议将 API 密钥存储在安全的位置,并限制文件访问权限,避免泄露。该文件通常不应包含在版本控制系统中。建议限制API密钥的权限,只赋予交易所需的最低权限。
初始化 API
使用 Krakenex 库初始化 API 客户端,并加载 API 密钥。正确的 API 密钥文件是访问 Kraken 交易所私有 API 的必要条件,密钥文件应妥善保管,避免泄露。
api = krakenex.API()
api.load_key(API_KEY_FILE)
krakenex.API()
创建一个 API 客户端实例,
api.load_key(API_KEY_FILE)
从指定的
API_KEY_FILE
加载 API 密钥,密钥文件中通常包含 API 密钥和私有密钥,请注意文件路径是否正确。
计算简单移动平均线 (SMA)
calculate_sma
函数用于计算给定时间序列数据的简单移动平均线。该函数接收 OHLC (开盘价、最高价、最低价、收盘价) 数据和周期作为输入,并返回指定周期的 SMA 值。该函数的核心是提取收盘价,并计算指定周期内的平均值。计算移动平均线是技术分析中常用的指标,用于平滑价格波动,识别趋势方向。
def calculate_sma(data, period):
"""计算简单移动平均线"""
closes = [float(d[4]) for d in data] # 假设 Close 价格在第 5 列
return sum(closes[-period:]) / period
代码中假设收盘价位于每条 OHLC 数据的第 5 列(索引为 4)。请根据实际数据格式进行调整。
closes[-period:]
获取最后
period
个收盘价,
sum(closes[-period:])
计算这些收盘价的总和,最后除以
period
得到 SMA 值。
获取 OHLC 数据
get_ohlc_data
函数用于从 Kraken 交易所获取指定交易对的 OHLC 数据。该函数接收交易对(例如 "XBTUSD")和时间间隔(例如 1, 5, 15, 30, 60, 240, 1440, 10080, 21600 分钟)作为输入,并返回 OHLC 数据。如果 API 请求失败,该函数将打印错误信息并返回
None
。数据来自于Kraken交易所的公共API。
def get_ohlc_data(pair, interval):
"""获取 OHLC 数据"""
data = api.query_public('OHLC', {'pair': pair, 'interval': interval})
if data['error']:
print(f"Error getting OHLC data: {data['error']}")
return None
return data['result'][pair]
api.query_public('OHLC', {'pair': pair, 'interval': interval})
向 Kraken 公共 API 发送 OHLC 数据查询请求。返回的数据包含
error
字段和
result
字段。如果
error
字段不为空,则表示请求失败。
data['result'][pair]
返回指定交易对的 OHLC 数据。
下单函数
place_order
函数用于在 Kraken 交易所下单。该函数接收交易对、交易类型(买入或卖出)、订单类型(市价单、限价单等)、交易量和价格(对于限价单)作为输入。该函数构建一个包含所有必要参数的字典,并使用 Kraken API 发送下单请求。如果下单请求失败,该函数将打印错误信息并返回
None
。如果下单成功,该函数将返回交易 ID (
txid
)。此函数需要使用私有API,因此需要合法的API key。
def place_order(pair, type, ordertype, volume, price=None):
"""下单函数"""
params = {
'pair': pair,
'type': type,
'ordertype': ordertype,
'volume': volume
}
if price:
params['price'] = price
try:
data = api.query_private('AddOrder', params)
if data['error']:
print(f"Error placing order: {data['error']}")
return None
return data['result']['txid']
except Exception as e:
print(f"Exception placing order: {e}")
return None
params
字典包含所有下单所需的参数。
api.query_private('AddOrder', params)
向 Kraken 私有 API 发送下单请求。返回的数据包含
error
字段和
result
字段。如果
error
字段不为空,则表示下单失败。
data['result']['txid']
返回交易 ID。使用
try...except
块捕获可能发生的异常,例如网络连接错误或 API 密钥无效。请务必仔细检查所有参数,以确保下单请求正确。
type
参数可以是
buy
或
sell
,
ordertype
参数可以是
market
,
limit
,
stop-loss
,
take-profit
等。
volume
参数指定要交易的资产数量,
price
参数仅在订单类型为限价单时需要指定。
主循环
while True:
循环是程序的核心,持续不断地监控市场并执行交易逻辑。循环内部包含了获取市场数据、计算移动平均线、判断交易信号和执行交易等关键步骤。
time.sleep()
函数用于控制循环的频率,避免过于频繁地访问交易所API。
ohlc_data = get_ohlc_data(PAIR, 5)
调用
get_ohlc_data
函数获取指定交易对 (
PAIR
) 的5分钟K线数据。OHLC 代表开盘价(Open)、最高价(High)、最低价(Low)和收盘价(Close)。如果无法获取数据(例如,网络问题或API限制),程序会暂停60秒后继续尝试。
# 计算 SMA
if len(ohlc_data) < SMA_PERIOD_LONG:
print("Insufficient data for SMA calculation")
time.sleep(60)
continue
sma_short = calculate_sma(ohlc_data, SMA_PERIOD_SHORT)
sma_long = calculate_sma(ohlc_data, SMA_PERIOD_LONG)
在计算移动平均线之前,程序会检查是否有足够的数据。如果数据量小于较长周期SMA所需的长度 (
SMA_PERIOD_LONG
),则会暂停并重新获取数据。
calculate_sma
函数根据K线数据和指定的周期计算简单移动平均线 (SMA)。
SMA_PERIOD_SHORT
和
SMA_PERIOD_LONG
分别代表短期和长期SMA的周期。移动平均线是常用的技术指标,用于平滑价格波动并识别趋势。
# 交叉判断
last_trade = None # 可以从文件中读取上次交易的状态
if sma_short > sma_long:
# 短期均线高于长期均线,买入
print("SMA Short > SMA Long, Buying...")
if last_trade != 'buy': # 避免重复买入
order_id = place_order(PAIR, 'buy', 'market', TRADE_VOLUME)
if order_id:
print(f"Buy order placed, order ID: {order_id}")
last_trade = 'buy'
else:
print("Failed to place buy order")
elif sma_short < sma_long:
# 短期均线低于长期均线,卖出
print("SMA Short < SMA Long, Selling...")
if last_trade != 'sell': # 避免重复卖出
order_id = place_order(PAIR, 'sell', 'market', TRADE_VOLUME)
if order_id:
print(f"Sell order placed, order ID: {order_id}")
last_trade = 'sell'
else:
print("Failed to place sell order")
else:
print("No signal")
该部分是交易信号生成和执行的核心。程序首先加载上次交易的状态 (
last_trade
),这有助于避免重复交易。当短期SMA高于长期SMA时,产生买入信号;当短期SMA低于长期SMA时,产生卖出信号。
place_order
函数用于向交易所提交订单。
PAIR
指定交易对,
'buy'
或
'sell'
指定交易方向,
'market'
指定市价单,
TRADE_VOLUME
指定交易数量。如果成功下单,程序会打印订单ID并更新
last_trade
状态;如果下单失败,则会打印错误信息。
# 保存 last_trade 到文件
# with open('last_trade.txt', 'w') as f:
# f.write(last_trade)
time.sleep(300) # 等待 5 分钟
程序可以选择将
last_trade
状态保存到文件中,以便下次运行时加载。注释中的代码展示了如何将
last_trade
写入
last_trade.txt
文件。
time.sleep(300)
使程序暂停300秒 (5分钟),然后进入下一次循环迭代。
注意:
- 重要声明: 以上代码仅为示例,旨在说明自动化交易的概念和基本流程,不构成任何形式的投资建议。加密货币市场波动剧烈,任何投资决策都应基于您个人的风险承受能力、投资目标和全面的市场分析。
- 参数调整: 在实际部署和使用自动化交易程序时,务必根据具体的市场环境、交易品种特性以及您的个性化交易策略,对代码中的各项参数进行精细化调整。包括但不限于滑点容忍度、止损止盈比例、交易频率等。
- 风险评估: 使用自动化交易系统进行加密货币交易存在固有的风险,包括但不限于系统故障、网络延迟、黑客攻击、市场操纵等。在开始自动化交易之前,请务必进行充分的风险评估,并了解可能面临的潜在损失。建议从小额资金开始,逐步调整策略。
- 安全措施: 务必采取严格的安全措施,例如使用强密码、启用双重验证、定期备份数据,并选择信誉良好的交易所和交易平台,以最大限度地降低安全风险。 监控交易机器人的活动,确保其按照预期运行。
- 免责声明: 请注意,您对使用以上示例代码以及由此产生的任何投资结果负全部责任。作者不承担任何因使用此代码而造成的损失。
风险提示
通过 Kraken API 进行自动化交易涉及一系列固有的风险,务必在实施前充分了解并谨慎评估:
- API 密钥泄露风险: API 密钥是访问您 Kraken 账户的凭证,一旦泄露,他人可能未经授权地访问和控制您的账户。务必采取严格的安全措施,例如使用强密码、定期更换密钥、启用双因素认证 (2FA) 以及限制密钥的权限,只授予程序所需的最低权限,避免将 API 密钥存储在不安全的地方,例如代码仓库或公共服务器上。
- 程序错误风险: 自动化交易依赖于程序的准确性和可靠性。程序中的任何错误,例如逻辑错误、数据处理错误或意外情况处理不当,都可能导致非预期的交易行为,包括错误的买入或卖出价格、错误的交易数量或不必要的交易,最终造成资金损失。在部署自动化交易程序之前,务必进行彻底的回测、模拟交易和压力测试,以确保程序的稳定性和准确性。
- 市场波动风险: 加密货币市场以其极高的波动性而闻名。价格可能在短时间内剧烈波动,即使是最精密的自动化交易策略也可能无法及时适应市场的快速变化,导致亏损。需要定期监控市场状况,并根据市场变化调整交易策略,同时设置止损单和止盈单,以限制潜在的损失。
- 网络连接风险: 自动化交易系统依赖于稳定且可靠的网络连接。网络中断、延迟或连接不稳定可能导致交易指令无法及时发送或执行,从而导致交易失败或延迟,错过交易机会或在不利的价格下成交。确保使用可靠的网络连接,并考虑设置备用连接,以应对突发情况。同时,监控网络连接状态,并设置警报,以便在出现问题时及时采取措施。
在使用 Kraken API 进行自动化交易之前,请务必深入了解加密货币交易的风险,并采取全面的风险管理措施,包括但不限于:充分了解 API 的使用方法、限制交易规模、分散投资、设置止损点、定期监控交易活动等。永远不要投入超过你能承受损失的资金,并时刻保持谨慎和理性。