阅读提示

这篇是因子库全景导览,带你走一遍 betalens-factor/ 下现有的因子家族——WorldQuant ALPHA101、中信高频行为因子、流动性需求/预期分歧、通达信指标。看完这篇,你会理解每个因子家族的适用场景,以及如何在 Dashboard 里把它们跑起来。

导言

betalens-factor/ 是 Betalens 的因子仓库,每个子目录对应一个因子家族。目前包含四大类:

目录 家族名称 因子数量 典型应用
alpha101/ WorldQuant ALPHA101 101 经典量化选股
citic_hf_behavior/ILLIQ_v2 中信高频行为 1 市场微观结构
LiqDemand/DISP 流动性需求/预期分歧 2 机构行为
tdx/ 通达信指标 RSI系列、XICHOU等 技术分析择时

因子目录下,每个因子有 一对文件factor_<NAME>.py(计算逻辑)和 factor_<NAME>.yaml(配置参数)。Dashboard 会自动扫描这些 YAML 并在界面上展示。

一、WorldQuant ALPHA101

目录betalens-factor/alpha101/

这是 Betalens 里规模最大的因子家族,包含 WorldQuant 在 2014 年发布的 101 个经典 Alpha 因子(ALPHA1 ~ ALPHA101)。每个因子都是基于日行情数据(开盘价、最高价、收盘价、最低价、成交量)的数学表达式,设计初衷是作为量化因子研究的基准。

典型因子

ALPHA1(均值回归 + 成交量加权):

$$\text{ALPHA1} = \text{rank}(\text{TSARS}((\text{open} \times 0.85 + \text{close} \times 0.15), 12)) - \text{rank}(\text{TSARS}(\text{delta}(\text{volume}, 3), 6))$$

ALPHA2(开盘跳空 + 成交量加权):

$$\text{ALPHA2} = -\text{corr}(\text{rank}(\text{open}), \text{rank}(\text{volume}), 10)$$

ALPHA6(收盘价相对位置):

$$\text{ALPHA6} = -\text{corr}(\text{rank}(\text{open}), \text{rank}(\text{high}), 10) + \text{rank}(\text{open} - \text{thsreg_linear_val}((\text{open} - \text{close}) / (\text{high} - \text{low} + 1e-12), 16))$$

