Kraken API 终极指南:交易自动化竟如此简单?!

发布时间: 分类: 学术 阅读:83℃

Kraken 常用 API 接口

概述

Kraken 提供了一套全面的应用程序编程接口 (API),使开发者能够通过编程方式与 Kraken 的数字资产交易平台进行交互。这些 API 涵盖了广泛的功能,包括但不限于:获取实时市场数据、访问历史交易信息、管理账户资金、以及执行各种类型的交易订单。通过利用 Kraken 的 API,开发者可以构建高度定制化的自动化交易系统,开发复杂的市场数据分析工具,并将其应用程序与 Kraken 平台无缝集成。

Kraken API 的架构主要分为两大类别:公共 API 和私有 API。公共 API 提供了对无需用户身份验证即可访问的信息的访问权限,例如最新的交易价格、交易量、订单簿深度、以及服务器时间戳。这些公共 API 非常适合用于构建行情显示器、数据聚合器以及其他需要实时市场信息的应用程序。私有 API 则需要用户进行身份验证,通过 API 密钥和签名机制来确保安全访问。私有 API 允许用户访问其个人账户信息,包括账户余额、交易历史、未完成订单以及执行交易和管理资金等功能。使用私有 API 需要谨慎处理 API 密钥,并遵循 Kraken 的安全最佳实践,以防止未经授权的访问。

公共 API

公共 API 旨在提供便捷的市场数据访问,无需进行身份验证即可使用。这些接口是信息查询的基础,允许开发者和用户在无需提供个人凭证的情况下获取实时或历史的市场信息。常用接口包括:

1. 实时行情数据: 提供加密货币的最新价格、成交量、最高价、最低价等信息。这些数据对于交易策略的制定至关重要,可以帮助用户把握市场动态。

2. 历史K线数据: 包含一定时间周期内的开盘价、收盘价、最高价、最低价和成交量等数据,用于技术分析和趋势预测。K线数据可以帮助用户识别市场趋势和潜在的交易机会。

3. 交易对信息: 包括交易对的名称、交易费用、最小交易数量等信息。了解这些信息有助于用户评估交易成本和制定合理的交易计划。

4. 全局市场数据: 例如总市值、24小时成交量、加密货币数量等,反映整体市场状况。这些数据可以帮助用户了解市场的整体健康状况和发展趋势。

5. 订单簿数据: 显示买入和卖出订单的挂单情况,帮助用户了解市场深度和流动性。订单簿数据可以帮助用户判断市场的供需关系和潜在的价格波动。

在使用公共 API 时,需要注意频率限制,避免对服务器造成过载。部分 API 可能需要遵守特定的使用条款,开发者应仔细阅读相关文档。

1. Time - 获取服务器时间

  • 功能: 返回 Kraken 服务器的当前时间和时区。此接口主要用于客户端应用同步时间,确保交易和API调用的时间戳与服务器保持一致,避免因时钟偏差导致的问题。
  • Endpoint: /0/public/Time
  • 方法: GET
  • 参数: 无。该接口不需要任何请求参数。
  • 返回示例:
    
    {
        "error": [],
        "result": {
            "unixtime": 1678886400,
            "rfc1123": "Tue, 14 Mar 2023 00:00:00 +0000"
        }
    }
    
  • 返回字段说明:
    • error : 错误信息数组。如果请求成功,该数组为空。如果请求失败,该数组包含错误代码和错误描述。
    • result : 包含服务器时间的JSON对象。
      • unixtime : Unix 时间戳,表示自 1970 年 1 月 1 日 00:00:00 UTC 至今的秒数。开发者可以使用此值进行时间计算和存储。
      • rfc1123 : RFC 1123 格式的时间字符串,方便人类阅读。例如:"Tue, 14 Mar 2023 00:00:00 +0000"。
  • 使用场景:
    • 时间同步:客户端应用程序可以使用此接口来同步其本地时钟与 Kraken 服务器的时钟。
    • 交易时间戳:在进行交易或其他需要时间戳的操作时,可以使用此接口获取服务器时间,以确保交易的准确性。
    • 监控服务器状态:可以通过定期调用此接口来监控 Kraken 服务器的可用性。

