加权价格贡献 WPC:多市场交易时谁贡献了价格发现
一只股票在盘前、连续竞价、盘后都在动,日收益被各个时段瓜分——但份额怎么算才不被噪声炸飞?WPC 用「日收益绝对值」做权重把信息稀薄的日子按比例压低:模拟实测真实份额 [0.15, 0.70, 0.15],WPC 估出 [0.156, 0.682, 0.162],不加权平均则给出 [0.32, 0.27, 0.41] 的荒谬答案——小收益日的贡献比是除以接近零的数。60 天窗口噪声巨大,250 天以上才稳定;滚动 WPC 能看见价格发现从盘中向盘后迁移的全过程。与 Hasbrouck 信息份额的分工一句话说清:WPC 只要收益切片、不要同步报价,是碎片化程度更低的场景下最实用的粗粒度工具。诚实边界:微观结构噪声不满足鞅假设时有偏、时段划分本身就是结论的一部分、无法区分「先动」与「动得对」(中阶)。
问题:日收益被三个时段瓜分,功劳簿怎么记#
一只在多个时段(或多个市场)交易的股票,从昨天收盘到今天收盘涨了 2%。这 2% 是什么时候「发现」的?
- 盘前集合竞价里,一条隔夜财报消息把价格顶高了 0.4%;
- 连续竞价的六个半小时里,价格在多空拉锯中又涨了 1.3%;
- 盘后交易时段,一笔机构大单再推了 0.3%。
直觉的记账方式很简单:每个时段的收益除以全天收益,就是它的「贡献份额」。盘前 0.4/2.0 = 20%,盘中 65%,盘后 15%,加起来正好 100%。数学上无懈可击。
问题出在加总多天的时候。今天全天涨 2%,这个除法很稳;但下周三如果全天只涨 0.02%——盘中涨 0.5%、盘后跌 0.48%,两段几乎抵消——那么盘中的「贡献比」就是 0.5/0.02 = 2500%,盘后是 -2400%。一个几乎没有信息的日子,产生了两个天文数字的贡献比。把这种日子和正常日子简单平均,结果就是垃圾。

Barclay 和 Hendershott(2003)在研究美股盘前盘后交易时给出的解法朴素到近乎狡猾:按日收益的绝对值加权平均。信息稀薄的日子权重自动趋近于零,它再疯狂的贡献比也掀不起浪。这个统计量就是加权价格贡献(Weighted Price Contribution, WPC)。
定义:两行公式#
把第 (t) 天切成 (K) 个时段,时段 (k) 的对数收益是 (r_{k,t}),全天收益 (r_t = \sum_k r_{k,t})。时段 (k) 的 WPC 定义为:
两个乘数各司其职:右边是单日贡献比(可以疯狂),左边是这一天在整个样本里的信息权重(疯狂的日子权重小)。所有时段的 WPC 加总恒等于 1,这是它比很多价格发现度量优雅的地方——份额天然可加、可比。
直觉上,WPC 回答的问题是:「在那些价格真正动了的日子里,价格主要是在哪个时段动的?」
模拟:WPC 贴住真相,不加权平均给出荒谬答案#
构造一个知道标准答案的世界:1000 个交易日,每天的信息总量随机(25% 的日子是大信息日,其余日子信息稀薄),真实信息份额固定为盘前 15% / 盘中 70% / 盘后 15%,每个时段再叠加微观结构噪声(盘前盘后流动性差,噪声更大),且相邻时段噪声部分回吐(模拟 bid-ask bounce)。
import numpy as np
def wpc(sess_ret, day_ret):
"""加权价格贡献:sess_ret (T,K),day_ret (T,)"""
w = np.abs(day_ret) / np.abs(day_ret).sum() # 每日权重
ratio = sess_ret / day_ret[:, None] # 单日贡献比
return (w[:, None] * ratio).sum(axis=0) # 加权求和
def naive_share(sess_ret, day_ret, eps=1e-6):
"""不加权:直接对每日贡献比取平均(错误示范)"""
mask = np.abs(day_ret) > eps
return (sess_ret[mask] / day_ret[mask, None]).mean(axis=0)python1000 天跑下来:
| 时段 | 真实份额 | WPC | 不加权平均 |
|---|---|---|---|
| 盘前 | 0.150 | 0.156 | 0.317 |
| 连续竞价 | 0.700 | 0.682 | 0.268 |
| 盘后 | 0.150 | 0.162 | 0.414 |
WPC 三个份额全部贴在真实值 ±0.02 以内。不加权平均则完全崩坏:盘中真实份额 70%,它估出 27%;盘后真实 15%,它估出 41%——方向都是反的。原因就是右图那个喇叭口:

