Alpha101:101 个公式化量价因子深度解析(三)总结
  我是宽客 2025年06月16日 302 1

一、背景

Alpha101 的核心是通过特征工程优化因子,以此简化模型构建并提升训练效率与效果。

Alpha101main.JPG

Alpha101因子体系如同量化投资领域的一座宝藏,其中101个因子构成了众多投资策略的"地基",始终备受关注。

此前的两篇文章已深入拆解这些因子的设计逻辑及其预测市场走势的底层原理,可参考以下链接获取深度解析:

从Alpha101因子的发展历程中,我们可以清晰地观察到量化投资领域的几个显著趋势:

  • 从简单到复杂,再到回归简洁:量化投资的探索始于简单的统计规律,逐步发展到高度复杂的模型构建,最终又可能回归到对核心驱动因素的简洁刻画。这反映了对市场理解的不断深化和对有效性与实用性之间平衡的持续追求。
  • 从经验驱动到数据驱动:早期因子设计更多依赖于研究者的经验和直觉,而随着数据科学和计算能力的提升,机器学习等算法开始在因子发现和优化中扮演核心角色,实现了从“人拍脑袋”到“算法自动优化”的转变。
  • 从单一视角到多维融合:因子设计从最初只关注单一价格或成交量指标,发展到综合考虑多种市场信息,包括价格、成交量、波动率、相关性等多个维度,并通过复杂的组合方式实现多维信息的有效融合。
  • 从粗放调整到精准微调:因子参数的设置从最初的经验性整数,演变为通过优化算法得到的精确小数,这体现了对因子表现精益求精的追求和对市场细节的极致捕捉。
  • 从追求模型复杂到追求策略实用:尽管因子模型本身可能极其复杂,但最终的目标始终是构建在实际市场中能够产生超额收益的有效策略。Alpha#101的简洁性正是对这一实用主义哲学的高度概括。

通过对101个Alpha因子的核心逻辑分析,我们可以将这些因子分为以下几类:

  1. 反转型因子:约占45%,主要基于价格和交易量的短期反转逻辑,寻找超买超卖机会

    • 代表因子:Alpha#2、Alpha#3、Alpha#6、Alpha#13
    • 特点:通常使用相关性(correlation)和协方差(covariance)算子,关注价格与交易量的关系
  2. 动量型因子:约占25%,主要基于价格趋势的延续性,寻找趋势跟踪机会

    • 代表因子:Alpha#4、Alpha#43、Alpha#52
    • 特点:通常使用排名(rank)和时间序列排名(ts_rank)算子,关注价格强度和持续性
  3. 复合型因子:约占20%,结合多种逻辑,如反转与动量、价格与交易量等

    • 代表因子:Alpha#1、Alpha#5、Alpha#11、Alpha#17
    • 特点:通常使用多种算子组合,逻辑较为复杂,适应性较强
  4. 自适应型因子:约占5%,根据市场条件动态调整策略

    • 代表因子:Alpha#9、Alpha#10
    • 特点:使用条件表达式,根据不同市场环境切换策略
  5. 行业中性化因子:约占5%,通过行业中性化处理减少系统性风险

    • 代表因子:Alpha#48、Alpha#58、Alpha#59
    • 特点:使用indneutralize算子,关注个股相对于行业的表现

市场应用场景分析

根据持有期和应用场景,Alpha101因子可分为:

  1. 超短期因子:持有期1-3天,约占30%

    • 适用场景:日内交易、高频交易策略
    • 代表因子:Alpha#2、Alpha#9、Alpha#10、Alpha#12
  2. 短期因子:持有期3-7天,约占40%

    • 适用场景:短线交易、波段操作
    • 代表因子:Alpha#1、Alpha#3、Alpha#5、Alpha#6、Alpha#11
  3. 中期因子:持有期7-15天,约占25%

    • 适用场景:中线投资、趋势跟踪
    • 代表因子:Alpha#8、Alpha#19、Alpha#46、Alpha#49
  4. 长期因子:持有期15天以上,约占5%

    • 适用场景:长线投资、价值投资
    • 代表因子:Alpha#56、Alpha#71

Alpha101 因子的进化过程,能帮咱们搞明白量化投资策略是怎么一步步发展来的,里头的门道和背后的投资思路都特别值得琢磨。

二、Alpha101因子值

Alpha101关键词因子值词云.JPG

Alpha101因子体系的构建基石是其所使用的各种基础因子值。这些因子值是对市场原始数据的提炼和加工,它们通过不同的组合和变换,形成了具有预测能力的信号。Alpha101中主要使用的基础因子值包括:returns(收益率)、open(开盘价)、close(收盘价)、high(最高价)、low(最低价)、volume(成交量)、vwap(成交量加权平均价)、cap(市值)以及IndClass(行业分类)。
通过分析101个Alpha因子使用的因子值,我们可以得出以下结论:

  1. 最常用的因子值

    • 收盘价(close):出现在78个因子中
    • 交易量(volume):出现在62个因子中
    • 成交量加权平均价格(vwap):出现在57个因子中
    • 开盘价(open):出现在42个因子中
    • 平均交易量(adv系列):出现在40个因子中
  2. 因子值组合模式

    • 价格与交易量组合:最常见的组合模式,约占70%的因子
    • 多种价格指标组合:如open、close、high、low的组合,约占40%的因子
    • 价格与平均交易量组合:如close与adv(平均成交量)系列的组合,约占30%的因子
    • 行业中性化组合:使用IndClass进行中性化处理的因子约占10%
  3. 稀有因子值

    • 市值(cap):仅在少数因子中使用,主要用于规模效应相关因子

