如何使用CCXT在Bybit创建带SL/TP的MARKET订单?代码调试求助
解决市价单附带止损止盈的问题
首先要明确:不同加密货币交易所的API对**市价单附带止损止盈(SL/TP)**的支持逻辑差异很大,直接在params里填stopLossPrice和takeProfitPrice大概率不生效——多数交易所不允许市价单直接挂载条件单,或者对参数命名、格式有特殊要求。
方案1:适配支持开仓附带SL/TP的交易所(如Binance、OKX)
部分交易所允许在开市价单时直接附带SL/TP,但需要调整参数格式,明确触发规则:
exchange.create_order( symbol='ADA/USDT:USDT', type='market', side='sell', amount=60, params={ 'leverage': 1, # 止损:触发价+限价(若为止损限价单,限价可略低于触发价确保成交) 'stopLoss': { 'triggerPrice': SL_PRICE, 'price': SL_PRICE * 0.995 }, # 止盈:触发价+限价 'takeProfit': { 'triggerPrice': TP_PRICE, 'price': TP_PRICE * 1.005 }, 'positionSide': 'short' # 对应sell空单,根据持仓模式调整 } )
方案2:交易所不支持直接附带时,分两步下单
如果交易所不支持开仓时挂载SL/TP,先执行市价单成交,再根据成交结果单独下止损和止盈单:
# 第一步:执行市价卖单 market_order = exchange.create_order( symbol='ADA/USDT:USDT', type='market', side='sell', amount=60, params={'leverage': 1} ) # 第二步:下止损市价单(卖空单的止损是买平仓) exchange.create_order( symbol='ADA/USDT:USDT', type='stop_market', side='buy', amount=60, params={ 'stopPrice': SL_PRICE, 'reduceOnly': True, # 确保只平仓,不开新仓 'positionSide': 'short' } ) # 第三步:下止盈市价单 exchange.create_order( symbol='ADA/USDT:USDT', type='take_profit_market', side='buy', amount=60, params={ 'stopPrice': TP_PRICE, 'reduceOnly': True, 'positionSide': 'short' } )
关键注意点
- 先确认所用交易所的API规则:不同平台对条件单的支持逻辑差异极大,必须参考官方文档或对应交易所的参数说明
- 务必设置
reduceOnly: True:避免止损/止盈单触发时开反向新仓,只执行平仓操作 - 条件单的
side要与原订单相反:卖空单的止损/止盈需用buy方向,买单则用sell方向
内容的提问来源于stack exchange,提问作者Carlos Diaz
相关产品推荐
相关产品推荐

