交易时间与交易聚集性 (Trading Time and Trade Clustering)
大白话(第一件事):同样一分钟,权重不一样。9:35 那一分钟和 11:30 那一分钟都是 60 秒,但前者可能只成交 100 股、后者成交 5000 股——后者对价格的影响大得多。兴业金工的「交易时间」就是按成交量重新给一天切 50 刀,每一刀代表等量成交,而不是等量时间。
大白话(第二件事):交易的到来是扎堆的。短间隔后面往往跟短间隔,长间隔后面往往跟长间隔——就像波动率聚集一样,只是发生在「交易间隔」这个维度上。
关键数字:把分钟换成交易时间后,样例股票的分钟收益率峰度从 26.78 降到 16.94、偏度从 −1.26 改善到 −0.53。
从「自然时间」到「交易时间」
为什么自然时间不够用
日内收益率的分布有明显的尖峰厚尾特征。1973 年 Clark 首次在价格变动的随机过程中引入从属过程 (subordinate process),把价格变动从「自然时间」变换到按交易活跃度加权的「交易时间」,以更好地表示波动率聚集与尖峰厚尾。
日内数据让这个问题更具体:在分钟或更高频的观测维度下,每一个等量的时间间隔对价格的影响并不相同。同样两个分钟,成交量的不同会导致对价格影响程度的不同,进而造成自然时间上的「跳价」或变动较小——这本质是「自然时间」与「交易程度」不对等造成的。
三步构造算法
第一步:设定「交易时间」阈值。 类比自然时间里「60 秒 = 1 分钟」,先要定一个「交易时间间隔」的阈值:计算股票 T 日内分钟成交量总和,再除以 50,得到成交量阈值:
tradingVol = \sum_{t=1}^{240} \frac{volume_t}{50}
第二步:计算「交易时间」价格。 从第一分钟开始逐步累加成交量;一旦累加值达到「交易时间间隔」,就说明当前到达了「一个交易时刻」。此时把囊括在内的所有分钟收盘价按分钟成交量占比加权求和,得到这个「交易时间」的收盘价:
tradingClose = \left[ \frac{\sum_t \bigl(volume_t \cdot close_t \cdot \mathbb{1}\{te \in i\}\bigr)}{tradingVol} \right]_{i=1,2,\ldots,50}
其中 tradingClose_i 是第 i 个「交易时间」下的收盘价,volume_t、close_t 分别是第 t 个自然时间下的成交量和收盘价,\mathbb{1}\{te \in i\} 表示当前自然时间 te 是否属于第 i 个交易时间。
第三步:记录每个「交易时刻」包含几个分钟。
tradingTime = \left[ \sum_t \mathbb{1}\{te \in i\} \right]_{i=1,2,\ldots,50}
至此,每只股票每天的日内「自然时间」数据被刻画成50 个「交易时间」,得到两组数据:一组是每个交易时间的股价,另一组是「交易时间 → 自然时间」的转换关系(每个交易时刻占几个自然分钟)。
效果:分布更接近正态
例子(2024 年 3 月 29 日某只股票):该股在 9:38 至 9:50 左右出现一次较大幅度波动,收盘价由此前 12.8 涨至最高 13.28,随后跌回 12.75 左右;下午整体走势平缓。
| 峰度 | 偏度 | |
|---|---|---|
| 原始分钟收益率 | 26.78 | −1.26 |
| 转换为「交易时间」后 | 16.94 | −0.53 |
频率分布直方图与核密度图上,调整后的分布正态性明显改善。这说明「交易时间」转换确实部分改善了收益率分布的正态性。
「交易时间」下的基础性因子
转换之后,本质上新的股价时序特征与原始股价特征一致。四个基础因子:
| 因子 | 定义 | IC 均值 | IC 标准差 | ICIR | T 统计量 |
|---|---|---|---|---|---|
cutVol_rtnMean |
交易时间下收益率的均值 | 0.046 | 0.089 | 0.52 | 24.54 |
cutVol_rtnVar |
交易时间下收益率的方差 | 0.047 | 0.080 | 0.59 | 27.84 |
cutVol_timeMean |
交易时刻时间间隔的均值 | 0.008 | 0.051 | 0.15 | 7.18 |
cutVol_timeVar |
交易时刻时间间隔的方差 | 0.026 | 0.072 | 0.37 | 17.27 |
| 因子 | 多空年化 | 多头年化 | 空头年化 | 年化波动率 | 夏普 | 最大回撤 | 多头换手率 |
|---|---|---|---|---|---|---|---|
cutVol_rtnMean |
42.79% | 16.17% | −18.88% | 8.40% | 5.10 | −7.56% | 15.36% |
cutVol_rtnVar |
35.24% | 14.68% | −16.18% | 8.08% | 4.36 | −6.00% | 7.19% |
cutVol_timeVar |
27.76% | 12.41% | −11.85% | 6.47% | 4.29 | −5.74% | 8.13% |
cutVol_timeMean |
8.68% | 3.97% | −4.32% | 4.81% | 1.81 | −19.93% | 11.42% |
因子的经济逻辑:与普通的收益率均值因子和已实现方差因子类似,都是通过刻画收益率分布偏离正态分布的距离来提取异常交易行为的信息。但交易时间的转换加入了交易活跃度作为从属特征,在一定程度上避免了流动性、集中交易导致的收益率偏移。换句话说:如果在交易时间下收益率仍然明显偏移正态分布,那里的异常交易行为特征更明显,Alpha 信息也更纯粹。
正交化后的表现:这两个因子相关性最高的底层因子正是普通的均值和方差因子。正交化后与底层所有高频因子的相关性均值分别约 23% 和 20%。
| 因子 | IC 均值 | IC 标准差 | ICIR | T 统计量 |
|---|---|---|---|---|
cutVol_rtnMeanN |
0.024 | 0.058 | 0.42 | 19.68 |
cutVol_rtnVarN |
0.023 | 0.040 | 0.56 | 26.58 |
| 因子 | 多空年化 | 多头年化 | 空头年化 | 年化波动率 | 夏普 | 最大回撤 | 多头换手率 |
|---|---|---|---|---|---|---|---|
cutVol_rtnMeanN |
18.97% | 9.18% | −8.43% | 5.83% | 3.25 | −11.91% | 25.32% |
cutVol_rtnVarN |
21.64% | 13.27% | −6.90% | 3.92% | 5.52 | −4.07% | 11.84% |
注意换手率的上升:正交化后多头换手率从 15.36% 升到 25.32%、从 7.19% 升到 11.84%。正交化去掉的是「和底层因子重复的部分」,留下的更接近噪声的部分——IC 降、夏普升、换手升,这三件事同时发生,值得留意。
第二件事:交易聚集性
把交易时间当作点过程
Level-1 高频数据的常规处理方式是把逐笔成交切片到固定频率(如分钟),这能高效地产出体量小、易用的数据,但丢失了交易发生的间隔时间这一特性。
本节的做法正好相反:用上一节自己设计的「交易时间」算法重新得到间隔。设 t_i 是第 i 个「交易时刻」到达时对应的自然时间,则从第 i-1 到第 i 个交易时刻的间隔为 \Delta t_i = t_i - t_{i-1}。50 个交易时刻 → 50 个间隔时间,每一个间隔代表下一笔同等交易水平的到达时间。
交易聚集性:短间隔后面往往跟短间隔,长间隔后面往往跟长间隔——与波动率聚集同构,只是发生在交易到达的维度上。
两个可观察证据(报告图 9、图 10):
- A 股日内成交量呈明显 U 型分布:开盘和收盘阶段交易强度大
- 某股的日内五分钟滚动成交量之和呈现明显的聚集现象:部分时段成交量集中增加(对应「跟风交易者」导致的成交量激增)
检验方式 1:时序相关系数
对 50 个交易间隔数据统计一阶自相关性,记为 cutVol_timeCor。自相关性越大,说明时序上时间间隔的聚集现象越明显。
| 因子 | IC 均值 | IC 标准差 | ICIR | T 统计量 |
|---|---|---|---|---|
cutVol_timeCor |
0.045 | 0.099 | 0.45 | 21.20 |
| 因子 | 多空年化 | 多头年化 | 空头年化 | 年化波动率 | 夏普 | 最大回撤 | 多头换手率 |
|---|---|---|---|---|---|---|---|
cutVol_timeCor |
33.81% | 16.12% | −14.79% | 8.62% | 3.92 | −7.48% | 8.71% |
正交化后得 cutVol_timeCorN:IC 均值 0.022、ICIR 约 0.39;多空年化 16.03%、多头 8.10%、夏普 2.96、最大回撤 −6.72%、多头换手率 13.56%;与底层所有高频因子的时序相关性均值约 35%。
检验方式 2:分桶熵
检验方式 1 只考虑了交易时间自身,没引入股价涨跌特征。方式 2 把两者都放进来:参考《成交量分布中的 Alpha》里的分桶熵思路,从整体角度刻画交易时间的分化特征,反向刻画交易聚集性的强度。
分桶熵的思路:刻画一组数据的分化程度与随机性。
例子:如果大量出现「上涨且间隔绝对值均为 3」这样的组合,说明该股出现了交易聚集现象,整体交易规则呈现出极强的一致性;反之可以认为交易的时间间隔相对随机。
两个因子都是正向逻辑:因子值越大,股票的交易聚集现象越强烈。最终取过去 20 个交易日的均值作为因子值。
| 因子 | IC 均值 | IC 标准差 | ICIR | T 统计量 |
|---|---|---|---|---|
cutVol_entropy |
0.020 | 0.066 | 0.31 | 14.41 |
| 因子 | 多空年化 | 多头年化 | 空头年化 | 年化波动率 | 夏普 | 最大回撤 | 多头换手率 |
|---|---|---|---|---|---|---|---|
cutVol_entropy |
24.34% | 10.95% | −10.41% | 5.86% | 4.16 | −5.78% | 12.19% |
cutVol_entropy 的特异性极强:与底层所有高频因子的时序相关性低于 35%,均值仅 16%。这是全篇特异性最高的因子。
与 ACD 模型的关系
ACD (Autoregressive Conditional Duration) 模型与 GARCH 同构:GARCH 刻画波动率的聚类性,ACD 刻画交易的聚类性。ACD 通过考虑交易活动的随机性和时间间隔的非等间隔性,目标是更准确地描述金融市场的微观结构并预测交易发生的时机,通常用极大似然估计参数。
本文为什么不用 ACD(报告给的两条理由):
- 计算复杂度相对较高
- 没有把股价涨跌特征纳入考虑——更大的涨跌幅度是否会影响间隔时间?
于是本文用「一阶自相关」和「分桶熵」两个简化方式替代。
与本 wiki 其他页面的接口
- 日内过度交易 — 同属「交易行为不是均匀发生」这条线索,但那边关心的是过度交易(换手),这边关心的是间隔的聚集
- 日内 W 形 HFQ 分布 — 本文的 U 型成交量分布证据之一(开盘收盘成交密集);HFQ 视角的日内形态刻画
- HFQ 高频报价识别 — A 股高频报价的识别;本节的「交易时间」是把报价/成交的到达时间重新加权
- HHIt — 度量日内方差在时间上的集中度;本节的交易聚集性度量的是交易到达间隔的聚集,两者是不同维度上的「扎堆」
- 订单流的归一化 — 「该除以什么」的问题;本节的交易时间转换也是一种归一化思路(除以活跃度而非成交量绝对值)
- 参与率谬误 — 用成交量给信号归一化时的陷阱;本节的交易时间构造同样以成交量为权重
- 成交量分桶熵与极大值分布因子 — 同一套「分桶熵」工具的另一处应用:那一页用它刻画成交量的分布形态,本页用它刻画交易间隔的分化程度,分桶的对象不同
Open Questions
- 50 这个数字是拍的:类比「60 秒 = 1 分钟」而设,但报告没做敏感性检验(20 / 30 / 100 个交易时间会怎样)
tradingClose的加权方式值得推敲:按「成交量 × 收盘价」求和再除以tradingVol,得到的是交易时间内的成交量加权均价 (VWAP),而不是「收盘价」。这个命名与实际口径不符,报告未说明为何不用最后一分钟的收盘价- 尾部截断:50 个交易时间是用全天总成交量除以 50 定的阈值,但开盘的巨量往往一个交易时间就超过阈值——实际切出来的段数不一定正好是 50,报告未讨论这个边界情况
- 分桶熵的分桶方案未写:分几桶、桶边界怎么定、按什么变量分桶(时间间隔?涨跌方向?),都没有交代
- 「交易聚集 → 未来收益低」的方向性缺乏独立证据:报告只给出因子表现,没有对聚集性成因的独立讨论;聚集性究竟是「知情交易者扎堆」还是「算法拆单」造成的,无法从报告区分
- 与波动率聚集的关系未验证:交易间隔聚集与收益率波动聚集在同一天是否共变,报告没有做这一检验
Sources
- summaries/202406-xingye-association-information-alpha/202406-xingye-association-information-alpha — 兴业金工《高频研究系列八—关联信息中的 Alpha》,2024-06-05