这些基础因子值可以进一步通过简单的数学运算进行合成,形成更具金融意义的派生指标。以下是一些常见的合成方式及其金融意义:

  • (high + low) / 2:中间价

    • 金融意义:代表了当日价格波动的中心位置,可以作为衡量股票日内平均价格的简单指标。它比单纯的开盘价或收盘价更能反映当日的整体价格水平。
    • Alpha101示例:在Alpha#2中,rank(open) + rank(close)的组合中,虽然没有直接使用中间价,但其核心思想是综合开盘和收盘的价格信息。更直接的中间价概念可能在其他因子中作为输入,例如与VWAP进行比较。
  • open - close_{t-1}:隔夜跳空

    • 金融意义:衡量当前交易日开盘价与前一交易日收盘价之间的差异。正值表示向上跳空,负值表示向下跳空。隔夜跳空通常反映了非交易时段(如盘后消息、宏观经济数据发布等)对市场情绪和预期的影响,是捕捉短期市场情绪变化的有效指标。
    • Alpha101示例:Alpha#101中虽然没有直接使用隔夜跳空,但其对日内价格的关注,与隔夜跳空对日间价格变化的关注形成对比。在实际因子构建中,隔夜跳空常用于捕捉开盘时的市场反应。
  • close - open:日内涨跌幅

    • 金融意义:直接反映股票在当日交易时段内的价格变化。正值表示日内上涨,负值表示日内下跌。它能够迅速捕捉市场对该股票在当日的情绪和交易力量的对比,是衡量日内动量和压力的重要指标。
    • Alpha101示例:Alpha#101的公式为((close - open) / ((high - low) + .001)),其中close - open是核心组成部分,直接衡量了日内动量。这表明日内涨跌幅是捕捉短期市场情绪和动量最直接的指标之一。
  • close - close_{t-1}:收益额

    • 金融意义:表示股票从前一交易日收盘到当前交易日收盘的价格变化绝对值。它是计算收益率的基础,直接反映了投资的绝对回报。
    • Alpha101示例:在许多因子中,returns(收益率)是基于close - close_{t-1}close / close_{t-1} - 1计算的。例如,Alpha#1中returns < 0的条件判断,就依赖于收益额或收益率的计算。
  • close / close_{t-1} - 1:收益率

    • 金融意义:最常用的衡量投资表现的指标之一,表示股票价格的相对变化。它消除了价格水平的差异,使得不同价格区间的股票表现具有可比性。
    • Alpha101示例returns是Alpha101中广泛使用的基础因子,例如Alpha#1、Alpha#19、Alpha#39等都直接或间接使用了returnsreturns通常就是指close / close_{t-1} - 1
  • high - low:当日价格波动的总幅度

    • 金融意义:衡量股票在当日交易时段内的最高价与最低价之间的价差,反映了股票的日内波动强度。幅度越大,通常意味着当日交易活跃度高或市场不确定性大。
    • Alpha101示例:Alpha#101的公式中((high - low) + .001)作为分母,用于对日内涨跌幅进行波动率调整。这表明high - low是衡量日内波动率的关键指标。
  • close - vwap:收盘价与当日VWAP的偏离

    • 金融意义:VWAP(成交量加权平均价)是当日所有交易的平均价格。close - vwap的正偏离表示收盘价高于当日平均交易成本,可能暗示买盘力量在收盘时段占据优势;负偏离则可能暗示卖盘压力。这个指标能够反映当日价格发现过程的结果,是衡量日内交易效率和买卖力量对比的重要信号。
    • Alpha101示例:在Alpha#101的许多因子中,vwap被广泛用于衡量价格的“真实”平均水平,并与close价进行比较以捕捉市场微观结构中的异象。例如,Alpha#100中close - vwap的变体被用于构建威廉指标。
  • (high * low)^0.5:几何平均价格

    • 金融意义:代表了日内价格的“中心”位置,相比算术平均(high + low) / 2,几何平均对极端值不那么敏感,因此在某些情况下可能提供更稳健的价格中枢估计。它通常小于或等于算术平均。
    • Alpha101示例:虽然在Alpha101的公开公式中不常见直接使用几何平均价格,但在实际因子构建中,这种平滑价格的方式可能作为输入,以减少极端价格对因子计算的影响。
  • returns^2:收益率平方

    • 金融意义:收益率的平方通常用于衡量资产价格变动的幅度,即波动性。在一段时间内计算每天收益率的平方和,实际上是在计算这段时间内收益率变化的总和,而不考虑方向。这在构建波动率相关因子时非常有用。
    • Alpha101示例:Alpha#48中可能使用了类似的概念来捕捉市场波动特征。例如,stddev(returns, 20)本身就包含了对returns平方的隐含计算。
  • (close + high) - low:当日价格波动的幅度指标

    • 金融意义:结合了收盘价、最高价和最低价,旨在更全面地反映当日价格变动的强度。它可能用于捕捉价格在日内交易中的活跃程度和潜在的趋势力量。
    • Alpha101示例:Alpha#35中可能包含了类似这种对日内价格波动幅度的考量,以识别价格动量或反转信号。
  • close / open:日内收益率比值

    • 金融意义:表示从开盘到收盘的价格变化比率,是衡量日内动量和交易效率的直接指标。如果比值大于1,表示日内上涨;小于1则表示日内下跌。
    • Alpha101示例:Alpha#36中可能利用了这种比值来捕捉日内价格趋势,例如rank(close / open)
  • vwap + close:价格综合水平

    • 金融意义:将成交量加权平均价与收盘价相加,旨在提供一个综合性的价格水平指标。这种简单的加和可能用于构建一些趋势或动量因子。
    • Alpha101示例:Alpha#34中可能通过这种方式来衡量股票的整体价格水平,并在此基础上进行进一步的计算。
  • ((close - low) - (high - close)) / (high - low)):收盘价相对于日内中点的偏离

    • 金融意义:这个表达式衡量了收盘价在当日最高价和最低价区间内的相对位置。如果结果接近1,表示收盘价接近最高价;如果接近-1,表示收盘价接近最低价;如果接近0,表示收盘价接近日内中点。这可以作为衡量日内买卖力量强弱的指标。
    • Alpha101示例:Alpha#100中((close - low) - (high - close)) / (high - low)) * volume的核心部分,用于捕捉价格动量与交易活跃度之间的关系,识别超买超卖信号或动量反转。

这些合成因子值通过对基础数据的多角度加工,为后续更复杂的算子操作提供了丰富的输入,是Alpha101因子体系能够捕捉多样化市场异象的关键。

三、算子

alpha101算子云图.JPG

