halo 的技术博客

返回

一句话版本#

日历时间是市场的旁观者,交易活动才是市场的心跳。用「每 N 手成交量」代替「每 5 分钟」切分 K 线,收益分布的肥尾和波动聚集会大幅收敛——因为这两个「典型事实」有相当一部分不是市场的性质,而是采样时钟的伪影


一、问题:等时间采样到底错在哪#

打开任何行情软件,K 线都按日历时间切:1 分钟、5 分钟、日线。这个约定如此普遍,以至于很少有人问它的合理性。

但市场不按日历运转。考虑一个交易日里的两个片段:

  • 10:02,重磅新闻落地:1 分钟内涌入上千笔交易,价格在 60 秒里走完平时一小时的路;
  • 12:20,午间死寂:整整 20 分钟只有零星几笔小单,价格几乎不动。

等时间采样把这两段塞进同样大小的格子。结果是:

  1. 高活动期欠采样:信息最密集的时刻只拿到一个采样点,一根大实体 K 线内部的丰富结构全部丢失;
  2. 低活动期过采样:没有信息到达的时段被切出一堆几乎为零的收益,纯粹是噪声样本;
  3. 统计性质被污染:高活动 bar 的收益方差天然大于低活动 bar,混在一起就是异方差;活动强度有持续性(忙的时段后面往往还忙),映射到收益上就是波动聚集。

第三点最值得展开。收益的肥尾(fat tails)和波动聚集(volatility clustering)通常被当作金融时间序列的「典型事实」,仿佛是市场不可更改的本性。但有一个更精确的说法:它们是「市场活动强度时变」与「等时间采样」共同制造的现象——换一个时钟,它们会大幅退场。

二、理论:Clark 的 subordination 定理#

这个想法有严格的数学根基,来自 Clark(1973)的 subordinated process 框架。

设想价格由两层随机性驱动:

  • 第一层:在「业务时间」(business time)τ\tau 上,对数价格是标准布朗运动——每单位业务时间的收益是 iid 正态;
  • 第二层:业务时间对日历时间的映射 τ(t)\tau(t) 本身是个随机过程,由信息到达 / 交易活动驱动——忙的时候业务时间流得快,闲的时候几乎停滞。

在日历时间下观察,固定窗口 [t,t+Δ][t, t+\Delta] 内的收益是:

rt=στ(t+Δ)τ(t)Z,ZN(0,1)r_t = \sigma \sqrt{\tau(t+\Delta) - \tau(t)} \cdot Z, \quad Z \sim N(0,1)

这是一个方差混合正态(normal mixture):窗口内业务时间流逝多少是随机的,导致条件方差随机。方差混合正态天然肥尾——这正是我们在日线 / 分钟线上看到的形态。若活动强度还有自相关(现实中显著存在),条件方差就有持续性,波动聚集随之出现。

推论是直接的:如果能在业务时间下采样——每根 bar 对应等量的业务时间——收益就回到 iid 正态。

业务时间不可直接观测,但交易活动是它的天然代理。用累计成交量当时钟,就得到成交量 Bar(volume bars):

每累计成交 VV^* 手,切一根 bar。

活动爆发时 bar 自动加密(一分钟切好几根),死寂时 bar 自动拉长(几小时才切一根)。采样频率跟着信息到达的节奏走,这就是「信息驱动采样」的第一层含义。

三、实验设计:把因果关系钉死#

用真实数据做这个对比有个解释困境:你无法知道真实价格过程的「真相」,效果好坏说不清是时钟的功劳还是数据的巧合。所以这里用受控模拟,把机制单独隔离出来

  • 每笔交易的收益严格 iid 正态(σ=9\sigma = 9 bp)——交易时钟下,收益构造上就是正态的,没有任何肥尾成分
  • 日级活动强度服从 log-AR(1)(持续系数 0.92)——制造活动区制的持续性;
  • 日内活动呈 U 型(开收盘活跃、午间清淡),叠加 30% 概率的随机新闻爆发(某 5 分钟窗口活动强度放大 4 倍);
  • 每笔成交量独立于价格,服从对数正态。

120 个交易日,共 21.6 万笔逐笔成交。然后用两种时钟切 bar,各切约 960 根(数量对齐,保证统计量可比):

关键点:任何在时间 Bar 上出现、在成交量 Bar 上消失的统计特征,都只能来自采样时钟本身——因为底层收益构造上是 iid 正态的。

先看直觉图。下图上半是某个有新闻爆发日子的日内成交量分布,下半是两种时钟在这一天的采样点位置:

日内活动与两种时钟的采样点

时间 Bar 无视爆发,8 个点等距排开;成交量 Bar 的采样点在爆发时段密集聚拢——信息多的时候多看几眼,信息少的时候少看几眼。

四、结果一:肥尾是时钟造出来的#

对两组收益做标准化后画分布(对数纵轴,看尾部):

收益分布对比

数字说话:

统计量时间 Bar成交量 Bar
超额峰度3.520.04
Jarque-Bera 统计量496(p ≈ 0)≈ 0(无法拒绝正态)

时间 Bar 的收益呈现出教科书级别的肥尾——超额峰度 3.5 大致相当于真实日线数据的水平。但请记住:底层每笔收益是构造上完美的正态。这些肥尾 100% 来自「不同 bar 内塞进的交易笔数不同」——活动爆发的 bar 塞了上千笔,方差巨大;死寂的 bar 只有几十笔,方差微小。混合起来就是尖峰肥尾。

