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

如何在CCXT+Bybit交易机器人中获取最新已关闭订单

解决方案

修改思路

  1. 从bybit.fetch_closed_orders()返回结果中,筛选出**状态为closed**的订单;
  2. 通过订单时间戳排序,确保拿到最新的一笔已关闭订单,避免依赖原列表的默认顺序;
  3. 找到该订单在原closed_pos列表中的索引,赋值给index_pos;
  4. 处理无符合条件订单的边界情况,避免程序报错。

修改后的代码

def closed_positions(symbol=symbol):
    index_pos = -1 
    closed_pos = bybit.fetch_closed_orders(symbol)
    
    # 筛选出状态为closed的订单
    filtered_closed_orders = [order for order in closed_pos if order['status'] == 'closed']
    
    # 处理没有已关闭订单的情况
    if not filtered_closed_orders:
        print('没有找到已成交关闭的订单')
        return closed_pos, False, 0, None, index_pos
    
    # 按时间戳倒序排序,取最新的订单
    filtered_closed_orders.sort(key=lambda x: x['timestamp'], reverse=True)
    latest_closed_order = filtered_closed_orders[0]
    
    # 获取该订单在原列表中的索引
    index_pos = closed_pos.index(latest_closed_order)
    
    # 提取订单核心信息
    closedpos_side = latest_closed_order['side']
    closedpos_size = latest_closed_order['amount']
    
    # 判定多空方向
    if closedpos_side == 'buy':
        closedpos_bool = True
        long = True
    elif closedpos_side == 'sell':
        closedpos_bool = True
        long = False
    else:
        closedpos_bool = False
        long = None
        
    print(f'closed possitions... | index_pos {index_pos} | closedpos_bool {closedpos_bool} | closedpos_size {closedpos_size} | long {long}')
        
    return closed_pos, closedpos_bool, closedpos_size, long, index_pos

关键说明

  • 状态筛选逻辑:CCXT标准化后,订单状态字段为status,Bybit中已成交关闭的订单状态值为closed,已取消订单为canceled,以此作为筛选依据;
  • 最新订单确认:通过timestamp字段降序排序,确保拿到时间最新的订单,不受交易所返回列表默认顺序影响;
  • 原列表索引获取:利用closed_pos.index(latest_closed_order)直接定位目标订单在原列表中的位置,满足index_pos的需求;
  • 边界处理:当无符合条件订单时,返回明确的默认值,避免索引越界或字段读取错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:50:27