Alpha101因子体系的精髓在于其对各种算子的灵活运用。算子是连接基础因子值和最终Alpha因子的桥梁,它们通过数学运算和逻辑变换,将原始数据转化为具有预测能力的信号。理解这些算子的作用及其组合方式,是掌握Alpha101因子体系的关键。

通过分析101个Alpha因子使用的算子式,我们可以得出以下结论:

  1. 最常用的算子式

    • 横截面排名(rank):出现在82个因子中
    • 时间延迟(delay):出现在58个因子中
    • 相关性(correlation):出现在54个因子中
    • 差分(delta):出现在49个因子中
    • 时间序列排名(ts_rank):出现在43个因子中
  2. 算子式组合模式

    • 排名与相关性组合:如rank与correlation组合,约占40%的因子
    • 排名与差分组合:如rank与delta组合,约占35%的因子
    • 时间序列操作组合:如ts_rank、ts_min、ts_max组合,约占30%的因子
    • 衰减与相关性组合:如decay_linear与correlation组合,约占20%的因子
  3. 稀有算子式

    • 符号幂函数(signedpower):仅在少数因子中使用
    • 乘积(product):使用频率较低,主要用于复合型因子
    • 行业中性化(indneutralize):主要用于高级因子,需要行业分类数据

3.1 四则运算

符号 逻辑含义 与 “或者 / 并且” 的差异
+ 线性叠加,综合强度:将两个或多个指标进行线性加和,旨在综合不同维度或不同时间尺度上的信号强度。结果可正可负,反映了信号的累积效应。 不要求条件共存,更侧重于“信号的累加”。例如,“偏离 + 量能”可以理解为:即使量能不强,只要偏离足够大,信号依然存在,只是强度不同。
- 差异衡量,相对强度/背离:计算两个指标之间的差值,用于衡量相对强度、变化量或是否存在背离。结果可正可负,正负号通常具有明确的金融意义。 侧重于“相对关系”或“变化量”。例如,“A - B”表示A相对于B的强弱或变化。当A和B方向相反时,差值会放大,从而突出背离信号。
* 非线性共振,条件共存:将两个或多个指标进行乘积运算,旨在捕捉指标之间的协同效应或非线性关系。结果的符号和大小受所有乘数的影响,通常要求乘数之间存在同向关系才能产生显著信号。 要求符号一致,更侧重于“信号的共振”或“条件同时满足”。例如,“趋势 * 量能同向”意味着只有当趋势和量能都朝同一方向时,信号才会被显著放大。
/ 比率衡量,相对比例/效率:计算两个指标之间的比率,用于衡量相对比例、效率或单位成本。结果通常反映了效率、强度或价格与成本的关系。 侧重于“相对效率”或“单位价值”。例如,“A / B”表示每单位B所对应的A的价值或强度。

四则运算(加、减、乘、除)是所有复杂计算的基础,在Alpha101因子中扮演着至关重要的角色。它们不仅用于简单的数值组合,更承载着深刻的金融逻辑。

相加与相减

相加和相减运算在Alpha101中常用于衡量不同指标之间的差异、累积效应或相对强度。在进行这些运算时,需要核心考量正负值与量纲关系:

  • 正负值决定方向与抵消效应:例如,close - open衡量日内涨跌方向。当两个具有相反方向的指标相加时,可能会产生抵消效应,从而掩盖真实的趋势或信号。例如,一个上涨动量因子与一个下跌反转因子相加,其结果可能模糊不清。
  • 数值大小决定量纲主导性:在加减运算中,数值较大的指标往往会主导结果,而数值较小的指标可能被“淹没”。例如,将一个波动率很小的指标与一个价格变动很大的指标相加,波动率指标的贡献可能微乎其微。因此,在必要时,需要通过标准化(如Z-Score)或分拆分析等手段消除量纲干扰,确保每个组成部分都能有效贡献。

相乘与相除

相乘和相除运算在Alpha101中常用于衡量指标之间的比例关系、协同效应或非线性放大/衰减效应。相乘运算的核心逻辑由数值区间和符号组合决定:

  • 数值区间:变量值属于>1(0,1)<0会导致截然不同的放大/缩小效应。例如,两个都大于1的数值相乘会放大结果,而两个都小于1(但大于0)的数值相乘会缩小结果。
  • 符号组合:正负号的组合直接影响结果的方向,进而影响多空信号的判断。例如,负负得正,正负得负。

Alpha101中相乘运算的典型场景

场景 数学表达 投资逻辑
同向放大 >1 * >1 趋势 + 量能双重确认,信号增强。
同向衰减 <1 * <1 冷门股或横盘整理,信号减弱。
矛盾对冲 >1 * <1 趋势与量能背离,信号抵消或反转。
符号反转 (- * +) 下跌趋势 + 高波动,或负相关量价关系。

乘积运算的核心作用是强化同向信号、对冲矛盾信号、反转负向信号。在Alpha101中,相乘常作为“多因子共振”或“背离检测”的工具,通过非线性组合提升因子的预测能力。

多变量相乘的符号法则:奇偶性决定方向

在多个变量相乘时,最终结果的符号由负因子的数量决定:负因子数量为奇数时结果为负,为偶数时结果为正。在Alpha101中,通常不超过3个变量相乘,以保持逻辑的清晰性和可解释性:

  • 2变量组合:最常见,如“趋势 × 量能”,用于捕捉同方向共振。例如,Alpha#2中的rank(volume) * rank((close - open) / open),用于衡量成交量和日内收益率的协同性。
  • 3变量组合:需谨慎使用,仅在明确业务逻辑支撑时采用。例如,Alpha#20中包含3个乘法运算,通过多维度乘积来捕捉复杂的市场异象。
  • 4个及以上变量:极少使用,因复杂度极高,且容易陷入“过拟合”——看似拟合历史数据,实则无法适应市场变化。Alpha25中有4个因子相乘,但因量纲不同,直接相乘可能导致数值尺度失衡。

乘以(-1):在Alpha101中,乘以(-1)的本质是因子方向的逻辑反转。这可用于构建反转策略或捕捉背离信号。例如,当一个因子通常表示看多信号,但市场出现反转迹象时,通过乘以-1可以将其转化为看空信号。

