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

如何用CCXT获取BingX全量交易历史?现有Python代码无法运行

解决BingX合约全量交易历史获取问题

原代码核心问题

  • 未指定合约交易类型,ccxt默认访问现货接口,现货订单不包含PnL、合约平均价这类专属数据
  • limit=20仅能获取最近20条订单,无法拿到全量历史
  • 未处理分页逻辑,无法突破单请求数量限制
  • 未捕获接口请求异常,故障排查困难

修正后的实现方案

1. 初始化合约专用接口

必须在初始化时指定defaultType: 'swap',确保ccxt调用BingX合约接口:

import ccxt
import config

# 初始化BingX合约交易接口
bingx = ccxt.bingx({
    'apiKey': config.BINGX_API_KEY,
    'secret': config.BINGX_SECRET_KEY,
    'options': {
        'defaultType': 'swap'  # 关键:指定为合约交易类型
    }
})

2. 分页获取全量历史订单

通过循环分页请求,逐步拉取所有历史订单:

def fetch_all_closed_orders(symbol):
    all_orders = []
    max_limit = 100  # 单请求最大返回数(BingX接口允许的上限)
    since = None  # 起始时间,None从最新订单开始

    while True:
        try:
            # 拉取当前页订单
            orders = bingx.fetch_closed_orders(symbol, limit=max_limit, since=since)
            if not orders:
                break  # 无更多订单,终止循环
            
            all_orders.extend(orders)
            # 更新起始时间为当前页最早订单的时间(减1避免重复拉取最后一条)
            since = orders[-1]['timestamp'] - 1
        except Exception as e:
            print(f"拉取订单失败: {str(e)}")
            break
    return all_orders

3. 提取所需字段

PnL属于BingX专属字段,ccxt不会统一封装,需从order['info'](交易所原始返回数据)中提取:

# 获取DOGE/USDT合约全量历史订单
full_order_history = fetch_all_closed_orders('DOGE/USDT:USDT')

# 遍历输出核心字段
for order in full_order_history:
    print(f"交易时间: {bingx.iso8601(order['timestamp'])}")
    print(f"订单ID: {order['id']}")
    print(f"平均成交价格: {order.get('average', '未成交')}")
    print(f"盈亏(PnL): {order['info'].get('pnl', '无数据')}")
    print(f"订单状态: {order['status']}")
    print("------------------------------")

额外注意事项

  • 确保API密钥已开启合约交易读取权限,否则会返回权限错误
  • 若仍无法获取PnL,可尝试调用fetch_my_trades接口,部分交易所的成交明细会包含更详细的盈亏数据
  • 避免短时间内频繁请求,遵守BingX的API频率限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:23:21