兴业证券 <<高频研究系列>> 收益率分布因子构建
  Newt 2025年11月06日 249 0

篇分享研报中提及的几个由高频数据构建的因子,以及由当天1分钟K线的形态偏离正态的假设做的检定值构建的因子

研报重点分享

高频因子 v.s. 高频因子低频化

高频策略通常是基于level2的行情数据包含个股分钟 K 线、盘口快照、委托队列、成交明细等,在实盘利用实时数据计算结果后在极小时间内做买卖。
高频因子相较于低频因子的挑战有以下幾點

  1. IC衰减快,需要更频繁的更新因子值以捕捉高频信息,带来的代价是换手率的增加
    下图为研报中对收益率方差的高低频衰减对比,可以看到不管在IC还是收益率上,前四天的斜率(衰减速度)都较低频大。
    螢幕擷取畫面 20251122 005807.png
  2. 杂讯大,在高频的数据下随机性会被放大,提取信息的难度也提升
  3. 自相关,原始高频数据在时序上具有高度自相关的特性,这使得传统的统计分析方法难以直接应用,且因子的构造在数学性质上的要求更严格。

本篇的思路是以高频数据作出低频化处理(日频及以上),希望可以高频数据中提取出更多信息,还有可交易性

低频化思路

研报中提到AttilioMeucci 在《Risk and Asset Allocation》中写到,应该面向市场中的不变量进行建模。对于独立同分布的高频数据而言,我们认为它的不变量就是总体分布的统计特征,研报依据构造的类型及数学特性分为四类

  1. 分布信息,指标(因子/特征)对于重排序不敏感,举例来说一天中分钟收益率的方差,σ2=1Ni=1n(xix¯)2\sigma^2 = \frac{1}{N} \sum_{i=1}^{n} (x_i - \bar{x})^2,由于求和符号 \sum 的运算具有交换律,因此方差 σ2\sigma^2 的值不受數據 x1,x2,,xnx_1, x_2, \ldots, x_n 排列順序的影響。若 XX'XX 的任意排列,則 s2(X)=s2(X)s^2(X) = s^2(X').
  2. 时间信息,指标对于重排序敏感(例:时序收益率自相关性),许多时序方法都可以提取对应的时间信息。
  3. 关联信息,对于对应关系敏感(例:量价关系),许多指标都用到这类思路,像是大单对应的收益率、成交金额等等
  4. 另类信息,研报中定义为需要提前定义的概念,如:大单、尾盘等等

多空指标构建

研报中对于多空的构建是采用中位数法,将因子值以中位数分割,大于中位数的所有标的以因子值等权方式构造做多部位,空单部位则是小于中位数的标的。
我自已复现则是采用基础的五分组,保持和其他因子的方式相同,维持一致性。

复现

特殊处理

  1. 不偏要求
    对于截面上的因子值有不偏的要求,先采用boxcox变换,如果变换后偏度仍过大就采用rank
一般来说boxcox变换应该如下

