被动委托(Post Only)详解:如何设置订单仅挂单不成交

作者:技术拾光时间:2026-07-23 22:05:02浏览:400

什么是被动委托(Post Only)?如何确保订单只做Maker不吃单? 在交易中,你是否遇到过这种情况:本想挂个单,静静等待市场来成交,结果订单一提交就立刻成交了,不仅没享受到Maker手续费返还,反而支付了更高的Taker费用。这背后的原因,往往就是订单价格设置得“太有竞争力”,直接吃掉了对手盘

什么是被动委托(Post Only)?如何确保订单只做Maker不吃单?

在交易中,你是否遇到过这种情况:本想挂个单,静静等待市场来成交,结果订单一提交就立刻成交了,不仅没享受到Maker手续费返还,反而支付了更高的Taker费用。这背后的原因,往往就是订单价格设置得“太有竞争力”,直接吃掉了对手盘的订单。

那么,有没有一种方法能彻底杜绝这种“意外”,确保你的订单只作为流动性提供者(Maker)存在呢?答案就是:被动委托(Post Only)。

被动委托(Post Only)强制订单仅作为挂单进入订单簿,系统实时校验是否触及最优买一或卖一价,触发即拒单以确保用户始终为Maker;需价格严格劣于买一或优于卖一,API可设post_only=true参数,状态监控需确保filled_qty恒为0。

被动委托(Post Only)详解:如何设置订单仅挂单不成交

全球主流的正规交易所推荐

欧易OKX:

Binance币安:

火币Huobi:

Gateio芝麻开门:

一、被动委托的运行机制

简单来说,被动委托就像给你的订单加上了一道“智能防火墙”。它的核心逻辑是:只挂单,不吃单。系统在你提交订单的瞬间,就会进行一次快速“安检”。

1、首先,订单价格必须满足一个硬性条件:严格劣于当前买一价(如果你想买入),或者严格优于当前卖一价(如果你想卖出)。换句话说,你的出价必须“没那么好”,不能直接去匹配市场上现有的最优报价。否则,订单连挂出去的机会都没有。

2、这套校验发生在撮合引擎的最底层。它会拦截所有可能引发即时成交的限价单,从根本上杜绝Taker行为的产生。这比单纯依靠手动设置价格更可靠,避免了因盘口剧烈波动而导致的意外吃单。

3、一旦通过校验,订单才会被正式放入订单簿。此时,订单状态通常显示为“挂单中(Pending)”或“活跃(Active)”,并出现在深度图的相应价位上,静静等待对手方来成交它。

二、交易平台设置Post Only模式

对于大多数交易者而言,通过交易界面手动启用是最直接的方式。目前主流合约平台都在高级订单类型中提供了显式开关,一键开启,省心省力。

1、打开交易对界面,找到订单类型选择区域。通常在“限价委托”旁边,会有一个下拉菜单或单独的复选框,明确标有“Post Only”或“仅挂单”。勾选它。

2、接下来输入你的限价价格。这里有个小技巧:为了确保万无一失,你的报价最好与当前买一/卖一价保持至少一个最小变动单位的距离。这为市场波动预留了安全空间。

3、确认下单。如果设置正确,界面通常会弹出“订单已作为仅挂单委托提交(Order placed as post-only)”之类的提示,这就表示你的订单已经成功以Maker身份进入订单簿排队了。

4、最后,别忘了去订单详情页面做个检查。看看状态(Status)字段是不是“Active”,并且已成交数量(Filled Qty)应该稳稳地保持为0。

三、通过API参数强制启用PostOnly

对于程序化交易者或者喜欢通过API操作的朋友,平台也提供了对应的控制参数。这种方式更加底层和强制化,可以绕过前端界面的任何潜在限制。

1、当你通过REST或WebSocket API构造下单请求时,目标接口通常是/order。请求体中需要包含交易对(symbol)、方向(side)、类型(type="limit")、价格(price)、数量(quantity)这些基本字段。

2、关键在于,你需要在请求体中额外添加一个键值对:"post_only": true。这个参数就是告诉交易所后端:“嘿,这笔订单必须遵守Post Only规则。”

3、发送请求后,如果价格符合要求,响应会返回一个订单ID,并且状态(status)很可能是“accepted”,这代表订单已按Post Only规则被接受并挂出。

4、反之,如果你的价格设置得过于激进,等于甚至优于最优对手价,那么服务器将直接返回一个错误(例如错误码400),并提示“post_only violation”(违反Post Only规则),订单根本不会提交成功。

四、监控订单执行状态防意外成交

启用被动委托并非一劳永逸。在极端行情或系统延迟等罕见情况下,加强监控依然是良好习惯。通过实时追踪订单状态,可以第一时间发现异常并采取措施。

1、最基础的方法是定期轮询。调用像GET /order/{order_id}这样的查询接口,反复检查返回数据中的filled_qty(已成交数量)字段。只要它恒为0,你的订单就是安全的。

2、更高效的方式是订阅WebSocket推送频道。例如订阅order_update频道,监听事件类型(event_type)为“update”的消息。你需要确认订单状态(status)没有突然跳变成“filled”(完全成交)或“partially_filled”(部分成交)。

3、万一,只是说万一,监控到filled_qty > 0,意味着发生了非预期的成交。这时应该立即发起cancel_order请求,终止该订单的剩余部分,防止损失扩大。

4、此外,建议在交易日志中记录所有相关事件,特别是“post_only rejected”(委托被拒)和“unexpected fill”(意外成交)这类情况。这些记录对于事后复盘、分析原因、优化策略至关重要。