如何通过Binance API创建带限价止盈与市价止损的关联期货订单?
Binance期货API:限价止盈+止盈止损互消方案
关键需求实现说明
- 限价止盈单改造:将原
TAKE_PROFIT_MARKET改为TAKE_PROFIT类型,需同时设置触发价(stopPrice)和限价(price),订单触发后会以指定限价平仓。 - 止盈/止损互消逻辑:通过Binance的OCO订单组关联止盈和止损单,当其中一个订单成交或触发时,另一个未成交订单会自动取消。
修改后的完整代码
# 1. 初始开仓市价多单 buy_market = client.futures_create_order( symbol=coin, side='BUY', positionSide='LONG', type='MARKET', quantity=0.001 ) tp_trigger = round(45000, 2) # 止盈触发价 tp_limit = round(44995, 2) # 止盈限价(可根据需求调整,建议略低于触发价确保成交) sl_trigger = round(50000, 2) # 止损触发价 # 2. 创建OCO订单组:包含限价止盈单和止损市价单 oco_order = client.futures_create_oco_order( symbol=coin, side='SELL', positionSide='LONG', quantity=0.001, # 需与开仓量一致 price=tp_limit, # 止盈限价 stopPrice=sl_trigger, # 止损触发价 stopLimitPrice=sl_trigger, # 止损市价单可设与stopPrice一致 stopLimitTimeInForce='GTE_GTC', listClientOrderId=f"oco_long_{coin}_{int(time.time())}", # 自定义订单组ID workingType='MARK_PRICE', priceProtect=True, reduceOnly=True # 确保仅平仓,避免反向开仓 )
参数说明与注意事项
- 限价止盈配置:
type设为TAKE_PROFIT时,必须同时传入stopPrice(触发止盈的价格)和price(实际平仓的限价),建议限价略低于触发价(做多止盈场景),提升成交概率。 - OCO订单组:使用
futures_create_oco_order接口替代单独创建两个订单,自动关联止盈止损单,实现“一单触发,另一单取消”的逻辑。 - reduceOnly=True:强制订单仅用于平仓,防止因参数错误导致反向开仓。
- workingType:选择
MARK_PRICE确保触发价参考标记价,避免因市价短期波动频繁触发。 - priceProtect:开启后,当标记价与触发价偏差超过阈值时,订单不会触发,避免插针行情导致误止损/止盈。
替代方案(若不使用OCO)
如果因特殊场景无法使用OCO订单组,可在订单触发后通过API主动查询仓位状态,手动取消未成交订单:
# 假设已获取止盈和止损订单ID tp_order_id = sell_gain_limit['orderId'] sl_order_id = sell_stop_market['orderId'] # 定期查询仓位或订单状态,若其中一个订单已成交,取消另一个 position = client.futures_position_information(symbol=coin) if float(position[0]['positionAmt']) == 0: # 仓位已平,取消剩余订单 client.futures_cancel_order(symbol=coin, orderId=tp_order_id) client.futures_cancel_order(symbol=coin, orderId=sl_order_id)
内容的提问来源于stack exchange,提问作者Cyder11
相关产品推荐
相关产品推荐