2. Assets - 获取资产信息

  • 功能: 返回 Kraken 交易所支持的所有或指定资产的详细信息。这些信息包括资产的规范名称、资产类型(例如货币或交易对)、以及与精度和显示相关的参数。此接口对于应用程序需要了解 Kraken 上可用资产的属性至关重要。
  • Endpoint: /0/public/Assets
  • 方法: GET
  • 参数:
    • asset (可选): 一个字符串,用于指定要查询的特定资产。可以指定单个资产代码,也可以用逗号分隔多个资产代码(例如, BTC,ETH,LTC )。如果不提供此参数,API 将返回 Kraken 交易所支持的 所有 资产的信息。正确使用此参数能够减少响应大小,提高查询效率。
  • 返回示例:
    {
      "error": [],
      "result": {
        "ADA": {
          "aclass_base": "currency",
          "altname": "ADA",
          "decimals": 8,
          "display_decimals": 6
        },
        "BTC": {
          "aclass_base": "currency",
          "altname": "XBT",
          "decimals": 10,
          "display_decimals": 8
        }
      }
    }
            
  • 字段解释:
    • aclass_base : 资产的基础类别。常见的类别是 currency (表示加密货币或其他货币),但也可以是其他类型,具体取决于资产的性质。此字段有助于区分不同类型的资产。
    • altname : 资产的备用名称或替代代码。例如,比特币通常被称为 XBT ,而不是 BTC 。应用程序可以使用此备用名称来满足不同的命名约定或显示需求。
    • decimals : 该资产在内部表示中使用的小数点后的位数。这表示 Kraken 交易所处理此资产时的最大精度。该值越高,精度越高,交易和计算也越准确。
    • display_decimals : 用于在用户界面或报告中显示该资产的小数点后的位数。此值通常小于或等于 decimals ,用于控制资产价值的显示精度,以便用户更容易理解。例如,即使内部精度为 8 位小数,也可能只显示 2 位小数。
    • error : 包含请求期间遇到的任何错误消息的数组。如果数组为空,则表示没有发生错误,请求已成功处理。始终检查此数组以确保请求已成功。
    • result : 包含资产信息的 JSON 对象。键是资产名称(如 ADA, BTC),值是描述资产属性的对象。
  • 使用场景:
    • 动态更新交易界面上的资产列表。
    • 根据资产类型过滤可交易的资产。
    • 在财务报告中显示准确的资产价值,同时控制显示精度。
    • 自动发现新的或已更新的资产属性,以保持应用程序与 Kraken 交易所的同步。