y(λ)={yiλ1λ,λ0,ln(yi),λ=0.y(\lambda)= \begin{cases} \dfrac{y_i^{\lambda}-1}{\lambda}, & \lambda \neq 0, \\[6pt] \ln(y_i), & \lambda = 0. \end{cases}

这里对因子值以最小值为标准归零后再加一的位移Fimin(F)+1F_i - \min(F) + 1,保证了不会出现虚数(λ[0,1]\lambda \in [0,1])以及变换后的最小值依旧为00

Fi={(Fimin(F)+1)λ1λif λ0ln(Fimin(F)+1)if λ=0F_{i}^{*} = \begin{cases} \frac{(F_i - \min(F) + 1)^{\lambda} - 1}{\lambda} & \text{if } \lambda \neq 0 \\ \ln(F_i - \min(F) + 1) & \text{if } \lambda = 0 \end{cases}

常见收益率分布因子

本篇以日内分钟K线收益率的分布状况做了七种依据不同统计指标的因子,以及两个针对收益率偏离因子

统计指标

  1. rtn5_mean 5 分钟收益率的均值
  2. rtn1_var 已实现方差(一分钟收益率)
  3. rtn1_skew 收益率偏度(一分钟收益率)
  4. rtn1_kurt 收益率峰度(一分钟收益率)
  5. rv_up 上行收益率已实现方差
  6. rv_down 下行收益率已实现方差
  7. rv_umd 上下行已实现方差之差除以已实现方差
因子名称 IC IC IR Rank IC T 值 夏普
rtn5_mean 0.04 0.36 0.04 14.87 5.71
real_var 0.03 0.26 0.03 10.61 4.08
rtn_skew 0.02 0.36 0.03 14.72 5.66
rtn_kurt 0.02 0.33 0.02 13.64 5.24
rv_up 0.03 0.34 0.03 13.99 5.38
rv_down 0.02 0.27 0.02 11.28 5.38
rv_umd 0.02 0.23 0.03 9.63 3.70

heatmap.png

可以看到整体的表现还可以,而相关系数矩阵则揭示了一些有趣信息

  1. 偏度和风度间的相关性达60%,因为这两个计算方式分别是三/四阶标准化中心矩(moment)

动差(或称原点矩,Raw Moment)是描述随机变量或其概率分布特性的量,它通常是围绕原点00计算的。对于随机变量 XX,其**kk阶动差**(kk-th moment)定义为随机变量 XkX^k 的期望值,记为 μk\mu'_k

μk=E[Xk]\mu'_k = E[X^k]

中心动差(中心矩, Central Moment)中心动差是描述随机变量或其概率分布特性的量,它通常是围绕其平均值 μ=E[X]\mu = E[X] 计算的。中心动差相比原动差能更好地反映分布的形状,因为它不受分布位置的影响。对于随机变量 XX,其 kk阶中心动差kk-th central moment)定义为随机变量 (Xμ)k(X - \mu)^k 的期望值记为 μk\mu_k

μk=E[(Xμ)k]\mu_k = E[(X - \mu)^k]

而峰度和偏度的计算方式分别为

Skewness(偏度)=1Ni=1N(xix¯)3(1Ni=1N(xix¯)2)3/2\text{Skewness(偏度)} = \frac{ \frac{1}{N}\sum_{i=1}^N (x_i - \bar{x})^3 } {\left( \frac{1}{N}\sum_{i=1}^N (x_i - \bar{x})^2 \right)^{3/2}}

Kurtosis(峰度)=1Ni=1N(xix¯)4(1Ni=1N(xix¯)2)2\text{Kurtosis(峰度)} = \frac{ \frac{1}{N}\sum_{i=1}^N (x_i - \bar{x})^4 } {\left( \frac{1}{N}\sum_{i=1}^N (x_i - \bar{x})^2 \right)^2}

2. 不同方式刻画方差的方式之间都存在一定程度的相关性

收益率偏离因子(noise/nos)

构建方法

衡量股票的分钟收益率噪音(即观测到的收益率偏离预期收益率的差值)偏离正态分布的程度

条件 理论推断 nos 表现
高流动性
(正常市场)
许多微小交易量撮合,误差相互抵消 nos接近正态分布
低流动性
(价格跳动小)
价格变动集中在 ±1\pm 1 个基点内 nos偏离正态分布
存在大额投资者 大额买卖单对收益率产生统计上显著的差异影响 nos偏离正态分布

本篇提出两个统计量分别是SW(Shapiro-Wilk test)以及GS(可能是general_skew或gearys_stat)

Shapiro-Wilk test

  • WW 统计量衡量的是样本数据的顺序统计量(即排序后的数据)与理论正态分布的期望顺序统计量之间的相似程度(相关性)。
  • 对于给定样本数据 x1,x2,,xnx_1, x_2, \ldots, x_n(已从小到大排序),其 WW 统计量的计算公式为:

W=(i=1naix(i))2i=1n(xix¯)2W = \frac{\left(\sum_{i=1}^{n} a_i x_{(i)}\right)^2}{\sum_{i=1}^{n} (x_i - \bar{x})^2}

  • WW 统计量的取值范围是 [0,1][0, 1]
  • WW 越接近 1: 表示样本数据与正态分布的拟合程度越好,数据越接近正态分布。
  • 最初设计给小样本(3<n<503 < n < 50),现经过修正后可以适配更大样本数(n<5000n < 5000)

补充
图形检验法QQ Plot(quantile-quantile plot)也是常用的检验数据是否服从常态分配的检验方法,概念上是绘制样本分位数和理论常态分位数的散点图
WW统计量为拟合程度的二元量化指标(像or不像),较QQ plot客观但无法给出偏离的细节信习

General_Skew test

  • ZZ 统计量表示您观察到的样本偏度 (g1g_1) 距离理论值 00(即完全对称)有多少个标准误差。
  • 计算公式: Zskew=样本偏度 (g1)偏度标准误差 (seg1)Z_{\text{skew}} = \frac{\text{样本偏度} \ (g_1)}{\text{偏度标准误差} \ (\text{se}_{g1})}
def general_skew(x): g1 = stats.skew(x, bias=False) n= len(x) se_g1 = np.sqrt(6*n*(n-1)/((n-2)*(n+1)*(n+3))) return g1 / se_g1
  • 正值 (Z>0Z > 0) : 您的样本偏度 g1g_1 为正,分布为右偏态(尾巴向右拉伸)
  • 负值 (Z<0Z < 0) : 您的样本偏度 g1g_1 为负,分布为左偏态(尾巴向左拉伸)
  • 绝对值越大 : 表明观测到的偏度 g1g_1 越远离 00,偏离对称性的程度越高。

Gearys_stattest

  • ZZ 统计量表示您观察到的样本偏度 (g1g_1) 距离理论值 00(即完全对称)有多少个标准误差。
  • 计算公式: Zskew=样本偏度 (g1)偏度标准误差 (seg1)Z_{\text{skew}} = \frac{\text{样本偏度} \ (g_1)}{\text{偏度标准误差} \ (\text{se}_{g1})}
def general_skew(x): g1 = stats.skew(x, bias=False) n= len(x) se_g1 = np.sqrt(6*n*(n-1)/((n-2)*(n+1)*(n+3))) return g1 / se_g1
  • 正值 (Z>0Z > 0) : 您的样本偏度 g1g_1 为正,分布为右偏态(尾巴向右拉伸)
  • 负值 (Z<0Z < 0) : 您的样本偏度 g1g_1 为负,分布为左偏态(尾巴向左拉伸)
  • 绝对值越大 : 表明观测到的偏度 g1g_1 越远离 00,偏离对称性的程度越高。
最后一次编辑于 23天前 0

暂无评论

推荐阅读