如何在CCXT+Bybit交易机器人中获取最新已关闭订单
解决方案
修改思路
- 从
bybit.fetch_closed_orders()返回结果中,筛选出**状态为closed**的订单; - 通过订单时间戳排序,确保拿到最新的一笔已关闭订单,避免依赖原列表的默认顺序;
- 找到该订单在原
closed_pos列表中的索引,赋值给index_pos; - 处理无符合条件订单的边界情况,避免程序报错。
修改后的代码
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
相关产品推荐
相关产品推荐