在 Dashboard 里跑 ALPHA101

  1. 打开 Dashboard:http://127.0.0.1:5173
  2. 进入”截面因子”页面
  3. 在因子列表里找到 alpha101/ALPHA1(或任意编号)
  4. 修改运行参数(start_dateend_daten_quantiles
  5. 点击”运行”,等待回测完成
  6. 查看报告:净值曲线、IC 分析、分组收益

ALPHA101 的局限性

  • 全是日行情因子:不使用基本面数据,所以对财报披露类事件没有暴露。
  • 参数固定:原始 ALPHA101 没有参数搜索,每个因子都是”一个固定公式”。Betalens 的 mining 模块可以在 ALPHA101 基础上做参数化扩展。
  • 计算密集:101 个因子全部跑一遍需要不少时间,alpha101/mining/ 目录下有预配置的参数扫描入口。

二、中信高频行为因子(ILLIQ_v2)

目录betalens-factor/citic_hf_behavior/ILLIQ_v2/

ILLIQ(Illiquidity)是由 Amihud 提出、Pastor & Stambaugh 改进的流动性度量指标——非流动性比率,衡量”单位交易额对价格的冲击”。中信建投在 2020 年前后推出了高频版本 ILLIQ_v2,通过分钟级数据精确度量日频非流动性。

公式核心思想:

$$ILLIQ = \frac{1}{D} \sum_{d=1}^{D} \frac{|r_d|}{VOL_d}$$

其中 $|r_d|$ 是日收益率绝对值,$VOL_d$ 是日成交量(金额),$D$ 是月度交易日数。

ILLIQ 的金融含义

  • ILLIQ 越高:小额交易就能引起大价格波动 → 流动性差 → 机构卖出困难。
  • ILLIQ 低:需要大额交易才能移动价格 → 流动性好 → 机构买卖容易。
  • 择股逻辑:低 ILLIQ(高流动性)股票更适合大资金进出,预期未来有正超额收益。

使用方式

在因子 YAML 中配置:

1
2
3
4
5
6
7
8
9
10
11
meta:
class: citic_hf_behavior
name: ILLIQ_v2
factor_spec:
inputs:
ret_abs: 收益率(%)
volume: 成交额(元)
compute_kwargs:
window_days: 20 # 计算窗口
direction: negative # ILLIQ 越低越好 → negative
table_name: daily_market

三、流动性需求与预期分歧(DISP)

目录betalens-factor/LiqDemand/DISP/

DISP(Dividend Yield + Institutional Demand + Spread)是一个复合因子,整合了三个维度:

  1. 股息率(D):高股息 → 价值型、机构偏好。
  2. 机构需求代理(I):用换手率、成交量异常度量机构参与度。
  3. 买卖价差(SP):高频价差代理流动性成本。

DISP = $\alpha \cdot D + \beta \cdot I - \gamma \cdot SP$

三个子维度可以独立调参,在 factor_DISP.yamlcompute_kwargs 中修改权重。

四、通达信指标(tdx)

目录betalens-factor/tdx/

通达信是国内使用最广泛的股票行情软件之一,其指标体系在散户群体中有大量追随者。Betalens 的 tdx 目录把一些经典通达信指标实现为因子,并支持在 Dashboard 里直接参数化运行。

RSI 系列(RSI_FAST / RSI_SLOW)

相对强弱指数(RSI)是最经典的技术指标之一:

$$RSI = 100 - \frac{100}{1 + RS}, \quad RS = \frac{\text{avg gain}}{\text{avg loss}}$$

1
2
3
4
factor_spec:
compute_kwargs:
window: 14 # RSI 窗口(RSI_FAST 用 6,RSI_SLOW 用 24)
direction: positive # RSI 高 → 超买,但有时高 RSI 也意味着趋势强

XICHOU(侯神吸筹能量)

XICHOU 是一个趋势跟踪类指标,只在最低价创 N 日新低时累积能量:

1
2
3
4
5
6
7
8
factor_spec:
compute_kwargs:
sma_n: 3 # SMA 平滑窗口
ema_n: 3 # EMA 平滑窗口
llv_n: 15 # N 日新低判断窗口
direction: positive # 吸筹能量越高 → 越看多
use_industry: true # 做行业中性化
industry_scheme: 申万一级行业

XICHOU 择时版(XICHOU_timing)

tdx/XICHOU 目录下还有一个 factor_XICHOU_timing.py/yaml,是单标的择时策略而非截面因子:

1
2
3
4
5
6
7
8
meta:
strategy_type: timing # ← 这行标记为择时策略
factor_spec:
compute_kwargs:
stock_code: 300750.SZ # 宁德时代
trigger_threshold: 0.1
max_weight: 1.0 # 最高满仓
duration_quantile: 0.8 # 历史触发持续天数达到 80% 分位才开仓

择时策略不走截面分组,而是直接生成目标仓位(0~1 的比例),与 BacktestBaseactual_weight 机制配合使用。

在 Dashboard 里探索因子库

无论哪个家族的因子,Dashboard 的使用流程都是一样的:

1
因子发现 → 选择因子 → 修改参数(compute_kwargs / run) → 运行 → 查看报告

因子 YAML 是唯一权威配置——Dashboard 页面参数最终会写入 outputs/runs/<run_id>/run_config.yaml,然后用这份文件构造 FactorPipeline 并运行。理解了这个流程,你就可以:

  • 不改代码,只改 YAML:在 Dashboard 里调参,不需要碰 Python。
  • 改代码,再改 YAML:在因子脚本里实现新逻辑,更新 compute_kwargs 的默认值。
  • 新增因子:在 betalens-factor/<class>/<NAME>/ 下创建 factor_<NAME>.py 和 YAML,Dashboard 自动发现。

开发者侧:因子目录结构规范

每个因子家族的目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
betalens-factor/
<factor_class>/ # 如 alpha101, tdx, citic_hf_behavior
class_<factor_class>.yaml # 家族级配置
factor_template_<factor_class>.py # 家族模板(可选)
mining/ # 参数挖掘配置
run.py
parameter_space.yaml
<FACTOR_NAME>/ # 每个具体因子
factor_<FACTOR_NAME>.py # 计算逻辑
factor_<FACTOR_NAME>.yaml # 配置参数
outputs/
legacy/
runs/

关键约束:import 因子脚本时不跑回测、不写文件。回测只在 FactorPipeline.run() 时执行。这保证了因子脚本可以在不产生副作用的情况下被 Dashboard 动态导入。

延伸阅读