第二十二章:信息与量化策略:因子投资、统计套利、机器学习预测
聊到量化策略,很多人第一反应就是“写代码、跑回测、躺着赚钱”。嗯,现实没那么美好。我做了这么多年量化,最大的体会是——信息才是驱动价格的核心燃料。没有信息,再漂亮的数学模型也只是空中楼阁。
这一章,我们聊聊三种主流的量化策略范式:因子投资、统计套利、机器学习预测。它们分别代表了“用逻辑解释信息”、“用统计挖掘信息”、“用算法逼近信息”三种思路。
一、因子投资:最朴素的“信息分类器”
因子投资,说白了就是找规律。你发现“市盈率低的股票长期跑赢市场”,这就是一个因子。你发现“上个月涨得多的股票下个月容易跌”,这也是一个因子。
我个人习惯把因子分成三类:
- 基本面因子:PE、PB、ROE、营收增速等。这些信息来自财报,更新慢但逻辑硬。
- 技术面因子:动量、反转、波动率、成交量等。这些信息来自交易数据,更新快但噪音多。
- 另类因子:新闻情绪、卫星图像、供应链数据等。这些信息来自非传统渠道,挖掘空间大。
核心逻辑:因子投资假设市场存在系统性定价偏差。通过暴露于某些因子,你可以获得超额收益。
举个例子,我曾在项目中测试过一个简单的“低波动率因子”。代码长这样:
import pandas as pd
import numpy as np
# 假设df包含股票日收益率数据
def low_vol_factor(df, lookback=60):
# 计算过去60日波动率
vol = df.pct_change().rolling(lookback).std()
# 选波动率最低的20%股票
low_vol_stocks = vol.rank(axis=1, pct=True) <= 0.2
return low_vol_stocks
# 回测框架(简化版)
def backtest_factor(df, factor_signal):
# 假设每月调仓
monthly_returns = df.resample('M').last().pct_change()
portfolio_returns = (factor_signal.shift(1) * monthly_returns).mean(axis=1)
return portfolio_returns.cumsum()
你想想看,这个策略的逻辑是什么?低波动股票往往被机构投资者忽视,散户又喜欢追高波动。这种“信息不对称”就创造了机会。
避坑指南:我曾经在回测中过度优化因子参数,结果实盘一塌糊涂。记住,因子投资最怕“数据挖掘偏差”——你看到的规律可能只是随机噪声。
二、统计套利:从“相关性”中找机会
统计套利和因子投资不同。因子投资是“找特征”,统计套利是“找关系”。
最经典的例子就是配对交易。两只同行业的股票,比如可口可乐和百事可乐,它们的价格走势长期看是高度相关的。如果某天价差突然拉大,你就可以做多便宜的、做空贵的,等价差回归时平仓获利。
为什么会这样?因为信息是流动的。当一条行业新闻出来,两只股票的反应速度可能不同。这种“信息传导延迟”就产生了套利空间。
我给大家看一个简单的协整检验代码:
import statsmodels.api as sm
def cointegration_test(price_a, price_b):
# 对两个价格序列做OLS回归
model = sm.OLS(price_a, sm.add_constant(price_b))
results = model.fit()
residuals = results.resid
# 对残差做ADF检验
adf_stat, p_value, _, _, critical_values, _ = sm.tsa.stattools.adfuller(residuals)
return p_value < 0.05 # p值小于0.05说明存在协整关系
# 使用示例
# if cointegration_test(ko_price, pep_price):
# print("存在套利机会")
嗯,这里要注意:统计套利不是无风险的。我记得有一次,我做的配对交易突然崩了——因为两家公司出了并购消息,基本面发生了根本变化。价差再也回不来了。
警告:统计套利依赖“均值回归”假设。如果结构性变化发生(比如行业政策突变、公司重组),这个假设就失效了。止损纪律比模型本身更重要。
三、机器学习预测:用算法“逼近”信息
到了机器学习这里,思路又不一样了。我们不再手动定义因子或关系,而是让算法自己去“学习”信息中的模式。
我个人觉得,机器学习在量化中的最大价值不是“预测涨跌”,而是“特征提取”。比如用LSTM处理时间序列,用Transformer处理新闻文本,用图神经网络处理产业链关系。
一个简单的随机森林示例:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# 假设X是特征矩阵(包含各种因子),y是未来5日涨跌标签
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
model = RandomForestClassifier(n_estimators=100, max_depth=5)
model.fit(X_train, y_train)
# 特征重要性
importance = pd.DataFrame({
'feature': feature_names,
'importance': model.feature_importances_
}).sort_values('importance', ascending=False)
print(importance.head(10))
你可能会问:机器学习比传统因子投资强在哪?答案是非线性关系。传统因子假设线性关系(比如PE越低越好),但现实中很多信息是交互作用的——比如“低PE+高动量”的组合效果可能远好于单独使用。
关键点:机器学习不是万能药。它容易过拟合,尤其在高维数据中。我见过太多人把1000个特征扔进神经网络,结果回测曲线漂亮得像假的一样——嗯,它确实是假的。
四、三种策略的对比与融合
说了这么多,我们来做个总结。三种策略各有优劣:
| 策略类型 | 信息利用方式 | 优势 | 劣势 |
|---|---|---|---|
| 因子投资 | 逻辑驱动 | 可解释性强,稳健 | 容易拥挤,收益递减 |
| 统计套利 | 统计关系 | 市场中性,容量大 | 依赖均值回归假设 |
| 机器学习 | 数据驱动 | 捕捉非线性,适应性强 | 过拟合风险高,黑箱 |
我个人习惯的做法是融合使用。比如用因子投资筛选股票池,用统计套利做配对交易,用机器学习优化进出场时机。这样既能利用各自的优势,又能分散风险。
下面这张图展示了三种策略在信息处理流程中的位置:
从这张图可以看得很清楚:信息从源头出发,经过不同的处理框架,最终汇聚成交易决策。没有哪条路是绝对正确的,关键看你的数据、算力和风险偏好。
我的建议:刚开始做量化,先从因子投资入手。逻辑清晰,容易debug。等积累了一定经验,再尝试统计套利和机器学习。别一上来就搞深度学习——我见过太多人把简单问题复杂化了。
最后说一句:无论用哪种策略,信息质量永远比模型复杂度重要。你用一个简单的线性模型处理干净的数据,效果可能好过一个复杂的神经网络处理脏数据。这是我在无数次踩坑后得出的结论。