场景 数学表达 投资逻辑
直接反转 (-1) * F 看多信号变为看空,反之亦然。
量价背离 F_A * (-1) * F_B 因子A与因子B方向相反时信号增强。
波动率反转 (-1) * volatility 高波动看空,低波动看多。

3.2 各种算子说明

除了基本的四则运算,Alpha101因子体系还广泛使用了多种专门的算子,这些算子能够对数据进行时间序列处理、统计分析、排名变换等,从而挖掘出更深层次的市场信息。

算子式 描述 使用频率
rank(x) 横截面排名
delay(x, d) d天前x的值
correlation(x, y, d) 过去d天x和y的时间序列相关性
covariance(x, y, d) 过去d天x和y的时间序列协方差
scale(x, a) 重新缩放x,使sum(abs(x)) = a(默认a = 1)
delta(x, d) 今天的x值减去d天前的x值
signedpower(x, a) sign(x) * |x|^a
decay_linear(x, d) 过去d天的加权移动平均,权重线性衰减
indneutralize(x, g) x相对于组g进行横截面中性化
ts_min(x, d) 过去d天的时间序列最小值
ts_max(x, d) 过去d天的时间序列最大值
ts_argmax(x, d) ts_max(x, d)发生在哪一天
ts_argmin(x, d) ts_min(x, d)发生在哪一天
ts_rank(x, d) 过去d天的时间序列排名
sum(x, d) 过去d天的时间序列总和
product(x, d) 过去d天的时间序列乘积
stddev(x, d) 过去d天的移动时间序列标准差
abs(x) 绝对值
log(x) 自然对数
sign(x) 符号函数(1表示正,-1表示负,0表示零)
min(x, d) ts_min(x, d)的别名
max(x, d) ts_max(x, d)的别名
  • delta(x, d) (差分)

    • 说明:计算今天的x值减去d天前的x值。它用于衡量数据在一段时间内的绝对变化量,捕捉短期动量或反转。
    • 优点:直接反映变化,简单直观,能够捕捉短期价格或指标的变动。
    • 缺点delta(close, 7)不能直接表示趋势,因其本质是“点对点绝对差值”,缺乏对价格序列连续性、变化速率及中间波动的刻画。对噪声敏感,容易产生虚假信号。
    • 示例delta(close, 1):计算今日收盘价与昨日收盘价的差值,即日收益额。
  • ? (IF条件)

    • 说明:通常与冒号:结合使用,构成条件判断语句,根据某个条件的结果来选择不同的计算路径或返回值。这使得因子能够根据市场状态或数据特征进行动态调整。
    • 优点:增强因子的灵活性和适应性,能够实现复杂的逻辑判断。
    • 缺点:与冒号类似,过度使用可能导致因子复杂且难以解释。
    • 示例((condition) ? value_if_true : value_if_false):如果条件为真,则取value_if_true,否则取value_if_false
  • power(x, a) (幂运算)

    • 说明:计算xa次方。幂运算常用于放大或缩小数据的差异,尤其是当a > 1时,可以放大极端值的影响,使因子对大幅波动更加敏感;当0 < a < 1时,则可以压缩数据,减小极端值的影响。
    • 优点:能够非线性地调整信号强度,突出或平滑特定范围的数据。
    • 缺点:可能过度放大噪声或极端值,导致因子不稳定。
    • 示例power(returns, 2):计算收益率的平方,用于衡量波动性。
  • signedpower(x, a) (带符号幂运算)

    • 说明:计算sign(x) * |x|^a。它在对x进行幂运算的同时,保留了x的原始符号。这在需要放大数值差异但又不能改变其方向(正负)的场景中非常有用。
    • 优点:在放大信号强度的同时保留了方向信息,适用于捕捉有方向性的极端事件。
    • 缺点:与power类似,可能过度放大有方向性的噪声。
    • 示例signedpower(close - open, 3):放大日内涨跌幅的强度,同时保留涨跌方向。
  • abs(x) (绝对值)

    • 说明:计算x的绝对值。绝对值常用于衡量指标的综合强度或波动幅度,而不考虑其方向。
    • 优点:消除方向性,专注于强度或波动幅度,简化信号。
    • 缺点:丢失方向信息,可能无法区分上涨波动和下跌波动。
    • 示例abs(returns):计算收益率的绝对值,用于衡量波动幅度。
  • log(x) (对数)

    • 说明:计算x的自然对数。对数变换常用于压缩数据范围,使得变化率更加平稳,尤其适用于处理偏态分布或具有指数增长趋势的数据。它能够减小极端值的影响,使数据更接近正态分布,便于后续的统计分析。
    • 优点:平滑数据,减小极端值影响,使数据更符合统计假设。
    • 缺点:只适用于正数,对接近0或负数的数据无法处理。
    • 示例log(volume):对成交量进行对数变换,平滑其极端波动。
  • sign(x) (符号函数)

    • 说明:返回x的符号:如果x > 0则返回1,如果x < 0则返回-1,如果x = 0则返回0。sign函数常用于判断指标的变化方向。
    • 优点:清晰地指示方向,简化复杂信号为方向性判断。
    • 缺点:丢失了信号的强度信息,只保留方向。
    • 示例sign(close - open):判断日内是上涨还是下跌。
  • rank(x) (横截面排名)

    • 说明:将x在当前股票池中进行相对比较,并返回其排名(通常是百分位排名)。rank算子能够消除绝对数值的影响,将不同量纲的指标统一到0到1(或0到100)的范围内,便于进行跨股票的比较和组合。
    • 优点:消除量纲差异,使不同指标具有可比性;对极端值不敏感,提高因子稳健性。
    • 缺点:丢失了原始数值的绝对大小信息,可能无法区分排名相近但绝对值差异大的股票。
    • 示例rank(volume):将股票的成交量在整个股票池中进行排名。
  • ts_rank(x, d) (时间序列排名)

    • 说明:将当前x值与过去d天内的x值进行比较,并返回其在时间序列中的排名。ts_rank用于识别当前波动在历史中的相对位置,捕捉短期内的异常表现。
    • 优点:评估当前值在历史上的相对强度,捕捉时间序列上的异常点。
    • 缺点:排名结果受历史数据分布影响,可能无法反映绝对强度。
    • 示例ts_rank(close, 20):计算当前收盘价在过去20天内的排名。
  • delay(x, d) (滞后)

    • 说明:返回d天前的x值。delay算子用于引入时间滞后效应,捕捉历史数据对当前或未来市场行为的影响,常用于构建趋势跟踪或反转策略。
    • 优点:引入时间维度,捕捉历史信息对当前的影响。
    • 缺点:过度滞后可能导致信息过时,降低因子有效性。
    • 示例delay(close, 1):获取昨日收盘价。
  • correlation(x, y, d) (相关系数)

    • 说明:计算xy在过去d天内的相关系数。correlation用于捕捉两个时间序列之间的线性关系强度和方向,常用于衡量量价关系、不同资产间的联动性等。
    • 优点:衡量两个变量之间的线性关系,捕捉协同或背离。
    • 缺点:只捕捉线性关系,对非线性关系无效;对异常值敏感。
    • 示例correlation(close, volume, 10):计算过去10天收盘价和成交量的相关性。
  • covariance(x, y, d) (协方差)

    • 说明:计算xy在过去d天内的协方差。covariance衡量两个序列的联动程度,比相关系数更关注绝对变化幅度。需要注意的是,协方差的数值大小不具备直接可比性,其“参考性”取决于是否在同一尺度下分析。
    • 优点:衡量两个变量的共同变动方向和幅度。
    • 缺点:数值大小受量纲影响,不具备直接可比性;只捕捉线性关系。
    • 示例covariance(returns, volume, 20):计算过去20天收益率和成交量的协方差。
  • scale(x, a) (缩放)

    • 说明:重新缩放x,使sum(abs(x))等于a(默认a = 1)。scale算子用于对因子值进行标准化处理,使其在特定范围内,从而消除量纲差异,便于不同因子之间的比较和组合。
    • 优点:标准化因子值,消除量纲影响,便于比较和组合。
    • 缺点:可能改变原始数据的分布特征,对极端值处理不当可能影响信号。
    • 示例scale(rank(open)):将开盘价的排名缩放到总和为1的范围内。
  • decay_linear(x, d) (线性衰减加权移动平均)

    • 说明:计算过去d天的加权移动平均,权重线性衰减(d, d-1, ..., 1),并重新缩放使总和为1。decay_linear算子用于赋予近期数据更高的权重,从而捕捉短期趋势或最新市场信息,同时平滑数据,减少噪声影响。
    • 优点:强调近期数据,捕捉短期趋势,同时具有平滑效果。
    • 缺点:权重衰减模式固定,可能不适用于所有市场情况。
    • 示例decay_linear(returns, 10):对过去10天的收益率进行线性衰减加权平均。
  • indneutralize(x, g) (行业中性化)

    • 说明:对x相对于组g(如子行业、行业、部门等)进行横截面中性化,即x在每个组g内横截面去均值。indneutralize算子用于消除行业因素对因子表现的影响,使得因子能够更纯粹地反映个股自身的特性,从而提高因子的普适性和稳健性。
    • 优点:消除行业偏见,使因子更纯粹地反映个股特征,提高普适性。
    • 缺点:可能去除部分行业轮动带来的有效信息。
    • 示例indneutralize(rank(close), IndClass):将收盘价的排名在每个行业内部进行中性化。
  • ts_min(x, d) (时间序列最小值)

    • 说明:返回过去d天内x的最小值。ts_min用于识别一段时间内的最低点,常用于构建支撑位、超卖信号或价格反转因子。
    • 优点:捕捉时间序列上的最低点,识别支撑位或超卖状态。
    • 缺点:对短期噪声敏感,可能无法反映长期趋势。
    • 示例ts_min(low, 5):过去5天内的最低价。
  • ts_max(x, d) (时间序列最大值)

    • 说明:返回过去d天内x的最大值。ts_max用于识别一段时间内的最高点,常用于构建阻力位、超买信号或价格反转因子。
    • 优点:捕捉时间序列上的最高点,识别阻力位或超买状态。
    • 缺点:对短期噪声敏感,可能无法反映长期趋势。
    • 示例ts_max(high, 5):过去5天内的最高价。
  • ts_argmax(x, d) (时间序列最大值出现的天数)

    • 说明:返回过去d天内x达到最大值是第几天(从当前日期算起)。ts_argmax用于识别短期内的价格或波动极值出现的时间点,捕捉信号的持续性或衰减。
    • 优点:识别极值点出现的时间,有助于判断信号的持续性或衰竭。
    • 缺点:只提供时间信息,不提供极值的大小。
    • 示例ts_argmax(volume, 20):过去20天内成交量最大值出现的天数。
  • ts_argmin(x, d) (时间序列最小值出现的天数)

    • 说明:返回过去d天内x达到最小值是第几天(从当前日期算起)。ts_argmin用于识别短期内的价格或波动极值出现的时间点,捕捉信号的持续性或衰减。
    • 优点:识别极值点出现的时间,有助于判断信号的持续性或衰竭。
    • 缺点:只提供时间信息,不提供极值的大小。
    • 示例ts_argmin(close, 20):过去20天内收盘价最小值出现的天数。
  • min(x, d)max(x, d)

    • 说明:这两个算子在Alpha101中通常与ts_min(x, d)ts_max(x, d)功能类似,表示在过去d天内的最小值和最大值。它们用于捕捉时间序列中的极值点。
    • 优点:捕捉时间序列上的极值点。
    • 缺点:与ts_min/ts_max类似,对噪声敏感。
    • 示例min(returns, 10):过去10天收益率的最小值。
  • sum(x, d) (时间序列求和)

    • 说明:计算过去d天内x的总和。sum算子用于累积效应,捕捉一段时间内的总量变化,常用于构建累积动量或超买超卖指标。
    • 优点:捕捉累积效应,平滑短期波动。
    • 缺点:对趋势变化反应滞后。
    • 示例sum(returns, 20):过去20天的累积收益率。
  • product(x, d) (时间序列乘积)

    • 说明:计算过去d天内x的乘积。product算子在金融领域相对较少直接使用,但在某些特定场景下,如计算复合增长率或处理对数收益率时可能用到。
    • 优点:计算复合增长率或多期累积效应。
    • 缺点:对负数或零值敏感,可能导致结果为零或无意义。
    • 示例product(1 + returns, 10):计算过去10天的复合收益率。
  • stddev(x, d) (时间序列标准差)

    • 说明:计算过去d天内x的移动时间序列标准差。stddev算子用于衡量数据在一段时间内的波动性或离散程度,是构建波动率因子或风险控制指标的关键。
    • 优点:衡量波动性,评估风险。
    • 缺点:对异常值敏感,可能无法反映真实波动。
    • 示例stddev(returns, 20):过去20天收益率的标准差。