3. AssetPairs - 获取交易对信息

  • 功能: 返回 Kraken 交易所支持的交易对信息,包括交易对名称(例如:ADAUSD)、替代名称、WebSocket 使用的名称、资产类别、基础资产、报价资产、最小交易单位(lot)以及各种精度和费用信息。 此接口是了解 Kraken 交易所提供哪些交易对以及每个交易对具体参数的关键。
  • Endpoint: /0/public/AssetPairs
  • 方法: GET
  • 参数:
    • pair (可选): 指定要查询的交易对,多个交易对可以使用逗号分隔。例如: pair=ADAUSD,XBTUSD 。 如果未指定此参数,API 将返回所有可用交易对的信息。建议在首次使用 API 时不指定此参数,以便全面了解所有可用交易对。需要注意的是,一次性请求过多的交易对信息可能会导致响应时间变长。
    • info (可选): 指定返回的信息类型。默认为 'info',返回交易对的基本信息。可以设置为 'leverage' 返回杠杆信息,'fees' 返回费用信息,或 'margin' 返回保证金信息。 如果未指定,默认返回基础信息。
  • 返回示例:

    
    {
      "error": [],
      "result": {
        "ADAUSD": {
          "altname": "ADAUSD",
          "wsname": "ADA/USD",
          "aclass_base": "currency",
          "aclass_quote": "currency",
          "base": "ADA",
          "quote": "USD",
          "lot": "unit",
          "pair_decimals": 5,
          "lot_decimals": 8,
          "lot_multiplier": 1,
          "leverage_buy": [],
          "leverage_sell": [],
          "fees": [
            [0, 0.26],
            [10000, 0.24],
            [50000, 0.22],
            [100000, 0.2],
            [250000, 0.18],
            [500000, 0.16],
            [1000000, 0.14],
            [2500000, 0.12],
            [5000000, 0.1]
          ],
          "fees_maker": [
            [0, 0.16],
            [10000, 0.14],
            [50000, 0.12],
            [100000, 0.1],
            [250000, 0.08],
            [500000, 0.06],
            [1000000, 0.04],
            [2500000, 0.02],
            [5000000, 0]
          ],
          "fee_volume_currency": "USD",
          "margin_call": 80,
          "margin_stop": 40
        }
      }
    }
            

    字段解释:

    • altname : 交易对的替代名称,通常与交易对名称相同。
    • wsname : 用于 WebSocket 订阅的交易对名称。 在使用 WebSocket API 订阅实时数据时,需要使用此名称。
    • aclass_base : 基础资产的类别,通常为 "currency"。
    • aclass_quote : 报价资产的类别,通常为 "currency"。
    • base : 基础资产的代码,例如 "ADA"。
    • quote : 报价资产的代码,例如 "USD"。
    • lot : 最小交易单位,通常为 "unit"。
    • pair_decimals : 交易对的价格精度,表示价格小数点后的位数。例如,如果 pair_decimals 为 5,则 ADAUSD 的价格将精确到小数点后 5 位。
    • lot_decimals : 交易量的精度,表示交易量小数点后的位数。例如,如果 lot_decimals 为 8,则交易量可以精确到小数点后 8 位。
    • lot_multiplier : 交易量乘数,通常为 1。
    • leverage_buy : 买入方向的可用杠杆倍数。 空数组表示不支持杠杆。
    • leverage_sell : 卖出方向的可用杠杆倍数。 空数组表示不支持杠杆。
    • fees : 梯度吃单手续费 (Taker Fees)。 数组中的每个元素代表一个交易量等级和对应的手续费率。 例如, [0, 0.26] 表示交易量为 0 到 10000 USD 之间的手续费率为 0.26%。
    • fees_maker : 梯度挂单手续费 (Maker Fees)。 数组结构与 fees 相同。挂单手续费通常低于吃单手续费。
    • fee_volume_currency : 手续费计算的货币单位,通常为报价货币 (例如 USD)。
    • margin_call : 保证金追缴比例。 当保证金比例低于此值时,会触发保证金追缴。
    • margin_stop : 强制平仓比例。 当保证金比例低于此值时,会强制平仓。

    使用注意事项:

    • 在进行交易之前,务必仔细检查交易对的精度和手续费信息。
    • 杠杆交易风险较高,请谨慎使用。
    • 定期更新交易对信息,以确保使用最新的数据。
    • 可以使用此接口获取 Kraken 交易所支持的所有交易对,并根据您的需求选择合适的交易对进行交易。

4. Ticker - 获取市场行情

  • 功能: 返回指定交易对的市场行情快照,提供关键的市场指标,如价格、成交量、最高价、最低价、开盘价等。此接口对于跟踪市场动态、构建交易策略至关重要。
  • Endpoint: /0/public/Ticker
  • 方法: GET
  • 参数:
    • pair (必须):指定要查询的交易对。支持同时查询多个交易对,通过逗号分隔交易对代码。例如: pair=ADAUSD,ETHUSD 。交易对代码需符合交易所规定的命名规范。
  • 返回示例:
          
    {
       "error": [],
       "result":  {
         "ADAUSD": {
           "a":  [
              "0.32466",
                "20",
              "20.000"
            ],
           "b":  [
            "0.32445",
             "20",
             "20.000"
             ],
          "c": [
             "0.32478",
              "14"
            ],
             "v": [
             "1984676.85597",
              "2149799.13898"
          ],
            "p": [
             "0.31940",
              "0.31757"
             ],
            "t": [
            12266,
                13276
           ],
            "l": [
              "0.31333",
             "0.31333"
             ],
             "h": [
              "0.32677",
              "0.32677"
           ],
            "o":  [
              "0.31342",
                "0.31536"
          ]
          }
        }
    }
          
        
  • 数据字段说明:
    • a : 卖盘(Ask)。包含三个元素:
      • 最新卖出价格。
      • 该价格对应的挂单量。
      • 总挂单量。
    • b : 买盘(Bid)。包含三个元素:
      • 最新买入价格。
      • 该价格对应的挂单量。
      • 总挂单量。
    • c : 最新成交价(Close)。包含两个元素:
      • 最新成交价格。
      • 自上次查询以来的成交量。
    • v : 成交量(Volume)。包含两个元素:
      • 近24小时成交量。
      • 当日(UTC 00:00:00)成交量。
    • p : 加权平均价(VWAP - Volume Weighted Average Price)。包含两个元素:
      • 近24小时加权平均价。
      • 当日(UTC 00:00:00)加权平均价。
    • t : 成交笔数(Trades)。包含两个元素:
      • 近24小时成交笔数。
      • 当日(UTC 00:00:00)成交笔数。
    • l : 最低价(Low)。包含两个元素:
      • 近24小时最低价。
      • 当日(UTC 00:00:00)最低价。
    • h : 最高价(High)。包含两个元素:
      • 近24小时最高价。
      • 当日(UTC 00:00:00)最高价。
    • o : 开盘价(Open)。包含两个元素:
      • 近24小时开盘价。
      • 当日(UTC 00:00:00)开盘价。
  • 时间周期: 返回数据中,数组的第一个元素通常代表近24小时的统计数据,而第二个元素代表当日(UTC 00:00:00)的统计数据。理解不同时间周期的数据对于分析市场趋势至关重要。

