10月16日,美东时间上午,我在看 SOXL 的成交统计时看到了一组让我反复盯着屏幕的数字。
SOXL 是 3 倍做多半导体 ETF,那天跌了超过 6%。我打开成交统计,本来预期应该看到一个主动卖出量远超买入量的页面——毕竟已经跌成这样了。结果是这样的:
09:33(美东时间)
| 指标 | 数值 |
|---|---|
| 股价 | $100.540 |
| 当日涨跌幅 | -6.34% |
| 总成交量 | 159.18 万股 |
| 主动买入 | 34.78 万股 |
| 主动卖出 | 38.60 万股 |
| 中性盘 | 85.80 万股 |
然后到了 10:06,已经过去将近半小时,成交量翻了将近 7 倍:
10:06(美东时间)
| 指标 | 数值 |
|---|---|
| 股价 | $100.388 |
| 当日涨跌幅 | -6.49% |
| 总成交量 | 1076.33 万股 |
| 主动买入 | 265.80 万股 |
| 主动卖出 | 267.79 万股 |
| 中性盘 | 542.73 万股 |
那半小时里新增成交超过 917 万股。但主动买入和主动卖出的差(也就是 Delta):
$$ \Delta = 265.80 - 267.79 = -1.99 \text{ 万股} $$而 09:33 的 Delta 是:
$$ \Delta = 34.78 - 38.60 = -3.82 \text{ 万股} $$两个时间点之间的增量 Delta 是 \(-1.99 - (-3.82) = +1.83\) 万股,约占新增总成交量的 0.2%。
这个数字让我停下来想了很久。股价已经跌了 6%+,买卖双方的成交量却几乎是对等的?
还有另一件事。按价格看,$100 这个位置:
| 成交价 | 主动买入 | 主动卖出 | 总成交 |
|---|---|---|---|
| $100.000 | 42.57K | 122.60K | 255.22K |
| $99.000 | 7.70K | 65.50K | 82.71K |
| $99.990 | 20.29K | 27.04K | 67.44K |
| $100.010 | 24.37K | 25.89K | 66.89K |
| $101.000 | 15.79K | 19.70K | 66.32K |
$100 的主动卖出是主动买入的将近 3 倍。按我最初的直觉,这应该是把价格往下压的力量——但截图里股价还在 $100 上方。
我最初的反应就是一个问题:主动卖出量已经这么多了,价格为什么不继续跌?
这个直觉的问题在哪里,是这篇想搞清楚的。
说明:SOXL 的 -6.49% 是相对前一交易日收盘价的跌幅,与两张截图之间的 Delta 增量属于不同统计口径,不能直接建立因果关系。另外,成交统计中的平均成交价精确度有限,区间均价计算仅为近似估算。
主动成交在统计什么#
关于 order book、bid/ask、market order、limit order 以及 maker/taker 的基础概念,我在上一篇里整理过,这里不再重复。只补充两件对本文直接相关的事。
第一件:主动买入减去主动卖出就是 Delta。Delta 是主动方向的分类统计,不是市场资金的净流入量。每一笔成交,买方付出的钱等于卖方收到的钱——这个恒等式在任何情况下都成立。所谓"资金净流入",不过是把每笔成交按主动方方向贴标签再汇总,不是真实的现金收支。Delta = +1.83 万股,不代表有 1.83 万股的资金单向"流进"了市场。
第二件:中性盘的分类依赖行情系统的算法推断(比如对照成交价与当时 bid/ask 的关系)。中性盘不等于没有买卖方向,只是平台没有把它归到主动买或主动卖那一侧。这意味着 Delta 的数字,会因为中性盘的分类方式不同而有偏差。
好,现在回到正题。
相同的卖出量,完全不同的价格后果#
我最初的直觉是:主动卖出越多,价格应该跌越多。
这个直觉的错误很隐蔽——它忽略了一个变量:买方挂单的深度。
构造两个简化订单簿,两个场景里都有人想卖出 10 万股:
情景 A:买方流动性充足(盘口厚)
1Bid $100.00 : 30,000 股
2Bid $99.98 : 40,000 股
3Bid $99.96 : 50,000 股卖出 10 万股刚好消耗掉这三档。成交价从 $100.00 跌到 $99.96,移动了 4 分。
情景 B:买方流动性稀薄(盘口薄)
1Bid $100.00 : 5,000 股
2Bid $99.80 : 3,000 股
3Bid $99.50 : 2,000 股三档加起来才 10,000 股。卖出 10 万股会把这三档全吃完,然后继续向下寻价,价格要跌到很低的地方才能消化完这 10 万股。
同样卖出 10 万股,价格移动可以差几十倍。
Price impact(价格冲击)不是卖出量的简单线性函数,它是卖出量与当前可用买方流动性共同作用的结果。
这里还需要加一个注意:上面的例子展示的是订单簿的静态截面。真实市场里,订单簿是实时动态的——有人在不停地撤单、补单、报新价,有套利者在捕捉价差。所以实际的 price impact,比这个简化例子更复杂,也更难预测。
买方在吸收,还是被击穿了#
到这里,我开始觉得有点抓到问题的边缘了。
如果在连续卖出的过程中,买方一直在补充新的挂单怎么办?
下面这两个情景(教学示意,数字虚构),是我觉得整篇文章最想说清楚的一对对比:
情景 A(吸收):
- $100 有 80K 买单。
- 主动卖出涌入,消耗到 20K。
- 买方持续补充新挂单,恢复到 70K。
- 这个过程反复发生。最终结果:大量成交,累计 Delta 接近平衡,但价格基本维持在 $100 附近。
情景 B(击穿):
- $100 同样有 80K 买单。
- 主动卖出涌入,消耗到 0。
- 没有新的买单补充,订单簿在这个价位出现真空。
- 价格跌穿 $100,向下寻找新的买家。最终结果:同样有大量成交,累计 Delta 可能同样接近平衡,但价格跌下去了。
重点在这里:仅看累计 Delta,两个情景可以几乎相同。但价格行为完全不同。
Absorption(买盘吸收)是通过订单流和价格行为推测出来的现象,不能从一张成交统计快照里直接读出来。快照告诉你这段时间发生了多少成交、主动方向如何,但它无法告诉你:在这段时间里,买盘在被消耗的同时是否有新挂单在不断填入。
这个信息在哪里?在逐笔成交的时间序列里,在订单簿深度的动态变化里——而这些,不在截图里。
还有对称的情形:同样的逻辑适用于主动买入偏多但价格不涨的场景。如果卖方一直在 Ask 侧补单,吸收买盘,价格就可以维持在同一个价位,大量买入但不推高价格。
回到 SOXL:这两张截图能说明什么#
现在带着这个框架回去看 10月16日 SOXL 的数据。
我试着把观察分成三个层级:
可以直接从截图确认的事实#
- 09:33 到 10:06 之间,新增成交约 917 万股,新增 Delta 约 +1.83 万股,约为新增成交量的 0.2%。
- 两个时间点之间,股价从 $100.540 下移到 $100.388,共下移约 15 美分。
- 在 $100 价位,主动卖出(122.6K)是主动买入(42.57K)的将近 3 倍。
- $99 同样出现了大量主动卖出(65.5K),主动买入只有 7.7K。
- 中性盘占总成交量的比例约为 50%。
可以提出但无法直接证实的假设#
- $100 附近可能存在买方承接——否则主动卖出这么多,价格移动幅度应该更大。
- 买方补单的速度可能和卖盘的压力大致匹配,使得价格没有快速向下。
但"可能"和"确实发生了"之间,有一段距离。
需要什么才能进一步验证#
光看两张静态截图,验证不了上述假设。需要:
- 逐笔成交的时间序列:看在 $100 发生大量成交时,成交是快速发生(扫单式,买盘可能被快速消耗)还是慢速发生(零散小单,买卖双方在博弈)。
- 订单簿深度的实时变化:$100 的买盘在大量成交发生前后是否有显著变化。
- 后续 K 线:$100 价位在后续交易中是否继续维持,还是最终失守。
$99 出现大量主动卖出这件事,本身不能证明买方在那里有强支撑。它只说明历史上曾在 $99 发生过一笔较大的主动卖出成交,仅此而已。
还有一件需要提醒自己的事:SOXL 是每日重置的 3 倍杠杆 ETF,它的成交行为不能直接等同于半导体行业股票的整体买卖力量。当天的跌幅很可能主要来自半导体板块本身的下跌,而不是 SOXL 这只 ETF 内部的订单流。
Volume Profile、Delta 和 CVD#
学到这里自然会想到几个工具,简单整理一下它们各自在测量什么。
Volume Profile#
普通的成交量柱状图,横轴是时间,纵轴是成交量。Volume Profile 把轴转了一下:纵轴是价格,横轴是对应价格的成交量。
Volume Profile 里成交量最大的价格档位叫 POC(Point of Control)。它说明在统计周期内,参与者在这个价位上成交最多——但这本身不等于这里有支撑或压力。支撑和压力是价格后续行为的结果,不是由过去的成交量总量自动决定的。
从 SOXL 的数据看,$100 价位是明显的高成交量区域(255K,远高于相邻价位),可以作为一个值得继续观察的价格区间,但不能直接宣布它是"强支撑"。
Delta#
\( \Delta = \text{主动买入成交量} - \text{主动卖出成交量} \)
正值表示这段时间主动买入占优,负值表示主动卖出占优。
Delta 接近 0 的含义需要小心。它可能意味着:
- 买卖双方真的势均力敌;
- 也可能是大量主动买入发生在某些价位,大量主动卖出发生在另一些价位,汇总后抵消了。
另外,50% 左右的中性盘始终是 Delta 精确度的一个限制——中性盘的分类,不同平台、不同算法会给出不同结果。
CVD(Cumulative Volume Delta)#
CVD 是 Delta 随时间的累积值:
$$ \text{CVD}_t = \sum_{i=1}^{t} \Delta_i $$CVD 与价格的背离有时值得关注。比如价格创下了更低的低点,但 CVD 没有再创新低——说明即使价格继续下行,主动卖出的增量在减少,或者主动买入在增加。
但这类背离需要谨慎对待。背离可以持续很长时间,趋势在背离中继续延伸的情况不少见。它是一条线索,而不是反转信号。
对波段交易者的意义#
在结束之前,想从实际交易角度说几句。
我主要研究美股波段交易,持仓几天到几周,不是高频。在这个时间框架下,成交统计(Delta、CVD)不是第一优先级的工具。我现在大致的分析优先级是这样的:
- 日线和周线趋势——当前处于上升趋势还是下降趋势,在哪个位置?
- 基本面与催化剂——有没有宏观或行业层面的驱动?参考利率与资产定价。
- 价格结构——关键的支撑和压力区域在哪里?
- Volume Profile——这些价格区域是否有成交量的背书?
- 成交统计和 Delta——在关键价位,用来辅助判断买卖力量的分布。
成交统计在最后一步出现。它对波段交易者的价值,更多是在某个关键价位上验证假设,而不是独立判断方向。
分析顺序很重要,因为它影响提问的质量。先确定"我认为这个价位是关键的,我需要更多证据",再去看成交统计,得到的信息会更有针对性。反过来,先看到一堆成交数据再试图倒推判断,很容易陷入事后解释的陷阱。
写在最后#
回到最初那个问题:为什么主动卖出这么多,价格没有继续大跌?
现在的答案比"主动卖出量还不够多"具体多了。价格是否下跌,不只取决于卖了多少,还取决于买方在那个价位愿意提供多少流动性。如果买方持续补单,大量卖出可以被吸收;如果买盘耗尽不再补充,价格就会下行寻价。
同样的成交量,在充足流动性和稀薄流动性下,带来的价格结果可以完全不同。
SOXL 10月16日的这组数据,我到现在也没有办法确定 $100 那里是否发生了真正的买方吸收。两张截图给我的,是一组观察事实和若干值得探究的线索,不是答案本身。
但我觉得,这种把观察事实和假设严格分开的习惯,比得出一个听起来合理的结论更重要。
真正值得问的问题,不只是"卖出了多少股",而是这些成交发生之后,市场为了消化它们,付出了多大的价格代价。
Order flow 描述了成交发生的方向,price impact 揭示了市场流动性对这些成交的响应。把这两件事放在一起看,比单独盯着任何一个数字都更接近市场真正在发生的事。
参考资料#
- Larry Harris,Trading and Exchanges: Market Microstructure for Practitioners(Oxford University Press,2003)——关于订单类型、流动性供给、price impact 的标准参考
- CME Group,Understanding Volume Profile,公开教育资料
- 站内关联:从成交量到资金净流入:重新理解股票价格是如何形成的