FTX CCXT:仓位平仓后如何单独取消对应止损/止盈订单?
解决FTX TP/SL订单与仓位解绑的管理方案
因为FTX的TP/SL订单不与仓位绑定,且仓位采用聚合式统计,官方未提供直接关联机制,核心解决思路是自行在本地维护订单与仓位的映射关系,具体实现步骤如下:
1. 开仓时建立订单-仓位关联
每次开仓并挂好TP、SL订单后,在本地存储(内存字典、轻量数据库均可)中记录关联信息,至少包含:
- 仓位核心信息:交易对、方向(多/空)、开仓量、开仓订单ID
- 对应TP订单的ID
- 对应SL订单的ID
示例伪代码:
# 开仓并挂好TP/SL后,构建映射条目 position_link = { "symbol": "ETH/USD", "side": "short", "size": 0.5, "open_order_id": "open_789", "tp_order_id": "tp_123", "sl_order_id": "sl_456" } # 存入本地活跃仓位列表 active_position_links.append(position_link)
2. 监听订单触发事件并取消对应挂单
通过FTX的WebSocket接口监听订单状态更新(重点关注filled状态的订单):
- 当捕获到TP或SL订单被完全/部分平仓的事件时,提取该订单的ID、交易对、方向等信息
- 遍历本地维护的
active_position_links,匹配到关联的仓位条目 - 取出该条目中未触发的另一订单ID(比如触发了TP,就取SL订单ID)
- 调用FTX的
cancel_order接口,传入目标订单ID完成取消
3. 平仓后的映射清理
当TP/SL触发导致对应仓位完全平仓时,从本地active_position_links中移除该条目,避免后续误操作;如果是部分平仓,可根据剩余仓位量调整映射中的仓位大小,或重新计算TP/SL价格并更新订单(按需处理)。
4. 异常情况处理
- WebSocket断线重连后,需调用FTX的API拉取当前所有活跃订单和仓位,重新构建本地映射关系,避免关联信息丢失
- 取消订单前,先调用
get_order接口确认目标订单仍处于open状态,防止重复取消导致报错
内容的提问来源于stack exchange,提问作者Benjamin Perry
相关产品推荐
相关产品推荐

