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

ByBit API如何设置参数确保止损单以限价单形式执行

Bybit API 实现PostOnly止损的方案说明

原有代码的问题

你当前调用的LinearPositions.LinearPositions_tradingStop是Bybit的持仓内置止损设置接口,该接口不支持PostOnly参数:这类内置止损触发后默认走市价成交逻辑,没有开放挂单属性配置入口,所以无论怎么传参都没法实现你要的纯限价挂单、吃Maker低手续费的效果,这也是你现在止损距离近就直接市价成交的核心原因。

可落地的实现逻辑

要实现PostOnly效果的止损,不能用内置持仓止损接口,需要改用「条件限价单+PostOnly参数」的组合方案,核心传参规则如下:

  • 调用线性合约条件单创建接口(对应pybit库的LinearConditional.LinearConditional_new方法,V5版本API对应place_order接口传条件单相关参数)
  • 必传核心参数:
    • order_type设为Limit,明确订单类型为限价单
    • time_in_force设为PostOnly,开启纯挂单模式:如果订单触发时会直接成交吃对手盘,会自动拒单,保证永远只拿Maker手续费
    • stop_px(触发价)设为你计算好的止损价位(低于市价0.04%的sl值)
    • price(挂单价)和stop_px保持一致,触发后在止损价位挂限价单
    • reduce_only设为True,保证订单仅用于平仓,不会额外开仓
    • side设为和持仓方向相反的方向:持有多单时传Sell,持有空单时传Buy
    • trigger_by设为LastPrice,和官方界面默认的最新价触发逻辑保持一致
    • 传入对应持仓的平仓数量qty、下单时的最新价base_price,两个参数不能省略

代码修改参考

if option == 1:
    # 替换原有内置止损调用,改用PostOnly条件限价止损
    response = client.LinearConditional.LinearConditional_new(
        symbol="BTCUSDT",
        side="Sell" if type == "Buy" else "Buy",
        order_type="Limit",
        qty=position_qty, # 替换为你实际要平仓的持仓数量
        price=sl,
        base_price=current_last_price, # 替换为下单时的最新成交价
        stop_px=sl,
        time_in_force="PostOnly",
        reduce_only=True,
        trigger_by="LastPrice",
        close_on_trigger=False
    ).result()
    check_for_errors_sl_tp(response)

剥头皮场景注意事项

  • PostOnly机制会在订单会直接吃盘口时自动拒单,遇到极端行情价格跳空时,需要加一层重试逻辑:如果收到PostOnly拒单报错,就把挂单价往不利方向微调1个最小价格单位(tick)重新挂单,避免止损触发后无持仓导致的风险
  • 0.04%的止损间距非常小,需要提前核对交易对的最小价格变动精度,避免挂单价不符合精度要求被拒
  • 这类条件单是独立挂在订单簿的,不是绑定在持仓上的内置止损,如果仓位提前平掉,需要主动撤销未触发的止损条件单,避免后续误触发开出反向仓位

内容的提问来源于stack exchange,提问作者Tihan Swanepoel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:12:17