如何用CCXT Python创建带止损与多止盈的币安期货订单?
使用CCXT在Python中为币安期货订单设置止损(SL)与多止盈(TP)
首先明确:币安期货不支持通过edit_order修改已有订单的止损/止盈,必须用独立的条件单绑定主订单,或者开仓时直接同步设置止盈止损。以下是两种可行方案:
方案一:开仓同时设置止损与单个止盈(单TP场景)
通过create_order方法,传入params参数指定止损和止盈价格,需确保客户端切换到期货模式:
import ccxt # 初始化币安期货客户端 binance = ccxt.binance({ 'apiKey': 'YOUR_API_KEY', 'secret': 'YOUR_API_SECRET', 'enableRateLimit': True, 'options': { 'defaultType': 'future', # 切换至期货交易模式 } }) # 做多开仓+同步绑定SL/TP symbol = 'ETH/USDT' side = 'buy' # 做空替换为'sell' amount = 0.01 entry_price = 1200 # 开仓限价 # 止损、止盈价格设置 sl_price = 1180 tp_price = 1250 # 发送开仓订单并绑定SL/TP order = binance.create_order( symbol=symbol, type='limit', side=side, amount=amount, price=entry_price, params={ 'stopPrice': sl_price, 'takeProfitPrice': tp_price, 'timeInForce': 'GTC' # 订单有效期限,可按需调整 } ) print(f"开仓订单ID: {order['id']}")
方案二:开仓后创建多止盈+止损条件单(多TP场景)
若需要多个止盈位,需等待主开仓订单成交后,分别创建独立的止盈、止损条件单:
# 执行开仓订单(与你现有代码一致) entry_order = binance.create_limit_order( symbol='ETH/USDT', side='buy', amount=0.01, price=1200 ) entry_order_id = entry_order['id'] # 轮询等待开仓订单成交 while True: order_status = binance.fetch_order(entry_order_id, symbol=symbol) if order_status['status'] == 'closed': print("开仓订单已成交") break # 创建止损条件单(方向与开仓相反) sl_order = binance.create_order( symbol=symbol, type='stop_market', # 可选stop_limit用限价平仓 side='sell', # 做空止损替换为'buy' amount=0.01, params={ 'stopPrice': 1180, 'closePosition': True, # 触发时平仓全仓 'timeInForce': 'GTC' } ) print(f"止损订单ID: {sl_order['id']}") # 创建第一个止盈条件单(半仓止盈) tp1_order = binance.create_order( symbol=symbol, type='take_profit_market', # 可选take_profit_limit用限价平仓 side='sell', amount=0.005, params={ 'takeProfitPrice': 1230, 'timeInForce': 'GTC' } ) print(f"止盈订单1 ID: {tp1_order['id']}") # 创建第二个止盈条件单(剩余半仓止盈) tp2_order = binance.create_order( symbol=symbol, type='take_profit_market', side='sell', amount=0.005, params={ 'takeProfitPrice': 1260, 'timeInForce': 'GTC' } ) print(f"止盈订单2 ID: {tp2_order['id']}")
关键注意事项
- 币安期货的止损/止盈是独立订单,需主订单成交后才会生效
- 条件单类型:
stop_market触发后以市价平仓,stop_limit触发后以指定限价平仓;止盈同理对应take_profit_market/take_profit_limit - 确保API已开启期货交易及条件单权限
- 仓位方向对应:做多的止损/止盈为卖出单,做空则为买入单
内容的提问来源于stack exchange,提问作者BWalt
相关产品推荐
相关产品推荐