3.3 复合算子的使用

Alpha101因子体系的强大之处,不仅在于其丰富的单一算子,更在于这些算子通过多层嵌套和巧妙组合,形成了能够捕捉复杂市场异象的复合算子。复合算子的设计原则在于将基础市场数据转化为具有预测能力的“市场洞察力”。

复合算子的设计原则与风险提示

  1. 维度互补原则
    避免同类型算子简单叠加(如delta + delta),应追求维度互补(如趋势、波动、量能)。例如,correlation(rank(volume), rank(vwap), 5) + rank(ts_max(high - low, 10))结合了量价相关性与波动极值,同时捕捉资金介入与市场情绪,实现了多维度信息的融合。

  2. 逻辑可解释性
    复合算子的每一步变换需对应明确的市场逻辑,避免“为复杂而复杂”。例如,rank(decay_linear(signedpower(delta(close, 1), 0.5), 5))虽然数学严谨,但其金融含义可能模糊,实际效果可能不如简单的rank(delta(close, 1))。在设计复合算子时,应始终追问“这个计算在模拟什么市场行为?”

  3. 过拟合风险防范
    多层嵌套算子(如5层以上)需通过滚动回测验证稳定性。建议进行样本外测试周期≥1年,分牛熊市场检验有效性,并与基准因子(如沪深300)的IC相关性进行比较(通常要求IC相关性<0.3)。

