KuCoin API交易指南:新手也能快速上手!

频道: 词典 日期: 浏览:57

KuCoin API 开发者指南

本文档旨在为开发者提供使用 KuCoin API 进行交易和数据获取的详细指导。它涵盖了 API 的各个方面,包括身份验证、请求方法、数据格式以及常用的 API 接口。

1. 概述

KuCoin API 是一套强大的工具,它允许开发者以编程方式与 KuCoin 加密货币交易所进行深度交互,从而自动化交易策略、获取市场洞察以及管理账户。通过 API 接口,开发者可以绕过传统的手动操作,实现高效、自动化的交易和数据分析。

  • 交易: KuCoin API 提供了丰富的交易功能,允许开发者创建、修改和取消各种类型的订单,包括限价单、市价单、止损单等。开发者可以实时监控订单状态,确保交易策略的有效执行。 API 还支持高级订单类型,例如冰山订单和时间加权平均价格 (TWAP) 订单,以满足不同交易场景的需求。
  • 市场数据: API 提供了全面的市场数据访问能力,涵盖实时行情、历史K线数据、深度图、最近成交记录等关键信息。开发者可以利用这些数据进行技术分析、量化交易策略回测,以及实时监控市场动态。API 支持多种时间粒度的数据请求,从分钟级别到月级别,满足不同时间尺度的分析需求。
  • 账户信息: KuCoin API 允许开发者安全地访问账户信息,包括账户余额、可用资金、持仓信息、交易历史等。开发者可以通过 API 管理多个 API 密钥,每个密钥可以分配不同的权限,从而提高账户安全性。API 还支持资金划转功能,方便开发者在不同账户之间进行资金调拨。

2. 身份验证

要通过 API 访问 KuCoin 交易平台,身份验证是必不可少的步骤。这需要使用有效的 API 密钥对,该密钥对由两部分组成: API Key API Secret API Key 相当于您的用户名,用于标识您的身份,而 API Secret 则类似于密码,用于加密签名请求,确保交易的安全性。这两个密钥组合使用,允许您安全地与 KuCoin API 进行交互,执行交易、获取市场数据等操作。

您可以通过 KuCoin 官方网站的用户控制面板中的 API 管理页面来创建和管理您的 API 密钥。在 API 管理页面,您可以创建新的 API 密钥对,查看现有密钥,并根据需要撤销或重新生成密钥。创建 API 密钥时,请务必启用适当的权限,例如交易、提现或只读访问权限,以确保您的密钥只能执行您授权的操作。保管好您的 API Secret ,避免泄露,并定期轮换您的 API 密钥以提高安全性。请注意,某些高级 API 功能可能需要额外的身份验证或 KYC (Know Your Customer) 验证。

2.1 创建 API 密钥

  1. 登录您的 KuCoin 账户。这是进行任何 API 操作的前提,确保您已完成 KuCoin 的注册和身份验证流程。
  2. 导航到 API 管理页面。在 KuCoin 交易所的网站或应用程序中,API 管理页面通常位于用户个人中心或账户设置的“API 管理”或类似的选项下。具体的路径可能会因 KuCoin 平台的更新而有所调整,请仔细查找。
  3. 点击“创建 API 密钥”按钮。进入 API 管理页面后,您会看到一个创建新 API 密钥的按钮。点击该按钮开始创建流程。
  4. 设置 API 密钥的名称、权限和 IP 限制(可选)。
    • 名称: 为您的 API 密钥设置一个易于识别的名称,以便于您管理和区分不同的 API 密钥。例如,您可以根据用途命名,如“交易机器人”、“数据分析”等。
    • 权限: 这是 API 密钥配置中最关键的部分。您需要仔细选择 API 密钥需要拥有的权限。常见的权限包括:
      • 交易权限: 允许 API 密钥进行买入和卖出操作。如果您使用 API 密钥进行自动交易,则必须启用此权限。
      • 充提币权限: 允许 API 密钥进行充值和提现操作。请谨慎授予此权限,除非您明确需要通过 API 进行资金管理。
      • 只读权限: 允许 API 密钥访问账户信息、市场数据等,但不能进行任何交易或资金操作。如果您仅需要获取数据,建议使用只读权限。
      请只授予 API 密钥所需的最低权限,以降低安全风险。
    • IP 限制(可选): 强烈建议您设置 IP 限制。这将限制 API 密钥只能从指定的 IP 地址访问 KuCoin 交易所。这可以有效防止 API 密钥被盗用。您可以添加单个 IP 地址或 IP 地址段。如果您不确定您的 IP 地址,可以使用在线工具查询。
  5. 生成 API 密钥对,包括 API Key API Secret 请务必安全地保存您的 API Secret ,因为您只能看到一次。
    • API Key 类似于您的用户名,用于标识您的 API 密钥。
    • API Secret 类似于您的密码,用于对 API 请求进行签名。 API Secret 极其重要,一旦泄露,您的账户将面临风险。 请使用安全的密码管理器或加密存储方式保存。
  6. 根据需求绑定IP,建议绑定IP。 再次强调绑定IP的重要性。 即使您的 API Key 和 Secret 泄露,如果攻击者的 IP 地址不在您允许的范围内,他们也无法使用您的 API 密钥。 这是一种有效的安全措施。

