首页 > 帮助中心 > 技术支持

技术支持

如何通过API查询bitget钱包历史成交记录?

流量次数: 作者:小编 发布时间:2025-03-20 18:23:44

一、API接口说明

1. 接口地址

现货交易记录

GET /api/v2/spot/trade/fills


合约交易记录

GET /api/v2/mix/order/fills

bitget钱包官网https://www.bitkeep-web3.com

2. 核心请求参数

参数名 类型 必填 说明

symbol string 是 交易对(如BTCUSDT_SPBL)

startTime long 否 起始时间戳(毫秒)

endTime long 否 结束时间戳(毫秒)

limit int 否 返回条数(默认100,最大500)

二、Python代码实现

1. 基础查询(现货最近100笔成交)

python

复制

import requests

import time

import hmac

import hashlib


API_KEY = "YOUR_API_KEY"

SECRET_KEY = "YOUR_SECRET_KEY"


def generate_sign(timestamp, method, path, body):

    message = str(timestamp) + method + path + body

    return hmac.new(SECRET_KEY.encode(), message.encode(), hashlib.sha256).hexdigest()


# 请求参数

symbol = "BTCUSDT_SPBL"  # 现货BTC/USDT

end_time = int(time.time() * 1000)

start_time = end_time - 24*60*60*1000  # 24小时前


headers = {

    "ACCESS-KEY": API_KEY,

    "ACCESS-SIGN": generate_sign(end_time, "GET", "/api/v2/spot/trade/fills", ""),

    "ACCESS-TIMESTAMP": str(end_time),

    "Content-Type": "application/json"

}


response = requests.get(

    "https://api.bitget.com/api/v2/spot/trade/fills",

    params={"symbol": symbol, "startTime": start_time, "endTime": end_time},

    headers=headers

)


print(response.json())

2. 分页获取全部历史记录

python

复制

def get_all_fills(symbol, days=30):

    all_fills = []

    end_time = int(time.time() * 1000)

    start_time = end_time - days*24*60*60*1000

    

    while True:

        params = {"symbol": symbol, "limit": 500, "endTime": end_time}

        response = requests.get(..., params=params).json()

        fills = response["data"]

        if not fills:

            break

        all_fills.extend(fills)

        end_time = fills[-1]["createTime"] - 1  # 下一批次截止时间

        

    return all_fills

image.png

三、返回数据结构解析

现货成交记录字段说明

json

复制

{

  "code": "00000",

  "data": [

    {

      "accountId": "123456",

      "symbol": "BTCUSDT_SPBL",

      "orderId": "7890123456",

      "fillId": "7890123456_1",

      "orderType": "market",  // 订单类型:limit/market

      "side": "buy",         // 方向:buy/sell

      "fillPrice": "43210.5",// 成交价

      "fillQty": "0.01",     // 成交量

      "fillTotalAmount": "432.105", // 成交总额

      "fee": "0.86421",      // 手续费

      "feeCoin": "USDT",     // 手续费币种

      "createTime": 1629990000000

    }

  ]

}

合约成交记录额外字段

json

复制

{

  "posSide": "long",       // 持仓方向:long/short

  "pnl": "5.32",          // 盈亏金额

  "tradeSide": "open",    // 开仓/平仓:open/close

}

四、高级查询技巧

1. 时间范围优化

精确查询:通过startTime与endTime缩小范围提升速度


自然日切割:按天分段请求避免单次返回数据过大


2. 多交易对批量查询

python

复制

symbols = ["BTCUSDT_SPBL", "ETHUSDT_SPBL"]

all_results = {}

for symbol in symbols:

    all_results[symbol] = get_all_fills(symbol)

3. 数据持久化存储

python

复制

import pandas as pd

df = pd.DataFrame(all_fills)

df['createTime'] = pd.to_datetime(df['createTime'], unit='ms')

df.to_parquet("trade_history.parquet")  # 高性能列式存储

五、常见问题处理

问题现象 解决方案

返回40006权限错误 检查API密钥是否授予read权限

高频查询触发429限速 添加time.sleep(0.1)延迟请求

跨时区时间转换错误 使用pytz库处理时间戳本地化

手续费字段精度丢失 使用Decimal类型处理浮点数运算

六、安全建议

权限最小化:API密钥仅开启read权限


敏感数据脱敏:日志中过滤orderId等敏感字段


HTTPS加密:禁止使用HTTP明文传输


IP白名单:限制API调用源IP


tags标签: