trading/doc_04_alpha_factor.md

648 lines
28 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Alpha 因子研究详解
## `quant_alpha_factor_demo.py` 学习文档
> **目标读者**:量化入门者,已完成前三篇学习
> **配套文件**`quant_alpha_factor_demo.py`
> **前置知识**:建议先阅读前三篇文档
> **系列位置**:第 4 篇 — Alpha 因子研究篇
---
## 目录
1. [什么是 Alpha 因子?](#1-什么是-alpha-因子)
2. [因子动物园:主要因子流派](#2-因子动物园factor-zoo)
3. [合成股票池:为什么需要多只股票?](#3-合成股票池)
4. [五个经典因子详解](#4-五个经典因子详解)
5. [因子预处理:三步标准化流程](#5-因子预处理三步标准化)
6. [IC 分析:量化因子预测能力](#6-ic-分析information-coefficient)
7. [分层回测:直观验证因子有效性](#7-分层回测quantile-analysis)
8. [因子合成1+1 > 2](#8-因子合成factor-combination)
9. [多空组合:因子的实际落地](#9-多空组合long-short-portfolio)
10. [因子衰减:信号会过时](#10-因子衰减factor-decay)
11. [结果解读与局限性](#11-结果解读与局限性)
12. [术语速查表](#12-术语速查表)
---
## 1. 什么是 Alpha 因子?
### 1.1 从一个比喻说起
想象你是一个选股顾问,每天从 3000 只 A 股中挑出最有潜力的 50 只。你会怎么做?
初学者可能说:"涨得多的买,跌得多的卖。"
有经验的人可能说:"找低估值、高成长、低波动的股票。"
**Alpha 因子 (Alpha Factor)** 就是这些选股思路的**数学化表达**——用一个公式,对每只股票算出一个"分数",分数越高,预期未来收益越高。
### 1.2 Alpha 的准确含义
在金融学中,收益被分解为两部分:
```
股票总收益 = Beta 收益 + Alpha 收益
股票总收益 = (跟随大盘的那部分) + (超出大盘的那部分)
```
| 术语 | 中文 | 含义 |
|------|------|------|
| **Beta (β)** | 市场贝塔 / 系统性风险 | 随市场涨跌的收益——"大盘涨了 10%,我的股票也涨了 8%" |
| **Alpha (α)** | 超额收益 / 选股能力 | 超越市场的额外收益——"大盘涨了 5%,但我的策略赚了 20%" |
**Alpha 因子**的目标就是找到那些能预测"未来超额收益"的信号。
### 1.3 因子 vs. 策略
很多初学者会混淆"因子"和"策略"的概念:
| | 因子 (Factor) | 策略 (Strategy) |
|--|--------------|----------------|
| 本质 | 一个截面排名信号(谁更好?) | 一套完整的买卖规则 |
| 例子 | MOM = 12月动量 | "当 MOM > 0 时买入,< 0 时卖出" |
| 分析方法 | IC分层回测 | 净值曲线夏普比率 |
| 应用范围 | **多只股票的横截面** | 单只或多只股票的时间序列 |
因子是选股的"原材料"策略是用因子构建的"成品"。
---
## 2. 因子动物园Factor Zoo
学术界发现的因子多达 300+ 被戏称为"因子动物园 (Factor Zoo)"。按经济学逻辑主要分为以下几大类
### 2.1 行为金融类因子(最常用)
| 因子 | 中文 | 核心逻辑 | 代表论文 |
|------|------|----------|----------|
| **Momentum** | 动量因子 | 赢家继续赢输家继续输追涨惯性| Jegadeesh & Titman (1993) |
| **Reversal** | 反转因子 | 短期过度涨跌会均值回归 | Jegadeesh (1990) |
| **Post-Earnings Drift** | 盈利漂移 | 超预期财报后股价持续漂移 | Ball & Brown (1968) |
### 2.2 风险溢价类因子(有理论支撑)
| 因子 | 中文 | 核心逻辑 |
|------|------|----------|
| **Low Volatility** | 低波动因子 | 低波动股票的风险调整后收益更高违反 CAPM|
| **Low Beta** | 低贝塔因子 | 低市场敏感性股票长期跑赢BAB 效应|
| **Illiquidity** | 非流动性因子 | 流动性差的股票有额外的流动性溢价 |
### 2.3 基本面类因子(需要财报数据)
| 因子 | 中文 | 核心逻辑 |
|------|------|----------|
| **Value (B/P, E/P)** | 价值因子 | 低估值股票长期跑赢价值投资量化版|
| **Profitability (ROE)** | 盈利能力 | 高盈利质量公司持续超额收益 |
| **Growth** | 成长因子 | 营收/利润高速增长的公司 |
> 本 Demo 聚焦于**纯价格/成交量因子**(无需财报),这也是因子研究的起点。
---
## 3. 合成股票池
### 3.1 为什么需要多只股票?
前三篇 Demo 分析的都是**单只股票随时间**的变化时间序列)。
Alpha 因子研究是一种完全不同的分析维度
```
时间序列分析: 分析同一只股票在不同时间的行为
苹果公司 → 2020, 2021, 2022, ...
截面分析: 在同一个时间点,比较不同股票之间的差异
2023-01-01 → 苹果, 谷歌, 微软, 亚马逊, ...
```
因子的"截面预测能力"是指**在某一天因子值高的股票是否在未来一段时间表现更好**
这需要"同一天多只股票"的数据——**横截面数据 (Cross-Sectional Data)**。
### 3.2 隐藏因子生成模型
为了让演示中的因子真实有效 Demo 使用了一个**隐藏因子生成模型 (Hidden Factor Generative Model)**向合成数据中注入"真实的 Alpha"
```
每只股票每天的收益 = 市场风险 + 质量 Alpha + 动量 Alpha + 噪音
= β × r_市场 + λ_q × Q_i,t + λ_m × M_i,t + ε_i,t
```
| 成分 | 符号 | 变化速度 | 含义 |
|------|------|----------|------|
| 市场风险 | β × r_市场 | 每日变化 | 所有股票共同承担的市场涨跌 |
| 质量 Alpha | λ_q × Q_i,t | 季度持续 | 该股票的"潜在质量分"缓慢变化 |
| 动量 Alpha | λ_m × M_i,t | 月度持续 | 该股票的"当前动量状态"适度变化 |
| 特质噪音 | ε_i,t | 每日随机 | 无法预测的随机波动 |
**关键点**Q M **不可直接观察的隐藏变量**。
Alpha 因子的价值就在于**用可观察的价格数据动量波动率等来间接估计这些隐藏的质量/动量分数**。
---
## 4. 五个经典因子详解
### 4.1 动量因子MOM— 追涨惯性
**来源**Jegadeesh & Titman (1993)
**直觉**股票市场存在"趋势延续"效应——过去 6-12 个月的赢家未来 3-12 个月通常继续赢
$$\text{MOM}_{i,t} = \frac{P_{i,t-21}}{P_{i,t-252}} - 1$$
| 参数 | 说明 |
|------|------|
| $P_{i,t-21}$ | 股票 i t-21 1 个月前的价格 |
| $P_{i,t-252}$ | 股票 i t-252 12 个月前的价格 |
| 计算窗口 | 12 个月前 1 个月前跳过最近 1 个月|
**为什么要跳过最近 1 个月?**
最近 1 个月的收益往往会**短期反转 (Short-Term Reversal)**这是由于做市商 (Market Maker) 的库存调整和买卖价差摩擦导致的微观结构效应如果不跳过最近 1 个月反转效应会污染动量信号
```python
# 代码实现
MOM_LONG = 252 # 12 个月
MOM_SHORT = 21 # 跳过 1 个月
factor_mom = prices_df.shift(MOM_SHORT) / prices_df.shift(MOM_LONG) - 1.0
# ↑ P[t-21] ↑ P[t-252]
```
**本 Demo 实验结果**
- IC 均值 = **+0.065** 有效
- ICIR = **+0.452**(接近 0.5 的优良水平
- 这是因为隐藏质量/动量因子高的股票自然同时有高 12M 动量 AND 高未来收益
### 4.2 短期反转因子REV— 均值回归
**来源**Jegadeesh (1990)
**直觉**上个月涨太多的股票下个月往往小幅回调跌太多的往往反弹
$$\text{REV}_{i,t} = -\left(\frac{P_{i,t}}{P_{i,t-21}} - 1\right)$$
取负号是为了保持"因子值越高 预期收益越高"的正方向约定
- 上个月大跌负收益)→ REV 为正 预期反弹 因子值高
**本 Demo 实验结果**
- IC 均值 = **-0.050**(负!意料之中)
- 为什么是负的因为我们的数据中注入了"动量 Alpha"——动量强的股票上个月涨下个月还要涨REV 反而是负向预测这是一个很好的教学点**同一个市场中因子之间可能互相矛盾**。
### 4.3 低波动因子LVOL— 低波动异象
**来源**Baker, Bradley & Wurgler (2011)
**直觉**根据传统金融理论高风险应获高回报但实证研究发现低波动股票的**原始收益**也更高"低波动异象 (Low-Volatility Anomaly)"。
$$\text{LVOL}_{i,t} = -\sigma_{i,t-60:t}$$
其中 $\sigma$ 是过去 60 交易日的日收益率标准差年化波动率的代理指标)。
取负号波动率越低 LVOL 越高 预期收益越高
**可能的解释**
- 机构投资者受"跑赢基准"的业绩压力被迫偏爱高贝塔/高波动股票导致这些股票被高估
- 散户偏好"彩票式"高波动股票类似买彩票也导致高波动股票被高估
- 低波动股票更少被卖空保护其免遭过度高估后的暴跌
### 4.4 低贝塔因子BAB— 赌对低贝塔
**来源**Frazzini & Pedersen (2014) "Betting Against Beta"
**直觉**CAPM 预测 β = 1.5 的股票比 β = 0.5 的股票多 50% 的期望收益但实际上两者差距远小于理论值甚至低贝塔股票反而更赚钱
$$\text{BAB}_{i,t} = -\hat{\beta}_{i,t}^{(60D)}$$
$$\hat{\beta}_{i,t} = \frac{\text{Cov}(r_i, r_{\text{mkt}})_{60D}}{\text{Var}(r_{\text{mkt}})_{60D}}$$
**代码实现**完全向量化不用 Python 循环
```python
# 利用 pandas rolling 方法批量计算所有股票的滚动贝塔
rolling_var_mkt = market_series.rolling(60).var() # 市场方差
rolling_cov = log_ret_df.apply(
lambda col: col.rolling(60).cov(market_series) # 各股协方差
)
rolling_beta_df = rolling_cov.div(rolling_var_mkt, axis=0) # β = Cov/Var
factor_bab = -rolling_beta_df # 取负值
```
### 4.5 Amihud 非流动性因子ILLIQ— 流动性溢价
**来源**Amihud (2002) "Illiquidity and Stock Returns"
$$\text{ILLIQ}_{i,t} = \frac{1}{D} \sum_{d=t-D}^{t} \frac{|r_{i,d}|}{V_{i,d}}$$
| 符号 | 含义 |
|------|------|
| $|r_{i,d}|$ | d 日的绝对日收益率 |
| $V_{i,d}$ | d 日的成交量 |
| D = 20 | 过去 20 个交易日 |
**含义**"每元成交量能引起多大的价格波动"
- ILLIQ 流动性差小单也能推动价格)→ 投资者要求更高回报 **流动性溢价 (Liquidity Premium)**
---
## 5. 因子预处理:三步标准化
原始因子值""得没法直接用必须经过以下三步清洗
### Step 1截面去极值Winsorization
**问题**某天某股票的动量值是 +500%因为遭遇了重组事件这个极端值会完全主导本日截面的相关系数计算
**解决**在每个截面将超出 $[\mu - 3\sigma, \mu + 3\sigma]$ 的值截断到边界
```
原始: [5%, 12%, 8%, 500%, -2%, 9%]
去极值: [5%, 12%, 8%, 46%, -2%, 9%] ← 500% 被截断到 3σ 边界
```
```python
# 向量化实现(无 Python 循环)
mu = factor_df.mean(axis=1) # 每日截面均值
sig = factor_df.std(axis=1) # 每日截面标准差
lower = (mu - 3 * sig).values[:, np.newaxis] # 广播到矩阵形状
upper = (mu + 3 * sig).values[:, np.newaxis]
clipped = np.clip(factor_df.values, lower, upper)
```
### Step 2截面 Z-score 标准化
**问题**动量因子单位是%典型值 ±30%ILLIQ 单位是极小的小数1e-10 量级无法比较和相加
**解决**在每个截面对因子进行 Z-score 标准化使均值=0标准差=1。
$$z_{i,t} = \frac{x_{i,t} - \bar{x}_t}{\sigma_t}$$
标准化后
- 不同因子量纲统一可以直接相加因子合成时需要
- Z-score > 0 → 该股票因子值高于同期平均
- Z-score < 0 该股票因子值低于同期平均
### Step 3市值中性化Market Cap Neutralization
**问题** A 股市场小市值股票往往同时具有高动量高波动低流动性如果不剔除市值效应动量因子可能只是在选小市值股票并非真正的动量信号
**解决** log(市值) OLS 回归**残差**替换原因子值
$$\text{factor\_neutral}_i = \text{factor}_i - (\hat{\alpha} + \hat{\beta} \cdot \log(\text{mktcap}_i))$$
```python
# 每个截面: y = alpha + beta * x + residual
y_c = factor_values # (50,) 各股因子值
x_c = log_mktcap_values # (50,) 各股对数市值
xm, ym = x_c.mean(), y_c.mean()
slope = np.dot(x_c - xm, y_c - ym) / np.dot(x_c - xm, x_c - xm)
residuals = y_c - (ym + slope * (x_c - xm)) # 市值中性化后的因子值
```
**形象比喻**
这就像做标准化考试时"学生身高"这个干扰变量从"篮球成绩"中剔除——矮的学生篮球技术再好也会因为身高被低估剔除后才能真正比较技术水平
---
## 6. IC 分析Information Coefficient
### 6.1 IC 的定义
$$\text{IC}_t = \text{SpearmanCorr}\left(\text{factor}_{t,\cdot},\ \text{return}_{t+H,\cdot}\right)$$
在日期 t计算截面 **Spearman 秩相关系数**
- 左侧50 只股票在 t 日的因子值处理后
- 右侧 50 只股票在未来 H=21 日的收益率
**为什么用 Spearman 秩相关而不用 Pearson 线性相关?**
| | Pearson | Spearman |
|--|---------|----------|
| 计算 | $(X - \bar{X}) \cdot (Y - \bar{Y})$ 的相关 | $\text{rank}(X)$ $\text{rank}(Y)$ 的相关 |
| 假设 | 线性关系 | 只需单调关系 |
| 对极端值 | 敏感 | 鲁棒 |
| 量化研究常用 | | 更常用 |
### 6.2 ICIRIC 的信噪比
$$\text{ICIR} = \frac{\text{IC 均值}}{\text{IC 标准差}}$$
ICIR 就是"IC 序列的夏普比率"——衡量因子预测能力的**稳定性**
| ICIR | 含义 |
|------|------|
| < 0.3 | 不稳定可能只是偶然 |
| 0.3 ~ 0.5 | 有一定稳定性 |
| > 0.5 | 稳定的 Alpha 信号 |
### 6.3 IC 评价标准
| 指标 | 强因子 | 有效因子 | 弱因子 |
|------|--------|----------|--------|
| \|IC 均值\| | > 0.10 | 0.05~0.10 | < 0.05 |
| ICIR | > 0.5 | 0.3~0.5 | < 0.3 |
| IC > 0 比率 | > 60% | 55%~60% | < 55% |
### 6.4 本 Demo 的 IC 结果解读
| 因子 | IC 均值 | ICIR | 解读 |
|------|---------|------|------|
| MOM | +0.065 | +0.452 | 动量有效因为高质量/高动量股票有持续的正 Alpha |
| REV | -0.050 | -0.273 | 反转因子在此模型中"反着来"——短期涨的股票继续涨动量效应更强|
| LVOL | -0.010 | -0.028 | 近乎无效——数据中没有注入"低波动溢价" Alpha |
| BAB | -0.010 | -0.027 | 近乎无效——原因同上 |
| ILLIQ | +0.009 | +0.058 | 极弱——有轻微的流动性溢价信号 |
> **学习要点**IC 近零不代表因子"写错了",而是反映了**数据生成机制**。本 Demo 的合成数据中Alpha 主要来自质量和动量因子,所以 MOM 有效而 LVOL/BAB 无效。真实市场中,多个因子通常都有正 IC但有时某种因子会在特定市场环境regime下失效。
---
## 7. 分层回测Quantile Analysis
### 7.1 方法步骤
分层回测是最直观的因子验证方式
```
① 在每个调仓日 T按因子值对 50 只股票从小到大排序
② 等分成 5 组Q1=最低 20%Q5=最高 20%
③ 各组各构建等权组合,持有 21 天
④ 记录各组收益,持续到回测结束
```
**期望的理想结果**
```
累积收益: Q5 > Q4 > Q3 > Q2 > Q1 (单调递增)
```
如果因子有效Q5因子分最高应该持续跑赢 Q1因子分最低)。
### 7.2 本 Demo 的 MOM 因子分层结果
| 分组 | 年化收益 | 含义 |
|------|----------|------|
| Q1最低动量| -8.9% | 过去一年最弱势的股票未来继续弱 |
| Q2 | -12.7% | 偏弱 |
| Q3 | -5.0% | 中性 |
| Q4 | +9.7% | 偏强 |
| Q5最高动量| +27.9% | 过去一年最强势的股票未来继续强 |
| **L-SQ5-Q1**| **+40.1%** | 多空价差几乎与市场涨跌无关 |
虽然 Q2 < Q1 有轻微异常不完全单调但整体趋势清晰**高动量 高未来收益**。
### 7.3 分层回测的实现细节
```python
for i in range(len(rebal_dates) - 1):
t0, t1 = rebal_dates[i], rebal_dates[i + 1] # 建仓日 / 平仓日
# 按因子值分组
labels = pd.qcut(
factor_today.rank(method='first'), # 先取秩(避免重复值问题)
n_quantiles, # 分成 5 组
labels=["Q1", "Q2", "Q3", "Q4", "Q5"]
)
# 计算等权持有收益
hold_ret = price_df.loc[t1] / price_df.loc[t0] - 1.0
for q in ["Q1", "Q2", "Q3", "Q4", "Q5"]:
stocks_in_q = labels[labels == q].index
bucket_returns[q].append(hold_ret[stocks_in_q].mean())
```
**为什么先 `rank()` 再 `qcut()`**
`qcut` 按数值边界分割如果因子值有重复e.g., 好几只股票 LVOL 恰好相同分组会不均匀 `rank(method='first')` 将重复值也区分开先出现的秩更低 `qcut` 就能保证每组大小相同
---
## 8. 因子合成Factor Combination
### 8.1 为什么要合成?
单个因子的 IC 通常只有 0.05~0.10预测能力有限多因子合成的优势
1. **互补**不同因子捕捉不同维度的 Alpha合成后覆盖更多信息源
2. **降噪**单个因子可能在某些时期失效多因子合成后整体更稳定
3. **提升 ICIR**若各因子 IC 不完全相关合成后 ICIR > 单个因子的 ICIR
用统计语言表达:设因子 A 和 B 各自 IC 均值 = $\mu$IC 相关系数 = $\rho$,则:
$$\text{ICIR}_{composite} = \frac{2\mu}{2\sigma\sqrt{(1+\rho)/2}} = \frac{\text{ICIR}}{\sqrt{(1+\rho)/2}}$$
当 $\rho < 1$ 合成 ICIR > 单个 ICIR。这就是**多元化的价值**。
### 8.2 两种合成方法
**方法1等权合成 (Equal-Weight Composite)**
$$\text{Composite}_{EQ,i,t} = \frac{1}{N}\sum_{k=1}^{N} z_{k,i,t}$$
- 优点:简单、稳健,不依赖历史 IC 估计,不容易过拟合
- 缺点:对强因子和弱因子一视同仁
**方法2IC 加权合成 (IC-Weighted Composite)**
$$w_k = \frac{\max(\overline{IC}_k, 0)}{\sum_j \max(\overline{IC}_j, 0)}, \quad \text{Composite}_{ICW,i,t} = \sum_{k=1}^{N} w_k \cdot z_{k,i,t}$$
- 优点:给更强的因子更高权重,理论上 ICIR 更高
- 缺点:历史 IC 可能不稳定(特别是样本期短时),有过拟合风险
**本 Demo 结果**
| 方法 | IC 均值 | ICIR |
|------|---------|------|
| 等权合成 | +0.036 | +0.237 |
| IC 加权 | +0.045 | +0.304 |
IC 加权略好,因为它把更多权重给了最强的 MOM 因子(权重 88.4%)。
---
## 9. 多空组合Long-Short Portfolio
### 9.1 构建逻辑
多空策略是因子策略的"利润提取机制"
```
每个调仓日(每月):
① 计算每只股票的合成因子分
② 买入 Top 20%(因子分最高的 10 只)= 多头组合
③ 做空 Bottom 20%(因子分最低的 10 只)= 空头组合
④ 21 天后平仓,重复
```
### 9.2 市场中性Market Neutral
多空组合最大的优点是**市场中性 (Market Neutral)**
```
多空收益 = 多头组合收益 - 空头组合收益
= (Alpha_long + Beta_long × r_市场) - (Alpha_short + Beta_short × r_市场)
≈ Alpha_long - Alpha_short (若 Beta_long ≈ Beta_short市场影响相消
```
这意味着:**无论市场大涨大跌,多空组合只赚 Alpha不受市场影响**。
### 9.3 本 Demo 结果解读
| 组合 | 年化收益 | 夏普比率 | 最大回撤 |
|------|----------|----------|----------|
| 多头 (Long) | +30.9% | 1.36 | -13.9% |
| 空头 (Short) | -2.3% | -0.11 | -43.4% |
| **多空 (L-S)** | **+33.9%** | **5.19** | **-0.4%** |
多空 Sharpe 达到 5.19 并最大回撤仅 -0.4%——这是**演示数据** 注入了较强 Alpha 信号的结果,真实市场中通常 Sharpe 1-3 就算非常优秀的多空策略。
### 9.4 A 股限制与现实考量
> ⚠️ **A 股重要提示**
> A 股融券做空受到严格限制,**普通投资者无法执行多空策略**。
> 多空策略主要适用于:港股、美股市场,或通过股指期货进行市场对冲。
> 在 A 股,因子策略通常只执行"多头"部分(买入高分股票),不做空低分股票。
---
## 10. 因子衰减Factor Decay
### 10.1 什么是因子衰减?
因子衰减曲线回答一个关键的实践问题:
**"这个因子的信号,在多少天后就失效了?"**
我们对不同的持有期 H1D, 5D, 10D, 21D, 42D, 63D分别计算 IC
$$\text{IC}(H)_t = \text{SpearmanCorr}\left(\text{factor}_{t,\cdot},\ \text{return}_{t+H,\cdot}\right)$$
如果 IC(H) 随 H 增大而快速降向 0说明因子是"短期信号",需要高频换仓。
如果 IC(H) 衰减缓慢,说明因子是"长期信号",低频换仓也有效。
### 10.2 本 Demo 的衰减结果
| 持有期 | MOM (IC) | REV (IC) |
|--------|----------|----------|
| 1D | +0.067 | -0.043 |
| 5D | +0.066 | -0.045 |
| 10D | +0.065 | -0.046 |
| 21D | +0.065 | -0.050 |
| 42D | +0.061 | -0.027 |
| 63D | +0.054 | -0.033 |
**MOM慢衰减**IC 从 1D 到 21D 几乎不变(+0.067 → +0.06542D 以后才明显下降。
→ 说明动量信号在 1-3 个月内保持有效,**月频换仓足够**,不需要高频交易
**REV快变化**:在 42D 处强度减弱(-0.02762D 处轻微回升。
→ 反转信号在短期更强,长期减弱,适合**周频换仓**
### 10.3 实践意义
```
快速衰减因子:
优点: 信号新鲜,短期预测准确
缺点: 必须高频换仓 → 高换手率 (Turnover) → 高交易成本
适合: 高频量化交易机构,有直连交易所的低手续费通道
慢速衰减因子:
优点: 不需要频繁换仓,交易成本低
缺点: 信号滞后,无法捕捉短期机会
适合: 中低频量化(月频/季频)、散户量化尝试
```
---
## 11. 结果解读与局限性
### 11.1 为什么 LVOL 和 BAB 无效?
在本 Demo 中LVOL 和 BAB 的 IC ≈ 0原因在于数据生成机制
我们只注入了**质量**和**动量** Alpha没有注入"低波动溢价"或"低贝塔溢价"。因此,低波动率并不预示更高未来收益。
在**真实市场**中低波动因子在许多市场美股、港股、A 股)都有实证支撑。本 Demo 的结果不能说明低波动因子无效——只能说明它在**这个特定的合成数据**中无效。
### 11.2 合成数据的局限性
| 局限 | 真实市场中不存在 | 本 Demo 简化了 |
|------|-----------------|---------------|
| 市场冲击 | 大单买卖会推高/压低价格 | 假设无限流动性 |
| 交易成本 | 买卖价差、印花税、佣金 | 未扣除交易成本 |
| 因子拥挤 | 大家都用同一个因子时,超额收益消失 | 未模拟 |
| 财报数据 | 基本面因子需要财报,有发布延迟 | 未涉及 |
| 风险暴露限制 | 真实组合需控制行业、风格暴露 | 无约束 |
### 11.3 量化因子研究的注意事项
1. **样本外验证Out-of-Sample Test**IC 是在同一数据集上计算的,存在过拟合风险。实践中需要用样本外数据验证。
2. **因子衰减与换仓成本的权衡**IC 高不等于策略盈利,必须考虑换手成本是否侵蚀了因子收益。
3. **市场环境Regime的影响**动量因子在趋势市中有效在剧烈波动的市场如2020年3月可能大幅失效。
4. **因子拥挤Factor Crowding**:当太多资金追同一个因子时,因子溢价会被套利消除。
---
## 12. 术语速查表
| 中文 | English | 简要说明 |
|------|---------|----------|
| Alpha 因子 | Alpha Factor | 能预测股票未来超额收益的数学信号 |
| 超额收益 | Alpha | 超越市场基准的额外收益 |
| 市场贝塔 | Market Beta (β) | 股票收益对市场收益的敏感度 |
| 截面数据 | Cross-Sectional Data | 同一时间点多只股票的数据 |
| 时间序列 | Time Series | 同一只股票随时间变化的数据 |
| 因子动物园 | Factor Zoo | 学术界发现的 300+ 个因子的统称 |
| 动量因子 | Momentum Factor | 基于过去 12-1 月累积收益的趋势延续信号 |
| 动量效应 | Momentum Effect | 赢家继续赢、输家继续输的市场现象 |
| 短期反转 | Short-Term Reversal | 短期内价格过度波动后的均值回归 |
| 低波动异象 | Low Volatility Anomaly | 低波动股票收益反而更高,违反 CAPM |
| 非流动性 | Illiquidity | 每单位成交量引起的价格波动幅度 |
| 流动性溢价 | Liquidity Premium | 流动性差的资产额外要求的收益补偿 |
| 低贝塔 | Low Beta (BAB) | 贝塔系数低的股票,与市场敏感性低 |
| 赌对低贝塔 | Betting Against Beta | Frazzini & Pedersen 提出的低贝塔超额收益策略 |
| Amihud 指标 | Amihud Illiquidity | \|r\|/成交量的均值,衡量流动性的经典指标 |
| 去极值 | Winsorization | 将极端异常值截断到合理范围 |
| 截面标准化 | Cross-Sectional Normalization | 在每个日期截面做 Z-score 标准化 |
| Z-score | Z-score | (x - 均值) / 标准差,使均值=0标准差=1 |
| 市值中性化 | Market Cap Neutralization | 回归剔除市值因子对因子值的影响 |
| 信息系数 | IC (Information Coefficient) | 因子值与未来收益的 Spearman 秩相关系数 |
| IC 均值 | IC Mean | IC 时间序列的均值,衡量因子平均预测能力 |
| IC 标准差 | IC Std | IC 时间序列的波动率,衡量因子稳定性 |
| ICIR | ICIR (IC Information Ratio) | IC均值/IC标准差类似因子的夏普比率 |
| Spearman 秩相关 | Spearman Rank Correlation | 基于排名(秩)而非原始值的相关系数 |
| Pearson 相关 | Pearson Correlation | 基于线性关系的相关系数 |
| 持有期 | Holding Period (H) | 建仓到平仓的时间跨度 |
| 分层回测 | Quantile Analysis / Bucket Test | 按因子值分组,对比各组未来收益 |
| 五分位 | Quintile (Q1-Q5) | 将股票等分为 5 组 |
| 等权组合 | Equal-Weight Portfolio | 每只股票持仓权重相同 |
| 调仓日 | Rebalance Date | 重新计算因子并调整持仓的日期 |
| 换手率 | Turnover | 每期组合发生变化的比例,越高交易成本越大 |
| 因子合成 | Factor Combination | 将多个因子加权合成为一个综合因子 |
| 等权合成 | Equal-Weight Composite | 所有因子等权相加的合成方法 |
| IC 加权合成 | IC-Weighted Composite | 按各因子历史 IC 均值加权合成 |
| 多因子模型 | Multi-Factor Model | 使用多个因子解释股票收益差异的模型 |
| 多空组合 | Long-Short Portfolio | 做多高分股票、做空低分股票的中性化策略 |
| 多头 | Long | 买入持有,期望价格上涨 |
| 空头 | Short / Short Selling | 借入并卖出,期望价格下跌后回购获利 |
| 多空价差 | Long-Short Spread | 多头组合收益 - 空头组合收益 |
| 市场中性 | Market Neutral | 多空两侧的市场敝口相互对冲,净市场风险 ≈ 0 |
| 因子衰减 | Factor Decay | 因子预测能力随持有期延长而减弱的现象 |
| 市场环境 | Market Regime | 具有共同特征的特定市场状态(如牛市/熊市/震荡市)|
| 因子拥挤 | Factor Crowding | 过多资金追逐同一因子导致溢价消失的现象 |
| 样本外验证 | Out-of-Sample Test | 在训练数据之外的独立数据集上验证模型效果 |
| 过拟合 | Overfitting | 模型过度适应训练数据,导致样本外表现差 |
| 隐藏因子 | Hidden Factor / Latent Factor | 不可直接观察、只能间接估计的潜在驱动因子 |
| 截面 | Cross-Section | 在同一时间点对多个实体的观察 |
| OLS 回归 | OLS (Ordinary Least Squares) | 普通最小二乘法,用于因子中性化 |
| 残差 | Residual | OLS 回归中因变量实际值与拟合值的差值 |
---
*上一篇:[事件驱动回测](doc_03_event_driven_backtest.md)*
---
## 附录:系列文档导航
| 篇 | 文件 | 文档 | 核心内容 |
|----|------|------|----------|
| 第 1 篇 | `quant_data_pipeline_demo.py` | `doc_01_data_pipeline.md` | 复权、收益率、缺失值、异常值、涨跌停 |
| 第 2 篇 | `quant_strategy_backtest_demo.py` | `doc_02_strategy_backtest.md` | 技术指标、策略逻辑、向量化回测、绩效指标 |
| 第 3 篇 | `quant_event_driven_backtest_demo.py` | `doc_03_event_driven_backtest.md` | 事件驱动架构、6大组件、成本模型、与向量化对比 |
| **第 4 篇** | `quant_alpha_factor_demo.py` | `doc_04_alpha_factor.md` | 因子构建、IC/ICIR、分层回测、因子合成、多空组合 |