日收益绝对值越小,单日贡献比的散布越疯狂(图中纵轴已经截断在 ±8,实际有到几百的点)。盘前盘后噪声大,在小收益日里它们的伪贡献恰好最容易爆表——不加权平均就是被这些日子绑架的。加权不是锦上添花,是这个估计量能用的前提。
多少天才够:60 天窗口是噪声制造机#
WPC 是一个样本统计量,样本短了照样飘。对每个窗口长度做 400 次独立模拟,看盘后 WPC(真实值 0.15)的抽样分布:

- 60 天:四分位距约 ±0.05,极端样本能偏到 0.05 或 0.28——差出接近两倍;
- 250 天(一年):分布明显收紧,中位数贴住 0.15;
- 500 天以上:基本稳定。
实务含义直接:用 WPC 比较两个时段/市场的价格发现能力,窗口短于一年时差异很可能只是噪声。论文里常见的「XX 时段 WPC 从 12% 上升到 18%」这种结论,如果窗口只有一个季度,先查显著性再信。
滚动 WPC:看见价格发现的迁移#
WPC 最有生产力的用法不是算一个静态数字,而是滚动着算,监测价格发现的结构性迁移。模拟一次制度变化:前 500 天盘后份额 15%,后 500 天盘后交易活跃化、份额升到 40%(对应现实里美股盘后交易量近十年的持续增长,或 A 股若引入盘后固定价格交易的场景):

250 日滚动窗口下,三条 WPC 曲线在断点后开始移动,约一个窗口长度后完全反映新均衡——盘中从 0.70 滑向 0.50,盘后从 0.15 爬到 0.40。这类图直接回答的问题包括:
- 新交易时段(盘后固定价格、科创板做市)上线后,有没有真的承接价格发现,还是只是搬运噪声;
- 同一只股票 A+H 两地上市,价格发现的重心在向哪边漂移;
- 期货 vs 现货、ETF vs 成份股,谁在引领。
与 Hasbrouck 信息份额的分工#
价格发现度量这条线上,WPC 经常和 Hasbrouck 信息份额(Information Share, IS)放在一起比。分工其实很清楚:
| WPC | Hasbrouck IS | |
|---|---|---|
| 数据要求 | 各时段/市场的收益切片 | 多市场同步高频报价 |
| 方法 | 加权平均,两行代码 | VECM + 方差分解 |
| 输出 | 份额,加总恒为 1 | 份额区间(上下界) |
| 适用 | 时段拆分、粗粒度市场对比 | 严格同时交易的多市场 |
WPC 的本质是把日收益在时间轴上做归因,不需要两个市场同时报价——盘前和盘中根本不重叠,IS 类方法直接失效,WPC 却天然适用。代价是它更粗糙:只看收益切片,不建模价格之间的引领滞后关系。经验法则:时段互斥用 WPC,市场并行用 IS。
诚实边界#
第一,微观结构噪声不满足鞅假设时有偏。 WPC 隐含假设各时段收益是「信息 + 均值为零的噪声」。如果盘前价格系统性过度反应、盘中回吐(动量-反转结构),WPC 会把盘前的过度反应记成盘前的「价格发现」,把盘中的纠错记成负贡献。模拟里相邻时段噪声回吐 50% 的设定已经让估计有 1-2 个百分点的偏差;现实中隔夜-日内的系统性反转(参考隔夜收益异象的文献)会更严重。WPC 度量的是「价格在哪动」,不完全等于「信息在哪进」。
第二,时段划分本身就是结论的一部分。 盘前算到几点、集合竞价算独立时段还是并入盘中,不同划分给出不同份额。跨研究比较 WPC 数字前,先对齐切法——这和收盘集合竞价失衡一文里「收盘价语义取决于机制」是同一类问题。
第三,无法区分「先动」与「动得对」。 某时段份额高,可能因为它信息效率高,也可能只是因为它恰好排在信息发布日程(财报、宏观数据)之后。想说因果,要控制信息到达时点,或者用制度变化做自然实验——WPC 本身只是记账,不是归因。
归宿#
WPC 是价格发现工具箱里的粗粒度速写笔:两行代码、只要收益切片、份额天然可加。用它做时段拆分、监测价格发现迁移、给制度变化做前后对比,都是本职工作;要更精细的多市场引领关系,交给 IS/VECM 那条线。记住两条铁律:必须加权(否则被小收益日炸飞),窗口至少一年(否则差异是噪声)。