5. OHLC - 获取K线数据

  • 功能: 返回指定交易对的历史K线(Candlestick)数据。K线图是金融市场技术分析中常用的一种图表,它以图形方式展示了特定时间段内资产的开盘价、最高价、最低价和收盘价。
  • Endpoint: /0/public/OHLC
  • 方法: GET
  • 参数:
    • pair (必须): 指定要查询的交易对。例如, ADAUSD 表示 Cardano (ADA) 对美元 (USD) 的交易对。 务必使用正确的交易对代码,大小写敏感。
    • interval (可选): K线的时间间隔,单位为分钟。用于确定每根K线所代表的时间长度。可选值包括 1 , 5 , 15 , 30 , 60 (1小时), 240 (4小时), 1440 (1天), 10080 (1周), 21600 (15天)。默认为 1 分钟。选择合适的时间间隔取决于分析的周期和目的。更短的间隔适合日内交易,更长的间隔适合长期投资分析。
    • since (可选): 返回指定Unix时间戳之后的数据。这是一个整数,代表自1970年1月1日UTC午夜以来经过的秒数。使用此参数可以获取特定时间段内的K线数据,例如,获取过去一周的数据。如果不指定,则返回最近的K线数据。
  • 返回示例:
    
    {
      "error": [],
      "result": {
        "ADAUSD": [
          [
            1678886400,
            "0.31342",
            "0.31361",
            "0.31342",
            "0.31357",
            "20",
            "6.27140000",
            14
          ],
          [
            1678886460,
            "0.31357",
            "0.31364",
            "0.31355",
            "0.31364",
            "15",
            "4.70490000",
            5
          ]
        ]
      }
    }
    
            

    每个数组元素代表一根K线,包含以下按顺序排列的信息:

    • 时间戳 (Unix timestamp): K线开始的时间,表示为自1970年1月1日UTC午夜以来经过的秒数。
    • 开盘价 (Open): 在K线时间段开始时的价格。
    • 最高价 (High): 在K线时间段内的最高价格。
    • 最低价 (Low): 在K线时间段内的最低价格。
    • 收盘价 (Close): 在K线时间段结束时的价格。
    • 成交量 (Volume): 在K线时间段内交易的资产数量。
    • 加权平均价 (VWAP, Volume Weighted Average Price): 根据成交量计算的平均价格,更准确地反映了市场参与者的实际交易价格。
    • 成交笔数 (Count): 在K线时间段内发生的交易次数。

    error 字段为空数组表示请求成功。如果发生错误,该数组将包含错误代码和描述。

