挂单成交后价格总反着走,怎样检查逆向选择?

 / 
2

挂单成交后价格总朝反方向走,是逆向选择(adverse selection)的典型症状:你的限价单之所以成交,恰恰是因为有掌握信息的交易者愿意以你的报价和你成交,而他们推动的价格方向对你不利。检查逆向选择,核心不是看"价格反着走了多少次",而是计算成交后的 Markout(价格标记收益)——以你的成交价为基准,看之后一段时间的中价朝哪个方向移动了多少。如果 Markout 系统性为负,说明你的挂单在结构上被"有毒流"(toxic flow)挑选了。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

先排除一个假象:你记住的可能只是被成交的那部分

在动手计算之前,有一个心理层面的偏差需要先处理。学术研究指出,做市订单的成交概率远低于直觉:在 Binance 上,价差几乎总是一跳宽,而大多数提交的挂单最终被撤销,实际成交的只是少数。当市场平稳、你的挂单价格"本该"被触及然后反弹时,你的订单可能因为排队位置靠后而根本没有成交;而当市场出现单边急动、价格穿过你的挂单价继续走时,你的订单反而被完整成交。你感受到的"一成交就反着走",有一部分是幸存者偏差:成交这个动作本身,已经筛选出了那些市场动量足够大、能够穿透你这一档流动性的时刻。

这不是说逆向选择不存在,而是说在计算之前,先确认你统计的样本是"所有挂单"还是"已成交的挂单"。后者天然偏向于不利时刻,需要用 Markout 来量化偏离程度,而不是凭印象下结论。

Markout 怎么算:用成交后的价格变动给每笔成交打分

Markout 的定义很直接:在成交时刻之后某个时间窗口,中价相对于你的成交价移动了多少。对买单(你做多)来说,如果成交后中价下跌,Markout 为负,说明你买在了即将下跌的位置;对卖单(你做空)来说,如果成交后中价上涨,Markout 为负。Databento 的文档把 Markout 描述为衡量被动限价单逆向选择和执行滑点的标准工具。

一个可执行的计算流程:

第一步,导出成交记录。 从交易所的成交历史或你自己的交易日志中,取出每一笔被动成交(maker fill)的时间戳、方向(买/卖)、成交价、数量。

第二步,取成交后若干时间点的中价。 中价 =(最优买价 + 最优卖价)/ 2。常见的时间窗口包括成交后 1 秒、5 秒、30 秒、1 分钟、5 分钟。时间窗口的选择取决于你的持仓周期:如果你做的是日内短线,5 秒到 1 分钟的 Markout 最有意义;如果你持仓数小时,看 5 分钟到 30 分钟的窗口。窗口不需要多,选两三个和你实际持仓时间匹配的即可。

第三步,逐笔计算方向调整后的 Markout。 对于买单成交:Markout = 成交后中价 − 成交价。对于卖单成交:Markout = 成交价 − 成交后中价。统一成"正数代表对你有利,负数代表对你不利"的口径。

第四步,对样本取平均。 不要只看单笔。把一段时间内(至少几十笔,越多越好)的 Markout 按方向和时间窗口分别求均值。如果买单和卖单的平均 Markout 都显著为负,说明你的挂单在两个方向上都在被逆向选择。

一个可以复算的假设例子:假设你在某币种上做了 50 笔被动买单,成交后 30 秒的中价平均比成交价低 0.08%。你的 50 笔被动卖单,成交后 30 秒的中价平均比成交价高 0.06%。这意味着你每笔买单成交后平均立刻浮亏 0.08%,每笔卖单成交后平均立刻浮亏 0.06%。如果你的挂单赚取的价差(半价差)只有 0.02%,那么逆向选择成本(约 0.07%)已经远超你从价差中获得的收入。这个策略在结构上是亏损的,与运气无关。

Markout 为负,不一定全是"有毒流"的错

计算出来的负 Markout 需要进一步拆解,才能判断问题出在策略设计还是市场环境。有几个因素会单独导致 Markout 为负,而不一定是你的挂单被"聪明钱"盯上了。

波动率突变:如果你挂单期间市场波动率突然放大,价格朝单边快速移动,你的挂单被穿透是正常结果。这类成交的 Markout 天然为负,但原因是波动率,不是信息不对称。一个可区分的信号是:波动率突变时的成交占比是否过高。如果大部分负 Markout 集中出现在少数几个波动率飙升的时段,问题可能更多在于你没有在波动率上升时撤单,而不是你的报价被系统性地挑选了。Tietze 的建议是给挂单加上波动率断路器:当短期 ATR 突然跳升时,撤掉所有未成交的挂单,而不是留在那里等着被穿透。

排队位置靠后:arXiv 上的一项研究分析了 Binance 的挂单成交数据,发现订单簿不平衡时,队列前端的成交 Markout 为正(约 +0.1 到 +1 bp),而队列后端的成交 Markout 显著为负(约 −0.058 到 −1.157 bp)。如果你的挂单总是排在很后面才成交,意味着你只有在流动性被大量消耗、价格已经穿过前面所有挂单之后才被触及,这时的 Markout 自然很差。检查你的挂单在成交时的队列位置(如果数据可得),能帮助区分"报价问题"和"排队问题"。

价差本身太窄:如果市场价差只有一跳,你的挂单赚取的半价差极小,而逆向选择成本是一个相对固定的"税"。两者相减后,期望值可能本来就是负的。这种情况下,问题不在于你选错了成交时机,而在于这个市场/这个时段不适合做被动挂单。

检查完 Markout 之后,该看什么

如果 Markout 显著为负且集中在特定条件下,下一步是找出什么特征能预测负 Markout。Algotradingdesk 的一篇实务文章列了几个可操作的输入变量:市价单的强度和方向(成交前是否有大量同向 aggressive 订单涌入)、报价年龄(你的挂单在成交前挂了多久没更新)、订单簿不平衡(买卖两侧的挂单量对比)。

用你自己的成交数据做一次简单的分组对比:把成交按"成交前 5 秒内同向市价单笔数"分成高、低两组,分别算平均 Markout。如果高市价单组的 Markout 明显更负,说明你的挂单在被"动量流"穿透。对策不是停止挂单,而是在检测到同向市价单激增时撤单或调整报价。

另一个值得检查的维度是时间。如果你发现负 Markout 集中在某些时段(比如美国开盘、特定新闻发布前后),而你恰好在那些时段挂单更积极,那么调整挂单的时间分布就能改善结果。

一个务实的判断

挂单成交后价格反着走,不一定意味着你的策略"错了",但持续为负的 Markout 意味着你从价差中获得的收入不足以补偿被逆向选择的成本。在 CEX 的加密交易中,Maker 手续费优势(甚至返佣)是很多人选择挂单的理由,但手续费上的几个基点优势,很容易被 Markout 上几十个基点的负偏离吃掉。先算出你自己的 Markout 数值,再决定是调整撤单逻辑、收窄挂单的适用条件,还是放弃在这个品种/时段做被动挂单。没有这个数字,讨论"逆向选择"只是感觉层面的猜测。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

参考资料

  1. Databento·Measure execution slippage with markout curves,2026-10-31
  2. arXiv·The Market Maker's Dilemma: Navigating the Fill Probability vs. Post-Fill Returns Trade-Off,2026-10-31
  3. arXiv·To Make, or to Take, That Is the Question: Impact of LOB Mechanics on Natural Trading Strategies,2026-10-31
  4. uncoded.ch·Adverse Selection: The Hidden Tax on Limit Orders,2026-10-31
  5. algotradingdesk.com·HFT Trading: How to Detect Adverse Selection Before It Destroys Trading Profits,2026-10-31