2.2 API 密钥权限

KuCoin API 密钥提供了细粒度的权限控制,允许用户根据其特定需求分配不同的访问级别。这增强了安全性,并确保API密钥仅具有执行其预期功能所需的必要权限。 以下是KuCoin API密钥可具有的权限级别,以及每个级别的详细说明:

  • 只读 (Read Only): 此权限级别允许API密钥访问KuCoin平台的市场数据和账户信息。拥有只读权限的API密钥可以检索诸如当前市场价格、历史交易数据、账户余额、订单历史记录等信息。 然而,关键在于,拥有只读权限的API密钥 不能 执行任何交易操作,例如下单、取消订单或修改订单。 此权限级别非常适合需要监控市场数据或获取账户信息的应用程序,例如投资组合跟踪器或数据分析工具。
  • 交易 (Trade): 交易权限允许API密钥在KuCoin平台上执行交易操作。 拥有此权限的API密钥可以下单(买入或卖出)、取消订单和修改现有订单。 但是,交易权限 包括提取资金的权限。 此权限级别适用于自动化交易机器人、算法交易策略以及需要代表用户执行交易操作的应用程序。 强烈建议限制交易权限的IP访问白名单,以进一步提高安全性。
  • 提现 (Withdraw): 这是最高的权限级别,允许API密钥从KuCoin账户提取资金。 由于其固有的风险,提现权限通常需要额外的安全验证步骤,例如双因素身份验证(2FA)或KYC验证。 此权限级别应谨慎使用,并且仅应授予需要自动执行提现的受信任应用程序。启用提现权限通常还需要KuCoin账户所有者的明确批准,并且可能受到提现限额的限制。强烈建议仅在绝对必要时才启用提现权限,并且密切监控与具有此权限的API密钥相关的活动。

在选择API密钥的权限级别时,务必仔细考虑您的应用场景和安全要求。 为API密钥分配不必要的权限会增加安全漏洞的风险。 始终遵循最小权限原则,仅授予API密钥执行其预期功能所需的最低权限。强烈建议定期审查和更新API密钥权限,以确保它们仍然符合您的需求和安全策略。 实施IP限制和定期密钥轮换也是增强API密钥安全性的良好实践。

2.3 使用 API 密钥进行身份验证

为了确保安全地访问 API,每个 API 请求都需要进行身份验证。您需要在每个 HTTP 请求头中包含以下关键信息,以便服务器验证您的身份并授权访问:

  • KC-API-KEY : 您的 API 密钥。 这是您账户的唯一标识符,用于识别您的请求来源。 请妥善保管您的 API 密钥,避免泄露。
  • KC-API-SIGN : 请求的数字签名。 此签名是通过使用您的 API 密钥、请求参数和密钥(Passphrase)对请求进行加密哈希计算生成的。 服务器使用此签名来验证请求的完整性,确保请求未被篡改。
  • KC-API-TIMESTAMP : 当前的 Unix 时间戳(秒)。 时间戳用于防止重放攻击。 时间戳表示请求发送的时间,服务器会检查时间戳是否在有效的时间窗口内。 确保您的系统时间与 UTC 时间同步,否则请求可能会被拒绝。
  • KC-API-PASSPHRASE : 创建 API 密钥时设置的密码。 Passphrase 是用于生成签名的密钥。 为了安全起见,请选择一个强密码作为 Passphrase。 请勿与他人共享您的 Passphrase。
  • KC-API-KEY-VERSION : API 密钥的版本号。 默认为 2。 随着 API 的发展,版本号可能会更新。 请确保使用最新的 API 密钥版本,以便获得最佳的性能和安全性。

正确设置这些 HTTP 请求头对于成功地调用 API 至关重要。 请务必仔细阅读 API 文档,了解如何正确生成签名,并确保您包含所有必需的请求头。 错误的身份验证信息可能会导致请求失败。

签名计算方式:

  1. 将以下参数按照顺序拼接成一个原始字符串,作为签名的基准:
    • timestamp :发起请求时的时间戳,通常为Unix时间戳。
    • method :HTTP请求方法,例如 GET POST PUT DELETE ,必须使用大写。
    • requestPath :请求的API路径,不包含域名和查询参数,以 / 开头。
    • body (如果存在):请求体内容,通常为JSON格式。如果请求体为空,则不包含此项。 确保请求body是原始的字符串格式,未经任何编码处理。
    拼接顺序严格按照上述顺序,任何顺序错误都会导致签名验证失败。
  2. 使用您的 API Secret (API密钥) 对该字符串进行 HMAC-SHA256 加密。
    • HMAC-SHA256 是一种基于密钥的哈希消息认证码算法,提供完整性和认证性。
    • 您的 API Secret 应该妥善保管,避免泄露,因为它相当于访问API的密码。
    • 不同的编程语言或工具库提供了不同的 HMAC-SHA256 实现,请根据您的开发环境选择合适的实现方式。
    • 确保使用的编码方式与 API Secret 的编码方式一致,通常为 UTF-8。
  3. 将加密后的结果进行 Base64 编码。
    • Base64 是一种常用的编码方式,用于将二进制数据转换为文本字符串,方便在网络上传输。
    • Base64 编码后的字符串可以直接作为签名参数添加到请求头或请求参数中。
    • 不同的编程语言或工具库提供了不同的 Base64 编码实现,请根据您的开发环境选择合适的实现方式。
    • 某些Base64实现可能会在编码后的字符串中添加换行符,请确保移除这些换行符,以保证签名的正确性。