高频率的复合算子组合

Alpha101中存在一些高频率使用的复合算子组合,它们通过特定的逻辑关系,从不同角度刻画市场行为:

  1. correlation & rank (排名相关性)
  • 示例correlation(rank(volume), rank(vwap), 5)
  • 解释:这种组合首先对volume(成交量)和vwap(成交量加权平均价)进行横截面排名(rank),消除了原始数值的量纲影响,使得不同股票之间的成交量和VWAP具有可比性。然后,计算这两个排名序列在过去5天内的相关性(correlation)。
  • 金融意义与应用:这种复合算子旨在衡量短期内成交量和成交量加权平均价之间的协同性。通过排名,它更能反映其在股票池中的相对位置关系,而非绝对数值的波动。高正相关可能表示量价配合良好,趋势持续;低相关或负相关可能暗示量价背离,趋势可能面临反转或缺乏支撑。它是衡量量价配合程度的有效工具,常用于捕捉市场中的量价共振信号。
  1. delay - delay (趋势加速度)
  • 示例delay(close, 10) - delay(close, 20)
  • 解释:这种形式的复合算子通过比较前期(20天前)的收盘价与近期(10天前)的收盘价之间的差异。它实际上是在监测趋势的“加速度”变化,即趋势是加速、减速还是反转。
  • 金融意义与应用:如果结果为正,可能表示前期价格较低,近期价格较高,趋势正在加速上涨;如果为负,则可能表示趋势正在减速或反转下跌。它能够从微观层面刻画价格运动的加速度特征,是量化分析中捕捉趋势拐点和波动加速的重要工具。例如,当价格上涨但加速度放缓时,可能预示着上涨动能的衰竭。
  1. correlation & delta (自相关性)
  • 示例correlation(delta(close, 1), delta(close, 2), 10)
  • 解释:这种组合首先计算了价格的日度变化(delta(close, 1))和两日变化(delta(close, 2)),然后计算这两个变化序列在过去10天内的相关性。这实际上是在计算价格变化的自相关性,即当前价格变化与过去价格变化之间的关系。
  • 金融意义与应用:它有助于识别价格变化的持续性或反转模式。如果自相关性为正,可能表示价格变化具有惯性,趋势可能持续;如果为负,则可能表示价格变化具有反转倾向。这种复合算子常用于捕捉短期动量或反转信号,例如,如果今日涨幅与昨日涨幅呈负相关,可能预示着短期反转。
  1. delta(delta(close, 1), 1) (二阶差分)
  • 示例delta(delta(close, 1), 1)
  • 解释:这个复合算子是对收盘价进行两次一阶差分。第一次delta(close, 1)计算的是日收益额(价格变化),第二次delta(..., 1)则计算的是这个日收益额的变化。因此,它将“价格变化”转化为“变化速率的变化”。
  • 金融意义与应用:这是量化分析中捕捉趋势拐点和波动加速的重要工具。其核心价值在于从微观层面刻画价格运动的加速度特征。例如,当价格上涨但其上涨速度开始放缓时,二阶差分会给出信号。但需结合其他指标过滤噪声,避免单一因子的局限性,因为它对短期噪声非常敏感。
  1. rank & ts_max (极端值的相对定位)
  • 示例rank(ts_max(close - vwap, 3))
  • 解释:这种组合首先找到过去3天内收盘价与VWAP(成交量加权平均价)偏离的最大值(ts_max(close - vwap, 3)),然后将这个最大偏离值在当前股票池中进行横截面排名(rank)。
  • 金融意义与应用:它用于识别极端值在时间序列中的相对位置,并将其与其他股票进行比较。这个复合算子能够捕捉“日内价格发现效率”的量化刻画,识别出那些在短期内价格偏离VWAP最显著的股票。例如,如果某只股票的收盘价在过去几天内相对于VWAP出现了极大的正向偏离,并且这种偏离在整个市场中也处于高位,可能预示着强劲的买盘力量或短期超买。
  1. 趋势刻画 (日均变化)
  • 示例(delay(close, 10) - delay(close, 20)) / 10
  • 解释:这种形式的复合算子通过计算过去20天和过去10天收盘价的差值,再除以天数(10天),来表示这10天内的日均变化。它提供了一个平滑的趋势指标。
  • 金融意义与应用:它有助于识别中长期趋势的方向和强度。例如,如果结果为正,表示过去10天相对于再往前10天,价格呈上涨趋势;如果为负,则呈下跌趋势。这种平滑处理有助于过滤短期噪声,更清晰地揭示价格的潜在趋势。Alpha#46中可能使用了类似的方法来捕捉价格趋势。
  1. 历史支撑位移动
  • 示例ts_min(low, 5) - delay(ts_min(low, 5), 5)
  • 解释:这个复合算子通过比较过去5天最低价的5天前滞后值(delay(ts_min(low, 5), 5))与当前过去5天最低价(ts_min(low, 5))的差值。它旨在衡量历史支撑位的移动。
  • 金融意义与应用:如果结果为正,可能表示当前支撑位高于5天前的支撑位,暗示支撑位上移,市场可能走强;如果为负,则表示支撑位下移,市场可能走弱。它可能用于识别价格是否跌破了过去的支撑区域,从而产生卖出信号,或者识别支撑位是否正在抬升,产生买入信号。
  1. 波动率比值
  • 示例stddev(returns, 2) / stddev(returns, 5)
  • 解释:这个复合算子通过短期波动率(2天收益率标准差)与中期波动率(5天收益率标准差)的比值,来衡量市场短期波动性相对于中期的偏离程度。
  • 金融意义与应用:当比值大于1时,可能表示短期波动加剧,市场风险增加或趋势加速;反之则可能表示波动趋于平稳或趋势放缓。这有助于捕捉波动率的加速或减速,为风险管理和趋势判断提供信号。例如,比值突然放大可能预示着市场情绪的剧烈变化。
  1. rank^Ts_rank (排名非线性变换)
  • 示例rank(x)^ts_rank(y, d)
  • 解释:这种组合是对排名的非线性变换。它将一个指标的横截面排名(rank(x))作为底数,另一个指标的时间序列排名(ts_rank(y, d))作为指数。这使得排序结果更符合“排名越靠前,差异越显著”的逻辑。
  • 金融意义与应用:这种复杂的非线性变换可用于调整样本间的相对差异,放大或缩小特定排名区间的信号强度。例如,Alpha#90中可能使用了这种变换来突出那些在特定时间段内表现极其突出(或极差)的股票,从而增强因子的预测能力。它能够更精细地捕捉市场中的非线性关系。
  1. 加权价格
  • 示例vwap * 0.318108 + open * (1 - 0.318108)
  • 解释:这是一个加权平均的例子,通过赋予vwap(成交量加权平均价)和open(开盘价)不同的权重(0.318108和1-0.318108)来合成一个新的价格指标。
  • 金融意义与应用:这种加权方式通常是经过优化得到的,旨在更好地反映股票的真实价值或趋势。vwap代表了当日交易的平均成本,而open代表了当日的起始价格。通过加权,可以综合考虑交易成本和开盘情绪,形成一个更具代表性的价格中枢,用于后续的因子计算。
  1. 历史高(低)点的偏离程度
  • 示例vwap - ts_min(vwap, 11.5783)
  • 解释:这个复合算子计算当前vwap与过去一段时间内(11.5783天,通常会取整为12天或11天)vwap最小值的差值。
  • 金融意义与应用:它旨在衡量当前价格相对于历史低点的偏离程度,捕捉相对低点。如果当前vwap远高于历史最低vwap,可能表示价格已经从低点反弹;如果接近历史最低vwap,则可能表示价格处于支撑位附近。例如,Alpha#94中可能通过这种方式来识别价格的底部支撑或反弹信号。
  1. 收盘价在周期区间中的相对位置
  • 示例((close - ts_min(low, 12)) / (ts_max(high, 12) - ts_min(low, 12)))
  • 解释:这个复合算子计算收盘价在过去12天内最高价和最低价区间中的相对位置。ts_min(low, 12)是过去12天的最低价,ts_max(high, 12)是过去12天的最高价。整个表达式将收盘价归一化到[0, 1]的范围内。
  • 金融意义与应用:如果结果接近1,表示收盘价接近12天内的最高价,可能预示着强势;如果接近0,表示收盘价接近12天内的最低价,可能预示着弱势。这类似于相对强弱指标(RSI)的构建逻辑,用于识别超买超卖状态或趋势的强度。例如,Alpha#55中可能使用了这种方法来捕捉价格的相对强度。
  1. 多期累计收益
  • 示例sum(sum(returns, 2), 3)
  • 解释:这个复合算子首先计算过去2天的收益率之和(sum(returns, 2)),然后对这个2天收益率之和再进行3天的求和(sum(..., 3))。这实际上是计算了过去2+3-1=4天的累计收益,或者更准确地说,是3个2日累计收益的总和,即6日累计收益。
  • 金融意义与应用:这种多层求和的方式用于捕捉不同时间尺度上的累积效应。它能够平滑短期波动,更清晰地揭示中短期内的价格动量。例如,如果6日累计收益为正且持续放大,可能预示着股票具有较强的上涨动能。这种复合算子常用于构建动量因子。
  1. 近期流动性的相对变化
  • 示例sum(volume, 5)) / sum(volume, 20)
  • 解释:这个复合算子计算过去5天成交量总和与过去20天成交量总和的比值。它衡量的是近期(5天)流动性相对于中期(20天)流动性的变化。
  • 金融意义与应用:当比值大于1时,可能表示近期成交量放大,流动性增加,市场活跃度提升;当比值小于1时,可能表示近期成交量萎缩,流动性下降。这有助于捕捉市场情绪的变化和资金的进出情况。例如,Alpha#30中可能使用了这种短期与中期交易量比率来判断市场热度或趋势的可靠性。
  1. 当前价格与均价的偏离
  • 示例(sum(close, 7) / 7) - close
  • 解释:这个复合算子首先计算过去7天收盘价的平均值(sum(close, 7) / 7),然后用这个平均值减去当前的收盘价(close)。
  • 金融意义与应用:它衡量的是当前价格相对于7日均价的偏离程度。如果结果为正,表示当前价格低于均价,可能处于超卖状态或下跌趋势;如果为负,表示当前价格高于均价,可能处于超买状态或上涨趋势。这种偏离可以作为反转或趋势跟踪的信号。例如,Alpha#32中可能使用了这种均线偏离来捕捉价格的回归或延续。
  1. 历史均价
  • 示例(sum(delay(close, 5), 20) / 20)
  • 解释:这个复合算子首先计算过去20天内,每日收盘价的5天滞后值(delay(close, 5))的总和,然后除以20。这实际上是计算了一个滞后的20日移动平均价。
  • 金融意义与应用:它代表了一个历史均价,可以作为价格的支撑或阻力位。由于是滞后的均价,它更能反映过去一段时间的平均成本,对于判断趋势的延续性或反转点具有参考意义。例如,Alpha#45中可能使用了这种历史均价来构建趋势跟踪或价值回归策略。
  1. rank(rank(volume)) (排名的排名)
  • 示例rank(rank(volume))
  • 解释:这个复合算子对成交量进行了两次横截面排名。第一次rank(volume)将成交量在股票池中进行排名,得到一个0到1(或0到100)的排名值。第二次rank(...)则对这个排名值再次进行排名。
  • 金融意义与应用:本质上是对排名结果的重排序,输出值仍在[0, 1]范围。这种操作通常用于进一步平滑排名结果,或者在某些情况下,放大排名靠前(或靠后)的股票之间的差异。例如,如果第一次排名后,许多股票的排名值非常接近,那么第二次排名可以进一步区分它们。Alpha#83中可能使用了这种“排名的排名”来更精细地捕捉成交量的相对强度,或者作为一种非线性变换来调整信号的分布,使其更符合模型的需求。