6. Depth - 获取市场深度

  • 功能: 返回指定交易对的实时市场深度数据,详细展示买单(bids)和卖单(asks)的挂单价格和数量,帮助用户了解市场的供需状况和流动性。
  • Endpoint: /0/public/Depth
  • 方法: GET 。 使用GET方法发送HTTP请求。
  • 参数:
    • pair (必须): 指定要查询的交易对。例如, ADAUSD 表示 Cardano (ADA) 与美元 (USD) 的交易对。务必提供有效的交易对代码。
    • count (可选): 返回的挂单数量,默认为 20 。该参数允许用户自定义返回的深度数据量,数值越大,获取的市场深度信息越全面,但也会增加数据处理量和网络传输时间。可以设置为例如50, 100 等。
  • 返回示例:
  • 当成功请求市场深度数据时,服务器将返回一个JSON格式的响应。以下是一个示例:

    
    {
      "error": [],
      "result": {
        "ADAUSD": {
          "asks": [
            [
              "0.32466",
              "20",
              1678886400
            ],
            [
              "0.32467",
              "20",
              1678886400
            ]
          ],
          "bids": [
            [
              "0.32445",
              "20",
              1678886400
            ],
            [
              "0.32444",
              "20",
              1678886400
            ]
          ]
        }
      }
    }
    
    

    数据结构详解:

    • error : 包含错误信息的数组。如果请求成功,该数组为空。
    • result : 包含实际市场深度数据的对象。
    • ADAUSD : 请求的交易对。
    • asks : 卖单(ask)数组。每个数组元素代表一个挂单。
      • 每个卖单元素包含三个值:
        • 价格 ( 0.32466 ): 卖单的挂单价格。
        • 数量 ( 20 ): 该价格下的挂单数量(ADA)。
        • 时间戳 ( 1678886400 ): 挂单的时间戳,表示挂单产生的时间,为Unix时间戳格式。
    • bids : 买单(bid)数组。结构与 asks 类似。
      • 每个买单元素包含三个值:
        • 价格 ( 0.32445 ): 买单的挂单价格。
        • 数量 ( 20 ): 该价格下的挂单数量(ADA)。
        • 时间戳 ( 1678886400 ): 挂单的时间戳,为Unix时间戳格式。

    其中, asks 是卖单,按照价格升序排列。 bids 是买单,按照价格降序排列。每个数组元素包含挂单价格、数量和时间戳。价格是字符串类型,数量表示在该价格上的挂单数量,时间戳通常是 Unix 时间戳,表示挂单被记录的时间。

7. Trades - 获取最近成交记录

  • 功能: 返回指定交易对的最近成交记录,用于分析市场动态和交易活动。
  • Endpoint: /0/public/Trades
  • 方法: GET
  • 参数:
    • pair (必须): 指定要查询的交易对,例如 "ADAUSD"。交易对的选取决定了成交记录的范围。
    • since (可选): 返回指定时间戳之后的数据,以Unix时间戳格式表示。该参数允许用户筛选特定时间段内的成交记录,便于回溯分析。
  • 返回示例:

    { "error": [], "result": { "ADAUSD": [ [ "0.32478", "0.50000000", 1678886400, "b", "m", "" ], [ "0.32478", "2.00000000", 1678886400, "s", "m", "" ] ], "last": "1678886400000000000" } }

    返回结果是一个包含成交数据的JSON对象。 error 字段为空数组表示请求成功。 result 字段包含指定交易对的成交记录以及最后一条数据的纳秒级时间戳。

    每个数组元素代表一笔成交记录,包含以下信息:成交价格、成交数量、Unix时间戳(秒级)、买/卖方向( b 表示买入, s 表示卖出)、订单类型( m 表示市价单, l 表示限价单)和其他可能的附加信息。 成交价格代表该笔交易的实际成交价格,成交数量代表该笔交易的成交数量。

    last 字段是最后一条数据的纳秒级时间戳,可用于后续请求,以便获取最新的成交记录。通过记录并更新 last 值,可以实现增量式的数据获取。

