Binance Python API如何根据订单ID以市价平仓合约订单
问题结论
币安官方合约API不存在原生的futures_close_order(orderId=xxx)接口,你可以通过标准API组合实现完全一致的市价平仓效果。
具体实现方法
方法1:已知开仓参数时的最简实现
如果你确认该笔开仓订单对应的持仓没有后续加减仓操作,直接发送反向同数量市价单即可完成平仓。对应你给出的开仓代码,平仓代码如下:
from binance.enums import * # 原开仓为long(多)方向,平仓交易方向取反为SELL,平仓数量和开仓数量保持一致 close_order = client.futures_create_order( symbol=symbol, side=SIDE_SELL, type=ORDER_TYPE_MARKET, quantity=quantity, # 如需自定义平仓单的客户端订单ID,可自行添加该参数 # newClientOrderId="close_test_order" )
注意:如果你的账户开启了双向持仓(对冲)模式,平多单时需要额外传入
positionSide="LONG"参数;默认单向持仓模式不需要传该字段。
方法2:查询实时持仓后平仓(避免数量偏差)
如果开仓后你对该品种同方向仓位做过其他加减仓操作,不要硬编码平仓数量,先查询对应品种的实时可平持仓量再发反向单,避免平仓数量和实际持仓不匹配:
from binance.enums import * # 查询BTCUSDT品种的实时持仓信息 positions = client.futures_position_information(symbol="BTCUSDT") # 筛选出多单持仓 long_position = next(pos for pos in positions if pos["positionSide"] == "LONG") hold_quantity = abs(float(long_position["positionAmt"])) # 持仓量大于0时才发送平仓委托 if hold_quantity > 0: close_order = client.futures_create_order( symbol="BTCUSDT", side=SIDE_SELL, type=ORDER_TYPE_MARKET, quantity=hold_quantity )
补充说明
- 传入原开仓的
orderId无法直接关联平仓操作:币安U本位合约默认同方向同品种持仓是合并计算的,系统不会单独标记某笔开仓订单对应的独立仓位,因此不存在“按订单ID平仓”的底层逻辑支持。 - 如果你想要类似
futures_close_order的简洁调用体验,可以自行封装工具函数,把「查询持仓方向/可平数量」「发送反向市价单」的逻辑封装进去即可。 - 市价平仓不需要传入价格参数,系统会按当前最优盘口价格立刻撮合成交,实现快速全额平仓。
内容的提问来源于stack exchange,提问作者xyz
相关产品推荐
相关产品推荐