示例 (Python):

此示例演示如何使用 Python 生成用于访问加密货币交易所 API 的签名,例如 KuCoin 或类似的平台。签名用于验证请求的来源并确保数据的完整性。

import hashlib
引入 `hashlib` 模块,它提供了多种加密哈希算法(如 SHA256)。

import hmac
引入 `hmac` 模块,用于生成带密钥的哈希消息认证码 (HMAC)。 HMAC 用于验证数据的完整性和真实性。

import base64
引入 `base64` 模块,用于将二进制数据编码为 ASCII 字符串,以便在 HTTP 标头中传输签名。

import time
引入 `time` 模块,用于获取当前时间戳,该时间戳是生成签名时的重要组成部分。

api_secret = "your_api_secret"
api_key = "your_api_key"
api_passphrase = "your_api_passphrase"
需要替换为从交易所获取的 API 密钥、密钥和密码。 API 密钥用于识别您的帐户,API 密钥用于签名请求,API 密码用于提供额外的安全性(如果交易所要求)。 请务必妥善保管这些凭据,不要泄露给他人。

def generate_signature(timestamp, method, requestPath, body=""):
该函数负责生成签名。 它接受时间戳、HTTP 方法(例如 GET、POST)、请求路径和请求正文(如果存在)作为参数。

message = str(timestamp) + method + requestPath + body
创建一个消息字符串,它是时间戳、HTTP 方法、请求路径和请求正文的串联。 此消息将用于生成 HMAC。

hmac_key = api_secret.encode('utf-8')
将 API 密钥编码为 UTF-8 字节字符串。 这是 HMAC 算法的要求。

message = message.encode('utf-8')
将消息编码为 UTF-8 字节字符串。 这是 HMAC 算法的要求。

signature = hmac.new(hmac_key, message, hashlib.sha256)
使用 SHA256 算法创建新的 HMAC 对象。 `hmac_key` 是用于对消息进行哈希处理的密钥,`message` 是要哈希处理的数据。

signature_b64 = base64.b64encode(signature.digest()).decode('utf-8')
计算 HMAC 摘要(哈希值),并使用 Base64 对其进行编码。 Base64 编码的结果是一个 ASCII 字符串,可以在 HTTP 标头中安全地传输。

return signature_b64
返回 Base64 编码的签名。

timestamp = str(int(time.time()))
获取当前的 Unix 时间戳(自 Epoch 以来的秒数),并将其转换为字符串。

method = "GET"
定义 HTTP 方法。 在此示例中,它是 GET。

requestPath = "/api/v1/market/tickers"
定义请求路径。 在此示例中,它是 `/api/v1/market/tickers`。 这是一个示例路径,实际使用需要替换为交易所提供的接口地址。

signature = generate_signature(timestamp, method, requestPath)
调用 `generate_signature` 函数以生成签名。

