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 密钥
- 登录您的 KuCoin 账户。这是进行任何 API 操作的前提,确保您已完成 KuCoin 的注册和身份验证流程。
- 导航到 API 管理页面。在 KuCoin 交易所的网站或应用程序中,API 管理页面通常位于用户个人中心或账户设置的“API 管理”或类似的选项下。具体的路径可能会因 KuCoin 平台的更新而有所调整,请仔细查找。
- 点击“创建 API 密钥”按钮。进入 API 管理页面后,您会看到一个创建新 API 密钥的按钮。点击该按钮开始创建流程。
-
设置 API 密钥的名称、权限和 IP 限制(可选)。
- 名称: 为您的 API 密钥设置一个易于识别的名称,以便于您管理和区分不同的 API 密钥。例如,您可以根据用途命名,如“交易机器人”、“数据分析”等。
-
权限:
这是 API 密钥配置中最关键的部分。您需要仔细选择 API 密钥需要拥有的权限。常见的权限包括:
- 交易权限: 允许 API 密钥进行买入和卖出操作。如果您使用 API 密钥进行自动交易,则必须启用此权限。
- 充提币权限: 允许 API 密钥进行充值和提现操作。请谨慎授予此权限,除非您明确需要通过 API 进行资金管理。
- 只读权限: 允许 API 密钥访问账户信息、市场数据等,但不能进行任何交易或资金操作。如果您仅需要获取数据,建议使用只读权限。
- IP 限制(可选): 强烈建议您设置 IP 限制。这将限制 API 密钥只能从指定的 IP 地址访问 KuCoin 交易所。这可以有效防止 API 密钥被盗用。您可以添加单个 IP 地址或 IP 地址段。如果您不确定您的 IP 地址,可以使用在线工具查询。
-
生成 API 密钥对,包括
API Key
和API Secret
。 请务必安全地保存您的API Secret
,因为您只能看到一次。-
API Key
类似于您的用户名,用于标识您的 API 密钥。 -
API Secret
类似于您的密码,用于对 API 请求进行签名。API Secret
极其重要,一旦泄露,您的账户将面临风险。 请使用安全的密码管理器或加密存储方式保存。
-
- 根据需求绑定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 文档,了解如何正确生成签名,并确保您包含所有必需的请求头。 错误的身份验证信息可能会导致请求失败。
签名计算方式:
-
将以下参数按照顺序拼接成一个原始字符串,作为签名的基准:
-
timestamp
:发起请求时的时间戳,通常为Unix时间戳。 -
method
:HTTP请求方法,例如GET
、POST
、PUT
或DELETE
,必须使用大写。 -
requestPath
:请求的API路径,不包含域名和查询参数,以/
开头。 -
body
(如果存在):请求体内容,通常为JSON格式。如果请求体为空,则不包含此项。 确保请求body是原始的字符串格式,未经任何编码处理。
-
-
使用您的
API Secret
(API密钥) 对该字符串进行 HMAC-SHA256 加密。- HMAC-SHA256 是一种基于密钥的哈希消息认证码算法,提供完整性和认证性。
-
您的
API Secret
应该妥善保管,避免泄露,因为它相当于访问API的密码。 - 不同的编程语言或工具库提供了不同的 HMAC-SHA256 实现,请根据您的开发环境选择合适的实现方式。
- 确保使用的编码方式与 API Secret 的编码方式一致,通常为 UTF-8。
-
将加密后的结果进行 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 的应用。