8. Spread - 获取买卖价差

  • 功能: 返回指定交易对的买卖价差数据,买卖价差是衡量市场流动性的重要指标,反映了买方愿意支付的最高价格(卖一价)和卖方愿意接受的最低价格(买一价)之间的差异。较小的价差通常意味着更高的流动性。
  • Endpoint: /0/public/Spread
  • 方法: GET
  • 参数:
    • pair (必须): 指定要查询的交易对。例如, ADAUSD 表示 Cardano 对美元的交易对。支持所有交易所提供的交易对。
    • since (可选): 返回指定时间戳之后的数据,用于增量式地获取数据。该时间戳应为 Unix 时间戳。如果未提供,则返回最新的价差数据。
  • 返回示例:
                
    {
      "error": [],
      "result": {
        "ADAUSD": [
          [
            1678886400,
            "0.32445",
            "0.32466"
          ],
          [
            1678886460,
            "0.32445",
            "0.32466"
          ]
        ],
        "last": "1678886460000000000"
      }
    }
                
            

    返回结果是一个 JSON 对象。 error 字段是一个数组,包含错误信息。如果请求成功,则该数组为空。 result 字段包含实际的价差数据。每个交易对对应一个数组,数组中的每个元素都包含一个时间戳、买一价和卖一价。买一价(bid)是最高的出价,卖一价(ask)是最低的要价。 last 字段是最后一条数据的纳秒级时间戳,可用于后续请求的 since 参数,以避免重复数据。时间戳反映了该价差记录生成的确切时间。 例如,上述结果表示在时间戳 1678886400 和 1678886460 时,ADAUSD 的买一价均为 0.32445,卖一价均为 0.32466。

私有 API

私有 API 需要身份验证才能访问,主要用于账户管理和交易操作,例如查询账户余额、提交订单和管理现有持仓。为了保障账户安全,访问私有 API 必须提供有效的身份验证信息。

使用私有 API 需要生成 API 密钥,并使用密钥对每个请求进行签名。API 密钥包含公钥和私钥,公钥用于识别身份,私钥用于生成签名。签名是对请求数据进行加密处理后的结果,用于验证请求的完整性和真实性,防止篡改和重放攻击。务必妥善保管私钥,避免泄露,一旦泄露应立即更换密钥。使用私有 API时,请严格遵守Kraken的安全规范,以确保您的账户和资金安全。

常用的私有 API 接口包括:

  • Balance : 获取账户余额。返回账户中各种加密货币和法币的可用余额。
  • TradeBalance : 获取交易余额。显示用于交易的可用资金,通常会扣除已占用资金(例如挂单占用的资金)。
  • OpenOrders : 获取未成交订单。列出当前账户中所有尚未完全成交的订单,包括订单类型、价格、数量等详细信息。
  • ClosedOrders : 获取已成交订单。返回账户中已完成成交的订单历史记录,可以指定时间范围进行查询。
  • QueryOrders : 查询订单信息。根据订单ID查询特定订单的详细信息,包括订单状态、成交情况、手续费等。
  • TradesHistory : 获取交易历史。返回账户的所有交易记录,包括买入、卖出、时间戳、交易对等信息,用于审计和分析。
  • QueryTrades : 查询交易信息。根据交易ID查询特定交易的详细信息。
  • OpenPositions : 获取持仓信息。显示当前账户中持有的所有仓位,包括交易对、数量、开仓价格、盈亏等信息。
  • Ledgers : 获取资金流水。返回账户所有资金变动记录,包括存款、提款、交易、手续费等,可以按类型和时间范围过滤。
  • QueryLedgers : 查询资金流水信息。根据资金流水ID查询特定资金流水的详细信息。
  • AddOrder : 下单。提交新的交易订单,可以指定交易对、订单类型(市价单、限价单等)、数量、价格等参数。
  • CancelOrder : 撤单。取消尚未成交的订单,需要提供订单ID。
  • CancelAll : 撤销所有订单。一次性取消账户中所有未成交的订单。这是一个风险较高的操作,请谨慎使用。
  • GetWebSocketsToken : 获取 WebSocket 令牌 (用于 WebSocket API)。用于建立WebSocket连接,实现实时数据推送,例如实时行情和订单更新。

由于私有 API 涉及账户安全和资金操作,具体使用方法请参考 Kraken 官方 API 文档,务必仔细阅读并理解每个接口的参数和返回值。强烈建议在生产环境中使用之前,先在测试环境进行充分的测试。 Kraken 官方文档提供了详细的示例代码和说明,帮助开发者正确使用私有 API。 务必妥善保管 API 密钥,避免泄露,并定期更换 API 密钥以提高安全性。