↓ 跳过正文
  1. Posts/

从成交量到资金净流入:重新理解股票价格是如何形成的

·5177 字·11 分钟

之前写量化交易系统那篇时提到过 execution 层——每笔 order 多大、对手盘的流动性够不够、是挂盘口还是主动吃价差。当时一笔带过,没有认真想 order book 这一层到底怎么运转。

最近第一次认真看市场微观结构(market microstructure)的一些材料,想搞清楚几个一直模模糊糊的问题。结果发现,不是模糊,是错的。

比如一个最基本的问题:同样涨 5%,有的股票只成交了几万股,有的超过几百万股。我以为差别就是"买的人多不多",但说不清为什么同样的涨幅成交量能差上百倍。

先把价格是怎么形成的搞清楚
#

我以前对股价的理解大概是:买的人多,价格涨;卖的人多,价格跌。

这句话不算全错,但它把最关键的部分藏起来了——“买的人多"到底是什么意思?多多少才能让价格涨 1%?

要回答这些,得先看 order book(订单簿)。

一个简化的 order book:

1卖方挂单(Ask):
2  10.03 元    100 股
3  10.02 元    100 股
4  10.01 元    100 股
5
6买方挂单(Bid):
7   9.99 元    100 股

买方出价最高的叫 bid,卖方要价最低的叫 ask。中间的差就是 bid-ask spread。最新价格由最近一笔成交决定。

这时候来了一笔 300 股的市价买单——市价单不限价格,到了就尽快成交。撮合引擎按卖方挂单从低到高依次匹配:

  1. 100 股以 10.01 元成交,吃掉卖一。
  2. 100 股以 10.02 元成交,吃掉卖二。
  3. 100 股以 10.03 元成交,吃掉卖三。

最新成交价从 10.01 涨到了 10.03,总共成交 300 股。

薄盘口与厚盘口对比:同样的价格变化需要的成交量差 100 倍

现在换一种情况。把每一档的挂单量放大 100 倍:

1卖方挂单(Ask):
2  10.03 元    10000 股
3  10.02 元    10000 股
4  10.01 元    10000 股
5
6买方挂单(Bid):
7   9.99 元    10000 股

同样想把最新成交价从 10.01 推到 10.03,这次需要买入 30000 股才能把三档卖盘吃完。

同样是两分钱的价格变化,薄盘口只需要 300 股,厚盘口需要 30000 股。差了 100 倍。

这就是我最初那个问题的答案。价格变化不仅取决于主动买卖的订单量,还取决于 order book 上已有的挂单深度。成交量和价格变化之间,不存在固定的比例关系。

这里自然引出几个后面会反复用到的概念。Order book 是买卖双方所有未成交挂单的集合。Market depth(市场深度)描述各档位上的挂单量——它反映了推动价格需要消耗多少订单。Liquidity(流动性)笼统地说,是在不显著改变价格的前提下能够交易多大量的能力。Price impact(价格冲击)是一笔交易对价格造成的实际影响。

买方和卖方的钱明明对等,“净流入"从哪来
#

理解了价格形成之后,我碰到了第二个说不通的事。

每一笔成交,都有一个买方和一个卖方。买方付出的钱恰好等于卖方收到的钱。所以:

$$ \text{所有买方支付的总金额} = \text{所有卖方收到的总金额} $$

这个等式在任何情况下都成立,它是记账恒等式,不需要任何假设。

但行情软件经常显示"今日资金净流入 +2 亿”。钱既然两边相等,哪来的"净”?

后来我才搞明白,这里的"资金净流入"并不是按真实现金收支来算的。它用的是另一套分类方法:把每一笔成交按照主动方的方向贴一个标签,然后分别加总。

一种常见的算法:如果一笔成交的主动方是买方(买方主动吃掉了卖方的挂单),这笔成交额计入"主动买入";反过来,主动方是卖方,就计入"主动卖出"。

$$ \text{资金净流入} = \text{主动买入成交额} - \text{主动卖出成交额} $$

用一个只有三笔交易的例子:

交易方向标签成交额
第 1 笔主动买入1000 元
第 2 笔主动卖出2000 元
第 3 笔主动买入3000 元

主动买入合计 = 1000 + 3000 = 4000 元。主动卖出合计 = 2000 元。净流入 = 4000 - 2000 = 2000 元。

但这三笔交易的真实现金收支呢?每一笔里买方付出的钱和卖方收到的钱完全相等。三笔合在一起,买方总共付了 6000 元,卖方总共收了 6000 元。没有任何资金额外"流进"了市场。

这里有一件事我一开始不理解:每一笔成交只会被贴一个方向标签。 第 1 笔是主动买入,1000 元整笔计入买入方;它不会同时在卖出方也出现一次然后抵消。方向标签是给这笔交易的主动方贴的,不是给买卖双方各贴一次。

还有一点容易忽略:所谓"资金净流入"并不是全市场统一定义的物理量。不同平台的计算口径不一样——有的用逐笔成交的方向判断,有的用价格变动方向来推断主动方,有的还按成交额大小区分"大单"和"散户"。拿一个平台的净流入数字去和另一个平台比,可能在比两个不同的东西。

我以为主动方就是下市价单的人
#

理解了净流入的分类方法之后,下一个问题是:怎么判断一笔成交的"主动方"?

我最初的想法很直接:

  • 市价单(market order)主动交易——不限价,立刻成交。
  • 限价单(limit order)被动等待——挂在那里等别人来匹配。
  • 所以主动方 = 提交市价单的人。

这个理解不准确。问题出在我把两个不同的维度搞混了。

Market order 和 limit order 讨论的是订单的价格约束:市价单不设价格限制,限价单设一个买入上限或卖出下限。Maker 和 taker 讨论的是订单对流动性的角色:已经挂在 order book 上、提供流动性的那一方是 maker;新到达、消耗已有流动性的那一方是 taker。

这两个维度不是一一对应的。一个例子就能说明。

当前盘口:

1卖一(Ask 1): 10.01 元
2买一(Bid 1):  9.99 元

某人提交了一笔限价买单:价格 10.05 元,数量 100 股。

这是一笔限价单,但它的限价高于当前卖一。撮合引擎发现它可以立即与 10.01 的卖单成交——成交价是 10.01,不是 10.05,因为卖方挂单在先,价格以先到的挂单为准。

在这笔成交里,已经挂在 order book 上的卖单提供了流动性,是 maker。新到达的买单消耗了这个流动性,是 taker。虽然买单是限价单,它仍然是主动方。

这种到达时就能立即匹配已有挂单的限价单,叫 marketable limit order。我在这里卡了一会——明明是限价单,怎么就"主动"了?后来想通的是:关键不在订单类型,而在它到达时 order book 的状态。如果一笔限价买单的价格高于当前最优卖价,它到达时就会像市价单一样立即成交,消耗掉流动性。

然后是一个更反直觉的情况:同一个限价单,可以先消耗流动性,再提供流动性。

假设 order book 的卖盘:

1卖方挂单(Ask):
2  10.05 元    500 股
3  10.02 元    200 股
4  10.01 元    100 股

新提交一笔限价买单:价格 10.03 元,数量 1000 股。

撮合过程:

  1. 100 股以 10.01 元成交——吃掉卖一,这 100 股是 taker。
  2. 200 股以 10.02 元成交——吃掉卖二,这 200 股是 taker。
  3. 10.03 的限价低于卖三的 10.05,无法匹配。
  4. 剩余 700 股以 10.03 元挂在买盘——变成了 maker。

前 300 股消耗了已有的流动性,后 700 股为市场提供了新的流动性。同一个订单,两种角色。

同一笔限价买单:前 300 股作为 Taker 吃掉两档,剩余 700 股变成 Maker

这是整个学习过程里让我想通最多东西的一步。Maker/Taker 是成交和执行层面的属性,不是 market order 和 limit order 的同义词。 区分订单的价格约束和它在流动性上的角色,很多后续的概念才能对上。

最后一个我想确认的边界条件:是不是只要有成交,就一定有一个主动方和一个被动方?