对于量化实践者,构建复合算子的关键在于:

  • 问题导向:先明确要解决的市场问题(如“如何识别主力出货”),再选择适配的算子组合。
  • 维度拆解:将复杂问题分解为趋势、波动、量能等基础维度,用算子分别刻画。
  • 逻辑校验:每一步算子变换需回答“这个计算在模拟什么市场行为”,避免陷入数学游戏。

最终,优秀的复合算子不仅是技术的产物,更是对市场本质的深刻理解——正如Alpha101因子所展现的,量化投资的最高境界,是用严谨的数学语言讲述生动的市场故事。

四、总结

Alpha101 因子体系以严谨的数学逻辑与丰富的市场实践经验,为量化投资提供了系统化的因子构建框架。其核心价值不仅在于 101 个具体因子公式,更在于揭示了因子设计的底层逻辑与方法论。以下从三个关键维度解析其核心理念,并为多因子策略入门者提供实践建议:

(一)、Alpha101的核心启示

1. 算子组合的策略化应用

单个算子如同基础工具,唯有通过逻辑串联才能发挥最大效能。例如:

  • 单纯计算单日涨跌幅delta(close,1)仅能反映价格变动绝对值,若叠加ts_rank(delta(close,1),5)(计算单日涨跌幅在过去5日的历史排名),则可将绝对变动转化为“短期波动强度的相对评估”,显著提升信号可靠性。
  • 这种组合思维的本质,是通过多维度运算将原始数据提炼为具有市场洞察力的复合信号,类似“将单一指标升级为综合评分体系”。