成交量 Bar 把每根 bar 的「业务时间含量」拉平了,于是收益回到正态,JB 检验无法拒绝。

这验证了 Clark 定理的核心预言,也给了一个换位思考:当你在真实数据的日线上看到肥尾时,其中相当一部分不是「市场有肥尾」,而是「你用错误的时钟观察市场」。

五、结果二:波动聚集也大幅退场#

波动聚集的标准检测是平方收益的自相关:

平方收益自相关

时间 Bar 的平方收益一阶自相关 0.14,前 10 阶平均 0.13,全部显著越过置信带——标准的 GARCH 形态。成交量 Bar 的对应数字是 0.01 和 -0.002,白噪声。

机制同样清楚:模拟中活动强度有 AR(1) 持续性(忙的日子后面往往还忙)。在时间时钟下,活动强度直接变成条件方差,持续性就变成波动聚集。在成交量时钟下,活动强度被吸收进 bar 的时间跨度里(忙的时候 bar 密、闲的时候 bar 疏),收益本身回到同方差。

一句话总结这两个结果:时间时钟把活动强度的动态泄漏进收益的方差里;成交量时钟把它隔离在采样密度里。

六、为什么 ML 管线特别在乎这件事#

这不只是统计洁癖。对机器学习管线,采样时钟的选择在数据层面决定了模型要对抗多少「结构性作弊机会」:

  1. 同分布假设。几乎所有监督学习都隐式假设训练样本近似同分布。时间 Bar 的收益方差随活动区制大幅漂移,模型很容易学会「先识别活动区制、再猜标签分布」——你以为它在学 alpha,其实它在学 GARCH(这与三重障碍标注法一文中固定阈值标签的病灶是同一个)。成交量 Bar 在数据源头完成了很大程度的去异方差。

  2. 信息均匀性。每根成交量 Bar 携带大致等量的市场活动,意味着每个训练样本的「信息含量」大致相等。时间 Bar 里,午间死寂的样本几乎是纯噪声,却和新闻爆发的样本享有相同的训练权重。

  3. 对下游一切的传染。标注(波动率缩放的障碍宽度)、特征(已实现波动、动量)、验证(样本独立性)都建立在 bar 之上。bar 层面的异方差会向上传染到每一层。

López de Prado 在 AFML 里把「不要用时间 Bar」列为全书第一批建议,不是修辞夸张。

七、实操三坑#

坑一:tick 计数会通胀,成交量相对稳健。 信息驱动采样家族还有 tick bar(每 N 笔成交切一根)。但「一笔」的定义受市场结构影响剧烈:同一张母单被算法拆成 100 张子单,tick 数放大 100 倍而成交量不变。过去十年算法交易普及使 tick 计数系统性通胀,跨时期比较时 tick bar 的阈值语义漂移最凶。成交量不受拆单影响,是更稳健的时钟(美元 Bar 更进一步,见姊妹篇)。

坑二:阈值须随活动水平更新。 「每 200 万手切一根」在成交活跃度翻倍后就变成每天两倍的 bar 数。实务上用 EWMA 跟踪日均成交量、按目标 bar 数动态调阈值——但要注意 EWMA 只能用过去的数据,用全样本均值定阈值是一种温和但真实的前视偏差。

坑三:A 股的午休与集合竞价。 A 股有 90 分钟午休和开收盘集合竞价。成交量 Bar 会自然跨越午休(上午的累计量在下午续上),这在统计上是特性不是 bug——午休不产生信息,本就不该切断业务时间。但若下游特征涉及「bar 内高低价」或执行假设涉及「bar 收盘可成交」,跨午休 bar 需要显式处理。集合竞价的巨量成交建议单独归入首根 bar 并做标记,避免其撮合机制差异污染连续竞价的统计。

八、诚实的边界#

三点不粉饰:

  1. 成交量时钟不是完美的业务时钟。 Clark 框架里驱动价格的是「信息到达」,成交量只是它的代理。无信息的流动性交易(指数调仓、被动申赎)贡献成交量但不贡献信息;真实数据上成交量 Bar 的正态化效果不会像本文的受控模拟这么干净——模拟里成交量与活动强度完美挂钩,现实中两者有噪声缝隙。

  2. 正态化不等于可预测性。 换时钟改善的是收益的分布性质,不会凭空创造 alpha。iid 正态的收益依然是不可预测的。它的价值在于让下游模型少学伪结构、让统计检验的假设更接近成立——是地基工程,不是印钞机。

  3. 低频策略未必值得迁移。 如果你的持仓周期以月计、信号来自财报数据,bar 层面的微观结构差异会被长周期平均掉。信息驱动采样的收益集中在日内到数日的中高频场景,以及任何以逐 bar 收益为训练样本的 ML 管线。

下一步:成交量时钟解决了「活动」的度量,但在价格大幅漂移的市场里,同样 100 手在 20 元和 60 元时代表的经济规模差 3 倍。把时钟从「股数」升级到「美元成交额」,就是美元 Bar 与信息驱动采样要讲的事。


本文实验为受控模拟,用于隔离验证采样时钟对收益统计性质的因果影响,参数为教学目的设定。真实市场中成交量与信息到达的关系含噪声,效果幅度会打折扣。本文不构成投资建议。

成交量时钟采样:用交易活动而非日历时间切分数据
https://blog.halo26812.eu.org/blog/volume-clock-sampling
Author halo
Published at 2026年7月30日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