headers = {
创建一个包含请求标头的字典。

"KC-API-KEY": api_key,
将 API 密钥添加到标头。

"KC-API-SIGN": signature,
将签名添加到标头。

"KC-API-TIMESTAMP": timestamp,
将时间戳添加到标头。

"KC-API-PASSPHRASE": api_passphrase,
将 API 密码添加到标头(如果交易所要求)。

"KC-API-KEY-VERSION": "2"
指示 API 密钥的版本(如果交易所要求)。

发送请求 (示例使用 requests 库)

在Python中, requests 库是一个流行的HTTP客户端库,用于发送HTTP请求。以下代码示例展示了如何使用 requests 库向 KuCoin API 发送 GET 请求,并打印服务器的响应。

确保已经安装了 requests 库。可以使用以下命令进行安装:

pip install requests

接下来,可以使用以下代码示例来发送请求:

import requests

# 定义 API 的基础 URL 和请求路径
api_base_url = "https://api.kucoin.com"
requestPath = "/api/v1/market/stats" # 示例请求路径,获取市场统计数据

# 构建完整的 URL
url = api_base_url + requestPath

# 定义请求头,例如添加 API 密钥或其他认证信息(如果需要)
headers = {
    "KC-API-KEY": "YOUR_API_KEY",  # 替换为你的 API 密钥 (如果需要)
    "KC-API-SECRET": "YOUR_API_SECRET", # 替换为你的 API 密钥 (如果需要)
    "KC-API-PASSPHRASE": "YOUR_API_PASSPHRASE" # 替换为你的 API 密钥 (如果需要)
}

try:
    # 发送 GET 请求
    response = requests.get(url, headers=headers)

    # 检查响应状态码
    response.raise_for_status()  # 如果状态码不是 200 OK,则引发 HTTPError 异常

    # 解析 JSON 响应
    data = response.()

    # 打印完整的 JSON 响应内容
    print(data)

    # 你可以根据需要提取特定的数据
    # 例如:打印交易量
    #print(data['data']['vol'])

except requests.exceptions.HTTPError as errh:
    print(f"HTTP Error: {errh}")
except requests.exceptions.ConnectionError as errc:
    print(f"Connection Error: {errc}")
except requests.exceptions.Timeout as errt:
    print(f"Timeout Error: {errt}")
except requests.exceptions.RequestException as err:
    print(f"Request Error: {err}")
except Exception as e:
    print(f"An unexpected error occurred: {e}")

代码解释:

  • import requests : 导入 requests 库。
  • api_base_url requestPath : 定义了 API 的基础 URL 和请求路径。请根据需要修改 requestPath 以访问不同的 API 端点。
  • headers : 定义了请求头。KuCoin API 可能需要 API 密钥或其他认证信息,请将 YOUR_API_KEY , YOUR_API_SECRET , YOUR_API_PASSPHRASE 替换为你的实际密钥。根据API文档添加其他必要的头部信息。
  • response = requests.get(url, headers=headers) : 使用 requests.get() 函数发送 GET 请求。 url 参数指定请求的 URL, headers 参数指定请求头。
  • response.raise_for_status() : 检查响应状态码。如果状态码不是 200 OK,则会引发 HTTPError 异常,方便错误处理。
  • data = response.() : 将响应内容解析为 JSON 格式。
  • print(data) : 打印完整的 JSON 响应内容。
  • 异常处理:使用 try...except 块捕获可能发生的异常,例如 HTTPError、ConnectionError、Timeout 和 RequestException,并打印错误信息,提高代码的健壮性。

重要提示:

  • 请务必阅读 KuCoin API 的官方文档,了解每个 API 端点的具体要求和参数。
  • 在生产环境中,应妥善保管 API 密钥,避免泄露。
  • 处理 API 响应时,应根据 API 文档的说明,正确解析 JSON 数据,并进行必要的错误处理。
  • 有些 API 端点可能需要身份验证。需要在请求头中添加相应的认证信息。

3. 请求方法和数据格式

KuCoin API 遵循 RESTful 架构设计原则,采用标准 HTTP 请求方法来实现资源操作。 以下是 KuCoin API 支持的 HTTP 请求方法及其典型应用场景:

  • GET : 用于从服务器获取资源。例如,获取市场行情数据、账户信息、交易历史等。 GET 请求通常不应包含请求体。
  • POST : 用于向服务器提交数据,创建新的资源或触发特定的服务器端操作。例如,下单、取消订单、申请提币等。 POST 请求通常包含 JSON 格式的请求体,用于传递需要创建或更新的数据。
  • PUT : 用于更新服务器上的资源。与 POST 相比, PUT 通常用于替换资源的全部内容,而 POST 可能只更新部分字段。 KuCoin API 中 PUT 方法的使用相对较少。
  • DELETE : 用于删除服务器上的资源。 例如,取消某个特定订单。 使用 DELETE 方法需要谨慎,确保操作的准确性。

KuCoin API 的请求和响应数据均采用 JSON(JavaScript Object Notation)格式。 JSON 是一种轻量级的数据交换格式,易于阅读和解析,被广泛应用于 Web API 中。 请求体必须是有效的JSON字符串,并且响应体也始终是有效的JSON字符串,以便客户端可以方便地解析数据。 在构造请求时,请确保 Content-Type 请求头设置为 application/ ,以便服务器正确解析请求体。 所有数值类型应注意精度问题,字符串类型需注意编码问题。

4. 常用 API 接口

以下是一些常用的 KuCoin API 接口,它们为开发者提供了访问交易所数据和执行交易的能力:

  • 获取行情数据 (Market Data Endpoints): 这类接口用于获取各种加密货币的实时价格、交易量、最高价、最低价等信息。 例如,可以使用 /api/v1/market/stats 获取特定交易对的 24 小时统计数据,或使用 /api/v1/market/orderbook/level2_20 获取深度为 20 的二级市场订单簿信息。 /api/v1/market/tickers 则可以获取所有交易对的最新成交价信息。
  • 交易接口 (Trade Endpoints): 这类接口允许用户下单、撤单、查询订单状态等。 使用 /api/v1/orders 可以提交买单或卖单,指定交易对、价格、数量和交易类型。 使用 /api/v1/orders/{orderId} 可以查询特定订单的详细信息,包括订单状态、成交量和成交价格。 通过 /api/v1/orders 使用 DELETE 方法可以撤销未成交的订单。
  • 账户接口 (Account Endpoints): 这类接口用于查询用户的账户余额、交易历史等信息。 /api/v1/accounts 可以查询用户的账户信息,包括可用余额、冻结余额等。 使用 /api/v1/fills 可以查询用户的交易历史记录,包括交易时间、交易对、价格和数量。 为了安全起见,此类接口通常需要进行身份验证,比如通过 API 密钥和签名。
  • WebSocket 接口: KuCoin 提供了 WebSocket API,允许开发者实时订阅市场数据和账户信息。 开发者可以通过 WebSocket 接收价格更新、订单簿变化和账户余额变动等信息,而无需频繁地轮询 API。 这对于开发高频交易策略和实时监控工具非常有用。 常用的 WebSocket 主题包括 /market/ticker:{symbol} 用于订阅特定交易对的最新成交价,以及 /market/orderbook/level2:{symbol} 用于订阅特定交易对的二级市场订单簿。
  • 资金划转接口 (Transfer Endpoints): 这些接口允许用户在不同的 KuCoin 账户之间转移资金,例如从主账户转移到交易账户,或从交易账户转移到合约账户。 这类接口通常用于管理资金分配和执行不同的交易策略。

4.1 获取所有交易对信息

  • Endpoint: /api/v1/symbols
  • Method: GET
  • 描述: 获取 KuCoin 交易所上所有可用的交易对信息。该接口提供全面的市场概览,包括交易对名称、基础货币、报价货币、交易数量精度、价格精度等关键参数,方便用户快速了解市场情况。

以下是一个示例响应,展示了交易对信息的结构:


[
   {
      "symbol":  "BTC-USDT",
      "name":  "BTC-USDT",
      "baseCurrency": "BTC",
      "quoteCurrency": "USDT",
      "baseMinSize": "0.000001",
      "quoteMinSize": "0.0001",
      "baseMaxSize": "10000",
      "quoteMaxSize":  "1000000",
      "baseIncrement":  "0.000001",
      "quoteIncrement": "0.0001",
      "feeCurrency": "KCS",
      "enableTrading": true,
      "isMarginEnabled": true,
      "pricePrecision": 2,
      "sizePrecision": 6
  },
   ...
]

字段解释:

  • symbol : 交易对的唯一标识符,例如 "BTC-USDT"。
  • name : 交易对的名称,与 symbol 相同,便于阅读。
  • baseCurrency : 基础货币,也称为交易货币,例如 "BTC"。用户使用报价货币购买基础货币。
  • quoteCurrency : 报价货币,也称为计价货币,例如 "USDT"。用户使用报价货币衡量基础货币的价值。
  • baseMinSize : 基础货币的最小交易数量,例如 "0.000001"。低于此数量的交易将被拒绝。
  • quoteMinSize : 报价货币的最小交易数量,例如 "0.0001"。低于此数量的交易将被拒绝。
  • baseMaxSize : 基础货币的最大交易数量,例如 "10000"。高于此数量的交易将被拒绝。
  • quoteMaxSize : 报价货币的最大交易数量,例如 "1000000"。高于此数量的交易将被拒绝。
  • baseIncrement : 基础货币的交易数量增量,例如 "0.000001"。交易数量必须是此增量的整数倍。
  • quoteIncrement : 报价货币的交易数量增量,例如 "0.0001"。交易数量必须是此增量的整数倍。
  • feeCurrency : 用于支付交易手续费的货币,例如 "KCS"。
  • enableTrading : 指示该交易对是否启用交易。 true 表示启用, false 表示禁用。
  • isMarginEnabled : 指示该交易对是否支持杠杆交易。 true 表示支持, false 表示不支持。
  • pricePrecision : 价格精度,表示价格小数点后的位数,例如 "2"。
  • sizePrecision : 数量精度,表示交易数量小数点后的位数,例如 "6"。

通过分析这些参数,用户可以更好地理解每个交易对的交易规则和风险,制定更合理的交易策略。

4.2 获取单个交易对的行情数据

  • Endpoint: /api/v1/market/ticker?symbol={symbol}
  • Method: GET
  • 描述: 获取指定交易对的实时行情数据,涵盖最新成交价、最高价、最低价、24小时成交量、以及买一价和卖一价等关键市场指标。此接口为用户提供快速了解特定交易对当前市场状态的途径。

以下是一个示例响应,展示了返回数据的结构:

{ "code": "200000", "data": { "symbol": "BTC-USDT", "sequence": "1678888888888", "bestBid": "20000.00", "bestBidSize": "0.1", "bestAsk": "20001.00", "bestAskSize": "0.1", "price": "20000.50", "size": "1.0", "time": 1678888888888 } }

字段解释:

  • code : 返回码,"200000" 通常表示成功。
  • data : 包含实际行情数据的对象。
  • symbol : 交易对的名称,例如 "BTC-USDT"。
  • sequence : 交易所内部的序列号,用于标识行情更新的顺序。
  • bestBid : 当前最佳买入价 (买一价)。
  • bestBidSize : 当前最佳买入价对应的数量 (买一量)。
  • bestAsk : 当前最佳卖出价 (卖一价)。
  • bestAskSize : 当前最佳卖出价对应的数量 (卖一量)。
  • price : 最新成交价。
  • size : 最新成交量。
  • time : 行情数据的时间戳,通常为 Unix 时间戳(毫秒)。

注意事项:

  • symbol 参数区分大小写,请确保提供正确的交易对符号。
  • time 字段提供的时间戳可以用于跟踪行情的更新时间。
  • 请注意 bestBid bestAsk 可能随时变化,反映了市场供需的变化。
  • sequence 可以用来检查行情数据是否丢失,如果序列号不连续,可能表示存在数据缺漏。

4.3 获取交易对的深度数据

  • Endpoint: /api/v1/market/orderbook/level2_20?symbol={symbol}
  • Method: GET
  • 描述: 获取指定交易对的 Level 2 深度数据(买单和卖单),展示市场的买卖盘口信息。默认返回前 20 个最佳价格的订单,有助于快速了解市场挂单情况和流动性分布。 通过调整请求参数,您可以获取不同深度的订单信息,例如, level2_50 可以获取前 50 个价格的订单,从而更全面地分析市场深度。 订单簿数据是高频交易和算法交易的重要参考依据,分析买卖盘的分布可以帮助交易者制定更有效的交易策略。请注意,频繁请求此接口可能会对服务器造成压力,建议合理设置请求频率。

4.4 下单

  • Endpoint: /api/v1/orders
  • Method: POST
  • 描述: 创建一个新的订单。此接口允许用户提交买单或卖单,以在交易平台上执行。用户可以通过此接口指定交易对、订单类型(限价单、市价单等)、数量和价格等参数。成功提交订单后,系统将根据市场情况尝试撮合交易。
  • 请求参数(Request Parameters):
    • symbol (必填, String): 交易对,例如 "BTCUSDT"。代表希望交易的两种资产。
    • side (必填, String): 订单方向,"BUY" (买入) 或 "SELL" (卖出)。
    • type (必填, String): 订单类型,例如 "LIMIT" (限价单), "MARKET" (市价单), "STOP_LOSS" (止损单), "TAKE_PROFIT" (止盈单)等。不同的订单类型会影响订单的执行方式。
    • quantity (必填, Number): 订单数量,即想要买入或卖出的资产数量。
    • price (可选, Number): 订单价格,仅在限价单 (LIMIT) 和止盈止损单中需要指定。
    • timeInForce (可选, String): 订单有效方式,例如 "GTC" (Good-Til-Canceled,直到取消), "IOC" (Immediate-Or-Cancel,立即成交或取消), "FOK" (Fill-Or-Kill,完全成交或取消)。
    • stopPrice (可选, Number): 触发价格,仅在止损单和止盈单中需要指定。当市场价格达到此价格时,订单将被触发。
    • clientOrderId (可选, String): 客户端自定义的订单ID,用于在客户端识别订单。如果未提供,系统将自动生成。
  • 响应(Response):
    • 成功 (Success): 返回新创建订单的详细信息,包括订单ID、状态、交易对、数量、价格等。
    • 失败 (Failure): 返回错误码和错误信息,说明订单创建失败的原因。常见错误包括:参数错误、余额不足、交易对不存在、市场关闭等。
  • 注意事项(Important Notes):
    • 在提交订单之前,请仔细检查所有参数,确保其准确无误。
    • 不同的交易平台对订单类型和参数的支持可能有所不同,请参考平台的API文档。
    • 订单的执行取决于市场情况,可能不会立即成交。
    • 请注意风险管理,合理设置止损和止盈价格。

请求体:

请求体包含了提交订单所需的关键参数,以下是一个示例,详细解释了每个字段的含义:

{
  "clientOid": "your_order_id",
  "side": "buy",
  "symbol": "BTC-USDT",
  "type": "limit",
  "price":  "20000",
  "size": "0.01",
  "timeInForce": "GTC"
}

字段说明:

  • clientOid (字符串): 客户端订单ID,用于唯一标识您的订单。强烈建议使用易于追踪和管理的唯一标识符。这允许您在系统内外轻松关联和检索特定订单。最大长度通常有限制,请查阅API文档。
  • side (字符串): 交易方向,指定是买入还是卖出。有效值包括 "buy" (买入) 和 "sell" (卖出)。
  • symbol (字符串): 交易对,表示要交易的资产对。例如, "BTC-USDT" 表示比特币 (BTC) 兑美元稳定币 (USDT)。不同的交易所支持的交易对不同,请务必确认。
  • type (字符串): 订单类型,指定订单的执行方式。这里使用 "limit" (限价单),表示只有当市场价格达到或优于指定价格时才会执行。其他常见的订单类型包括市价单 ( "market" ) 等。不同类型的订单具有不同的参数和行为。
  • price (字符串): 订单价格,只有在订单类型为限价单时才需要指定。表示您愿意买入或卖出的价格。精度要求根据不同的交易对而变化,需要遵循交易所的规则。
  • size (字符串): 订单数量,表示要买入或卖出的资产数量。数量的最小单位和精度由交易对决定,务必参考交易所的文档。
  • timeInForce (字符串): 订单有效期,定义订单在交易所中保持活跃的时间。这里使用 "GTC" (Good-Till-Cancelled),表示订单将一直有效,直到被完全执行或手动取消。其他常见的选项包括 "IOC" (Immediate-Or-Cancel) 和 "FOK" (Fill-Or-Kill)。具体含义请查阅交易所API文档。

注意事项:

  • 所有数值类型(例如 price size )通常以字符串形式传递,以避免浮点数精度问题。
  • 请务必仔细阅读交易所的API文档,了解每个参数的具体要求和限制,以及可用的订单类型和有效期选项。
  • 错误的参数值可能导致订单提交失败,甚至造成资金损失。
  • 不同的交易所可能对请求体的字段名称和格式略有不同。

参数说明:

  • clientOid : 客户端自定义订单 ID (Client Order ID),必须保证在您的交易系统中是唯一的。这是您追踪和管理订单的关键标识符,强烈建议使用具有明确含义的 ID,例如包含时间戳或特定订单生成逻辑的字符串,以便于后续的订单查询和对账。
  • side : 交易方向,指示您希望执行的操作是买入 ( buy ) 还是卖出 ( sell )。买入表示您希望购买指定交易对的标的资产,卖出表示您希望出售已持有的标的资产。请务必根据您的交易策略和市场判断选择正确的交易方向。
  • symbol : 交易对,指定您希望交易的资产组合。例如, BTCUSDT 表示比特币兑泰达币的交易对, ETHBTC 表示以太坊兑比特币的交易对。确保您选择的交易对是交易所支持的,并且您了解该交易对的基础资产及其之间的关系。
  • type : 订单类型,定义了订单执行的方式。常见的订单类型包括:
    • limit : 限价单,允许您指定希望买入或卖出的价格。订单只有在市场价格达到或优于您指定的价格时才会执行。
    • market : 市价单,以当前市场最优价格立即执行订单。市价单通常能够快速成交,但成交价格可能与您的预期存在偏差,尤其是在市场波动剧烈时。
    • stop : 止损单,当市场价格达到您预设的止损价格时,订单会被触发并以市价单的形式执行。止损单用于限制潜在的损失。
    • stopLimit : 止损限价单,结合了止损单和限价单的特性。当市场价格达到止损价格时,订单会被触发并以限价单的形式挂出。这意味着订单只有在市场价格达到或优于您指定的限价时才会成交。
    选择合适的订单类型对于您的交易策略至关重要。
  • price : 价格,仅在限价单 ( limit ) 和止损限价单 ( stopLimit ) 中需要指定。对于限价单,指定您希望买入或卖出的价格。对于止损限价单,指定触发后的限价。价格的精度需要符合交易所的要求。
  • size : 数量,指定您希望交易的标的资产数量。数量的单位取决于交易对,例如,对于 BTCUSDT 交易对,数量通常以比特币 (BTC) 为单位。数量也需要满足交易所的最小交易量限制。
  • timeInForce : 订单有效时间,定义了订单在交易所订单簿中保持有效的时间。常见的有效时间类型包括:
    • GTC (Good-Til-Cancelled): 订单一直有效,直到被完全成交或被您手动取消。
    • IOC (Immediate-Or-Cancel): 订单尝试立即以指定价格或更优价格成交。如果部分成交,未成交的部分会被立即取消。
    • FOK (Fill-Or-Kill): 订单必须立即以指定价格或更优价格完全成交,否则整个订单会被立即取消。
    选择合适的有效时间类型可以帮助您更好地控制订单的执行。

4.5 取消订单

  • Endpoint: /api/v1/orders/{orderId}
  • Method: DELETE
  • 描述: 取消指定 ID 的订单。此操作允许用户撤销先前提交的订单请求,前提是订单尚未完全成交或进入不可撤销的状态。 订单取消成功后,系统将释放订单所占用的相应资产,并更新用户的可用余额。 如果订单已部分成交,取消操作将仅取消剩余未成交的部分。 对于已经完全成交的订单,取消请求将被拒绝。

4.6 获取订单详情

  • Endpoint: /api/v1/orders/{orderId}
  • Method: GET
  • 描述: 获取指定 ID 的订单详情。此接口允许用户通过提供唯一的 orderId 来检索特定订单的完整信息。订单详情包括订单创建时间、订单状态、订单包含的商品列表、总金额、支付方式、收货地址等信息。
  • 请求参数:
    • orderId (路径参数): 必需。要查询的订单的唯一标识符。
  • 请求头:
    • Authorization : 可选。包含有效的身份验证令牌,用于验证用户身份和授权。如果接口需要用户身份验证,则必须提供此头部。
  • 响应示例 (成功):
            
            {
                "orderId": "12345",
                "userId": "user123",
                "orderDate": "2024-01-01T10:00:00Z",
                "status": "已完成",
                "items": [
                    {
                        "productId": "product001",
                        "productName": "比特币",
                        "quantity": 1,
                        "price": 40000
                    },
                    {
                        "productId": "product002",
                        "productName": "以太坊",
                        "quantity": 2,
                        "price": 2000
                    }
                ],
                "totalAmount": 44000,
                "paymentMethod": "USDT",
                "shippingAddress": {
                    "name": "张三",
                    "address": "北京市海淀区",
                    "phone": "13800000000"
                }
            }
            
            
  • 响应示例 (失败):
            
            {
                "error": "OrderNotFound",
                "message": "找不到指定 ID 的订单。"
            }
            
            
  • 错误码:
    • 400 Bad Request : 请求格式错误或缺少必需的参数。
    • 401 Unauthorized : 未经授权,需要提供有效的身份验证令牌。
    • 404 Not Found : 找不到指定 ID 的订单。
    • 500 Internal Server Error : 服务器内部错误。

4.7 获取账户余额

  • Endpoint: /api/v1/accounts
  • Method: GET
  • 描述: 获取您的账户余额信息。此接口用于查询您在平台上的账户余额,包括可用余额、冻结余额等详细信息。可以根据币种筛选账户,以便查看特定加密货币的余额情况。 例如: /api/v1/accounts?currency=BTC ,该请求将返回您的比特币(BTC)账户的余额信息。若不指定币种,则返回所有币种的账户余额。返回数据通常包含币种代码、可用余额(可用于交易的余额)、冻结余额(因挂单或其他原因被锁定的余额)以及总余额等字段。请注意,请求频率可能受到限制,请参考API文档中的限流策略。

5. 错误处理

KuCoin API 利用标准的 HTTP 状态码来传递请求处理的结果。理解这些状态码对于调试和优化你的 API 集成至关重要。以下是一些常见的状态码及其含义:

  • 200 OK : 请求已成功处理。API 返回了预期的响应数据。
  • 400 Bad Request : 请求包含无效的参数。这通常意味着你传递了格式不正确、数据类型不匹配或超出范围的值。仔细检查请求参数,确保它们符合 API 文档的要求。
  • 401 Unauthorized : 认证失败。你的 API 密钥可能不正确、已过期或没有足够的权限来访问所请求的资源。验证你的 API 密钥是否正确配置,并且拥有执行操作所需的权限。请注意,某些 API 端点可能需要特定的权限。
  • 429 Too Many Requests : 你发送的请求过于频繁,超过了 KuCoin API 的速率限制。为了避免此错误,实施速率限制策略,在你的应用程序中增加请求之间的延迟。查看 KuCoin API 文档以了解具体的速率限制规则。可以使用指数退避算法来逐步增加重试之间的间隔。
  • 500 Internal Server Error : KuCoin 服务器遇到了一个内部错误,无法完成你的请求。这通常是一个临时问题。你应该稍后重试该请求。如果此错误持续发生,请联系 KuCoin 支持。

当 API 请求失败时,响应体通常会包含一个 JSON 对象,其中包含 code msg 字段,提供关于错误原因的详细信息。这些字段对于诊断问题至关重要。

例如:

{
  "code": "400000",
  "msg": "Invalid parameter: symbol"
}

在这个例子中, code 字段是 "400000", msg 字段是 "Invalid parameter: symbol"。这意味着请求中提供的交易对代码 (symbol) 不正确或者无效。

根据返回的错误码 ( code ) 和错误信息 ( msg ),仔细检查你的请求参数和 API 密钥配置。确保所有必需的参数都已提供,并且参数值符合 API 的规范。如果遇到 429 错误,请实施速率限制,避免超过 API 的限制。对于其他错误,请重试该请求,或者联系 KuCoin 支持以获得进一步的帮助。一些常见的错误排查步骤包括:检查 API 密钥是否正确,检查请求参数是否有效,检查网络连接是否稳定。

6. 频率限制

为了确保 KuCoin API 平台的稳定运行,并为所有用户提供公平的访问机会,KuCoin 实施了频率限制机制。这意味着每个 API 接口都设有最大请求频率的上限。不同的 API 端点,由于其计算资源的消耗和数据处理的复杂度不同,会对应不同的频率限制。请务必查阅KuCoin 官方文档,详细了解各个API接口的频率限制细则,包括每分钟或每秒允许的最大请求数量。

当您的应用程序超过了API的频率限制时,服务器会返回一个 429 Too Many Requests 的 HTTP 状态码错误。此错误表明您的请求过于频繁,暂时无法处理。为避免触发频率限制,您可以采取以下策略:

  • 降低请求频率: 这是最直接的解决方法。通过在连续的API请求之间增加适当的延迟,来降低整体的请求频率,避免短时间内发送大量请求。可以使用编程语言提供的定时器或延迟函数来实现。
  • 使用批量请求(Bulk Requests): 对于支持批量操作的API接口,尽可能将多个相关的操作合并到一个请求中。例如,同时查询多个交易对的信息,或者一次性提交多个订单。这样可以显著减少请求的总数,从而降低触发频率限制的风险。
  • 优化请求逻辑: 审查您的代码,找出不必要的API调用。例如,可以缓存经常访问的数据,避免重复请求。
  • 使用WebSocket API: 对于需要实时数据更新的场景,可以考虑使用 KuCoin 提供的 WebSocket API。WebSocket 是一种持久连接协议,可以实时推送数据更新,避免了频繁轮询API的需求。
  • 监控API响应: 始终监控API的响应头,其中可能包含关于剩余请求数量和重置时间的信息。根据这些信息动态调整您的请求频率。

强烈建议开发者在设计和实现 KuCoin API 应用程序时,仔细阅读并遵守 KuCoin 官方文档中关于频率限制的说明。在开发初期就考虑频率限制,并采取相应的优化措施,可以有效地避免 429 Too Many Requests 错误的发生,保证应用程序的稳定性和可靠性。

7. WebSocket API

KuCoin 交易所提供 WebSocket API,专门用于实时推送市场数据和账户信息。相比于传统的 REST API,WebSocket API 具有显著优势,包括更低的延迟和更高的效率,这使得它成为对数据实时性要求极高的应用场景的理想选择。此类应用包括高频交易机器人、实时监控面板以及任何需要即时市场变动的应用程序。

WebSocket 连接建立后,服务器会主动向客户端推送数据更新,无需客户端频繁轮询请求,大幅降低了网络开销和延迟。通过订阅不同的频道,用户可以接收特定的市场数据,例如:实时交易价格、订单簿更新、以及其他相关市场信息。

WebSocket API 也支持账户信息的实时推送,包括:账户余额变动、订单状态更新等。这使得用户可以实时掌握自己的账户情况,并及时作出相应的操作。

关于 KuCoin WebSocket API 的具体使用方法、可用频道列表、以及数据格式等详细信息,请务必参考官方文档。文档中包含了详细的示例代码和说明,可以帮助你快速上手并构建基于 WebSocket API 的应用。