2. 市场异象的量化捕捉

通过非线性算子变换(如排名、相关性、幂运算等),可将隐性市场规律转化为显性因子。典型如:

  • Alpha#101因子通过(close - open) / (high - low)计算日内动量与波动的比值,本质是量化“日内价格发现效率”——该值越高,表明收盘价相对于开盘价的涨幅在当日波动中占比越大,多方力量越占优。
  • 这类因子的设计逻辑,相当于用数学语言“翻译”市场中的量价异象,为策略提供可量化的信号基础。

3. 风险与收益的平衡逻辑

算子的选择本质是对信号敏感度与抗噪性的权衡:

  • 短期算子如delta(close,1)对波动敏感,但易受噪声干扰,而sum(delta(close,1),5)/5通过5日均值平滑可提升稳定性;
  • 组合使用时,类似构建“敏感信号+过滤机制”的双重防护,既能捕捉短期机会,又能降低随机波动的误判风险,实现“精准捕捉”与“抗干扰”的平衡。

(二)、实践建议

  1. 以Alpha101为起点而非终点

    • 可从经典因子(如量价相关性、波动率指标)入手理解设计逻辑,但需结合目标市场特性(如A股、美股)进行优化,例如加入行业轮动因子或流动性指标。
  2. 重视因子的经济解释

    • 避免仅关注回测绩效(如IC值、夏普比率),需深究因子背后的市场逻辑。例如:
      “收盘价与VWAP的偏离”因子,其有效性源于“买盘强劲时收盘价易高于日内均价”的交易逻辑,而非单纯的数学运算。
  3. 构建多因子组合而非单一因子

    • 结合动量(如短期收益率)、反转(如超涨超跌指标)、波动率(如历史波动幅度)等不同类型因子,通过相关性分析降低因子冗余度,提升策略稳健性。
  4. 探索新型数据与技术

    • 在传统价量数据基础上,可尝试引入另类数据(如企业财报文本、卫星图像数据),或运用机器学习算法(如随机森林、梯度提升树)优化因子权重,但需注意避免过度拟合。
  5. 纳入交易成本与流动性考量

    • 回测时需模拟真实交易环境,例如:
      • 高频因子需考虑滑点(买卖价差)与冲击成本;
      • 小盘股因子需设置流动性过滤条件(如日均成交量阈值)。
  6. 建立因子迭代机制

    • 市场环境变化会导致因子有效性衰减,建议定期(如季度)评估因子表现,通过因子IC值衰减测试、分市场状态检验等方法,及时优化或替换失效因子。

对于量化投资实践者而言,理解 Alpha101 因子体系的关键不在于死记硬背每一个公式,而在于建立 “数据→算子→逻辑→策略” 的推演能力。下一期我们将用代码复现 Alpha101 因子体系。

最后一次编辑于 2025年06月17日 3

普洱咖啡

厉害

2025-06-18 14:15:43      回复

推荐阅读