在典型的连续竞价(continuous auction)中,基本是的——每笔成交都有一个已经挂在 order book 上的 maker 和一个新到达的 taker。但集合竞价(call auction,如 A 股的开盘和收盘阶段)、盘后大宗交易,以及某些特殊撮合方式,不一定适用这个划分。所以"主动方"这个标签的适用范围是有限的。

买了那么多,价格却不动
#

搞清楚 maker/taker 之后,回到价格和成交量的关系。

假设有大量主动买入订单持续涌入,但卖方同时在不断补充挂单——每次买方吃掉卖一,新的卖方立刻在同一个价位挂上新的限价卖单。

结果是:大量成交发生在同一个价格附近,成交量很大,但价格几乎不变。

这种现象有个说法叫流动性吸收——卖方的挂单源源不断地"吸收"了买方的订单流,不让价格移动。反过来,如果买方持续补充买盘,也能吸收卖方的抛压。

这意味着一件我之前没想到的事情:大量主动买入不保证价格上涨。大量主动卖出也不保证价格下跌。价格变化是主动订单流和被动流动性供给之间的差额造成的——只有当主动买入的量超过了当前价位卖方愿意提供的量,价格才不得不往上移动。相同的订单流,在流动性充沛的市场和流动性稀薄的市场,产生的 price impact 可以完全不同。

再看量价关系
#

有了前面这些铺垫,再回来看最初接触到的四种量价组合:放量上涨、缩量上涨、放量下跌、缩量下跌。

最初看到这四个说法时,我觉得它们各自应该对应一种明确的市场状态。但其实每一种背后都有不止一种解释。

四种量价组合的典型解释

放量上涨。一种可能是积极的买盘持续涌入,逐步吃掉卖方挂单并推高价格——卖方供给跟不上,价格不得不上移。另一种可能是在高位出现了大量换手——老持有者大量卖出,同时有同等规模的新买家接盘,价格虽然在涨,但分歧在加剧,不一定是单边看多。

缩量上涨。一种可能是持有者惜售,卖方挂单稀少,只需要少量买入就能推动价格上移——这在盘口较薄的情况下很容易发生。另一种可能是市场关注度很低,交易清淡,价格的上涨缺乏成交量的支撑。

放量下跌。一种可能是大量持有者集中抛售,卖方主动压低价格。另一种可能是恐慌性抛售过程中,低位同时出现了大量承接的买盘——放量本身不能直接告诉你抛售是否已经到了尾声。

缩量下跌。一种可能是买方不积极但卖压也不大,价格温和回落。另一种可能是买盘稀薄,少量卖出就把价格砸下去了——看起来跌得不多,但盘口其实很脆弱。

单看成交量和价格变化两个数字,不足以得出确定的结论。有用的判断需要联合观察更多东西:之前的趋势、成交量相对于历史水平是高还是低、K 线结构,等等。

这里有一个细节。判断当天的成交量算"放量"还是"缩量",不能拿盘中某个时点的累计成交量直接和历史全天成交量比。如果现在下午两点,已经成交了 500 万股,而历史日均是 800 万股——直接比会觉得还不到日均,但到收盘可能就超过了。更合理的做法是和历史上同一时段的平均成交量比较。相对成交量(relative volume,RVOL)就是这个比值。

用一个简化场景来感受量价配合:一只股票在某个价格区间横盘了很久,然后某天放量突破区间上沿。之后几天成交量缩小,价格回到之前的上沿附近但没有跌破。再之后成交量恢复,价格重新上涨。

这种"放量突破 → 缩量回踩 → 企稳后重新上涨"的走势,可以用前面的思路来拆解:突破时放量,说明主动买入吃掉了阻力位附近积累的卖方挂单;回踩时缩量,说明卖压有限,之前的阻力位开始变成支撑位。但这只是事后的一种解释,不是"看到这个形态就应该买"的信号——假突破和回踩后继续下跌的情况同样常见。

1100 元的成交,1 亿的市值变化
#

学到这里,还碰到一个反直觉的数字。

