You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:20:25