You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过KuCoin API查询判断订单是否已成交

KuCoin API 订单成交状态判定方案

现有代码问题

  • GET请求传参方式错误:KuCoin GET类型接口不接收JSON格式请求体,当前代码将参数序列化后传入data参数,接口无法识别传入的orderId等条件,实际返回的是全量空成交列表,和你拿到的totalNum:0、items:[]结果匹配。
  • 签名逻辑错误:GET请求签名时,待拼接的参数字段是按key排序后URL编码的查询字符串,不是JSON序列化后的字符串,当前签名拼接规则不符合官方规范。
  • 冗余传参:按orderId查询成交记录时,不需要额外传side、symbol、type字段,多余字段如果和订单实际属性不匹配,会直接导致查询结果为空。

订单成交判定标准

优先使用单个订单详情接口(GET /api/v1/orders/{orderId})判定,结果最直接:

  • 返回结果code=200000时,读取data.status字段:
    • status = "done",且dealSize等于下单总数量、dealFunds>0:订单完全成交
    • status = "done",但dealSize小于下单总数量、dealSize>0:订单部分成交后被撤销
    • status = "open":订单正在挂单,未成交
    • status = "cancel":订单已全部撤销,无成交
      如果使用成交记录接口(/api/v1/fills)判定:
  • 返回结果data.totalNum = 0:对应订单无任何成交记录
  • 返回结果data.totalNum > 0:累加所有items中的size值,等于下单总数量即为完全成交,大于0小于下单量即为部分成交

修复后参考代码

import time
import hmac
import hashlib
import base64
import requests
from urllib.parse import urlencode

# 替换为自身账号密钥信息
api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"
api_passphrase = "YOUR_API_PASSPHRASE"
target_order_id = "待查询的订单ID"
order_submit_size = 0.1 # 替换为下单时提交的总数量,用于成交校验

# 推荐:查询订单详情直接判定状态
def get_order_status(order_id, submit_size):
    timestamp = int(time.time() * 1000)
    method = "GET"
    path = f"/api/v1/orders/{order_id}"
    sign_content = str(timestamp) + method + path
    sign = base64.b64encode(hmac.new(api_secret.encode('utf-8'), sign_content.encode('utf-8'), hashlib.sha256).digest())
    pass_sign = base64.b64encode(hmac.new(api_secret.encode('utf-8'), api_passphrase.encode('utf-8'), hashlib.sha256).digest())
    headers = {
        "KC-API-SIGN": sign,
        "KC-API-TIMESTAMP": str(timestamp),
        "KC-API-KEY": api_key,
        "KC-API-PASSPHRASE": pass_sign,
        "KC-API-KEY-VERSION": "2"
    }
    resp = requests.get(f"https://api.kucoin.com{path}", headers=headers)
    res = resp.json()
    if res.get("code") != "200000":
        print(f"查询失败: {res.get('msg')}")
        return
    order_data = res.get("data", {})
    deal_size = float(order_data.get("dealSize", 0))
    status = order_data.get("status")
    if status == "done" and abs(deal_size - submit_size) < 1e-8:
        print("订单完全成交,成交金额:", order_data.get("dealFunds"))
        return "full_filled"
    elif status == "done" and deal_size > 0:
        print(f"订单部分成交后撤销,已成交数量:{deal_size}")
        return "partial_canceled"
    elif status == "open":
        print("订单挂单中,未成交")
        return "open"
    elif status == "cancel":
        print("订单已撤销,无成交")
        return "canceled"

# 备选:通过成交记录接口判定
def get_order_fills(order_id, submit_size):
    timestamp = int(time.time() * 1000)
    method = "GET"
    path = "/api/v1/fills"
    params = {"orderId": order_id}
    # 参数排序后拼接query串用于签名
    query_str = urlencode(sorted(params.items()))
    sign_content = str(timestamp) + method + path + "?" + query_str
    sign = base64.b64encode(hmac.new(api_secret.encode('utf-8'), sign_content.encode('utf-8'), hashlib.sha256).digest())
    pass_sign = base64.b64encode(hmac.new(api_secret.encode('utf-8'), api_passphrase.encode('utf-8'), hashlib.sha256).digest())
    headers = {
        "KC-API-SIGN": sign,
        "KC-API-TIMESTAMP": str(timestamp),
        "KC-API-KEY": api_key,
        "KC-API-PASSPHRASE": pass_sign,
        "KC-API-KEY-VERSION": "2"
    }
    resp = requests.get(f"https://api.kucoin.com{path}", headers=headers, params=params)
    res = resp.json()
    if res.get("code") != "200000":
        print(f"查询失败: {res.get('msg')}")
        return
    fill_data = res.get("data", {})
    if fill_data.get("totalNum", 0) == 0:
        print("订单无成交记录")
        return "no_fill"
    total_deal = 0.0
    for fill in fill_data.get("items", []):
        total_deal += float(fill.get("size", 0))
    if abs(total_deal - submit_size) < 1e-8:
        print("订单完全成交")
        return "full_filled"
    else:
        print(f"订单部分成交,已成交数量:{total_deal}")
        return "partial_filled"

# 调用示例
# get_order_status(target_order_id, order_submit_size)

注意:请求时间戳和KuCoin服务器时间差不能超过5秒,否则会返回签名错误,可提前调用/api/v1/timestamp接口获取服务器时间做本地校准。

内容的提问来源于stack exchange,提问作者DeziLuv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:27:25