假设一家公司有 1 亿股流通股。当前股价 10 元,市值 10 亿元。现在有人以 11 元买入了 100 股。

成交额:

$$ 11 \times 100 = 1100 \text{ 元} $$

如果按最新成交价重新估值全部股份:

$$ \text{新市值} = 11 \times 100{,}000{,}000 = 1{,}100{,}000{,}000 \text{ 元} = 11 \text{ 亿元} $$

成交额 1100 元,账面市值增加了 1 亿元。

市值(market capitalization)的计算方式就是最新股价乘以总股本。它用的是边际价格——最近一笔成交的价格——来给所有股份定价。这种做法叫 mark-to-market。

但这里有一个追问:如果所有股东现在同时想卖出全部股份,能拿到 11 亿元吗?

当然不能。1 亿股同时涌入市场,order book 上的买方不可能在 11 元接下这么多。每成交一笔,买方挂单就被消耗一档,价格一路往下掉。实际能卖出的总金额,远小于 11 亿元。

所以这几个量是完全不同的东西:成交量是实际成交的股数;成交额是成交量乘以成交价格;市值变化是边际成交价的变化乘以总股本;而实际可实现的交易收入,受制于 order book 深度和 price impact。

市值是按边际价格对全部股份的重估,不是所有股份都在这个价格上实际成交过。

写在最后
#

回到最初的问题:同样涨 5%,为什么成交量可以差上百倍?

现在的回答比"买的人多不多"具体多了。成交量取决于推动价格变化所需要消耗的挂单量。Order book 上各档位挂了多少单——也就是市场深度——直接决定了同样幅度的价格变化需要多少成交量。深度厚的股票,需要更多的主动订单才能推动价格;深度薄的股票,很少的成交就可能造成大幅波动。

这次理解这些问题之后,我比较深的一个体会是:在看成交量、资金净流入、市值变化这些指标之前,得先搞清楚它们各自衡量的是什么。成交量衡量交易活动的规模。“资金净流入"衡量主动买卖的方向性差异,而且还取决于平台的分类口径。市值衡量的是边际价格对全部股份的重估。它们测量的不是同一件事,不能混在一起直接比较。

参考资料
#

  • Larry Harris,Trading and Exchanges: Market Microstructure for Practitioners(Oxford University Press,2003)——关于订单类型、maker/taker 角色、撮合机制和价格形成的标准参考

相关文章

量化交易不是一个模型:从 Alpha 到执行的完整系统框架

读书时记下的一张系统图 # 2024 年我读过 Rishi K. Narang 的《打开量化投资的黑箱》(Inside the Black Box)。书里把一个典型的量化交易系统拆成几个组成部分——Alpha Model、Risk Model、Transaction Cost Model、Portfolio Construction Model、Execution Model,底下还有 Data 和 Research。

市盈率为什么不等于“多少年回本”?

整理金融基础笔记时,我想弄清楚一句常见说法:20 倍 PE,是否就意味着买进去 20 年回本?按定义算出的倍数,和股东实际收到现金的时间,中间隔着哪些条件? 从一套房子说起 # 一套房子 200 万元,每年租金收入 10 万元,价格是年租金的 20 倍。如果直接用价格除以租金,就会得到“20 年回本”。

夏普比率到底衡量了什么?

整理完风险指标,再看夏普比率时,我关注的是公式里的两个选择:为什么分子减去无风险收益率,分母又为什么选波动率?“收益除以风险”这句简称,把这两件事省掉了。 收益更高,所以更好吗 # 先看两个简化到只剩数字的策略。为了把注意力放在比较上,先假设这段时间的无风险收益率近似为 0,收益和超额收益暂时是同一个数:

风险也不是一个数字:波动率、最大回撤和 VaR 到底在衡量什么?

在收益率那篇里,同样赚了 10%,可能来自完全不同的路径。要继续比较,就得知道风险指标各自省略了什么。 这次复习时,我把波动率、最大回撤和 VaR 放在一起看:它们分别描述收益的不稳定程度、历史上的峰谷跌幅,以及给定概率下的损失阈值。用哪一个,取决于想回答什么问题。