← 返回博客列表

【魔码量化工程实战进阶 #17】因子计算雏形:把感觉变成可回测的数字

2026年08月31日 18:05 · 魔码数服 · 魔码量化工程实战进阶

【魔码量化工程实战进阶 #17】因子计算雏形:把"感觉"变成可回测的数字

入门系列讲的都是"指标"(MA、动量、量比)。本篇把它们升级成量化正规军的语言——因子(factor):一个把原始数据映射成"可排序数字"的纯函数 f(data) → 数值。并引入检验因子有没有用的尺子 IC(信息系数)。这是模块三(指标信号)到模块四(回测风控)的桥。

本文你将得到什么

  1. 因子的严格定义:f(数据) → 数字,与指标的区别
  2. 因子的工程流水线:去极值(winsorize)→ 标准化(z-score)→ 横截面排名
  3. IC(信息系数)雏形:因子排名与下期收益排名的相关性,因子有没有用只看它
  4. 本机复核(合成面板 seed=42):20 日动量因子在随机游走下 rank-IC ≈ 0.000(纯噪声无预测力)

一、痛点:"感觉"不能回测

"我觉得低市盈率的好"——这是感觉。量化要把它变成:f = −pe(市盈率越低因子值越高),然后用历史数据验证"低 pe 下期是否真涨"。因子就是这座桥:把主观判断变成可计算、可检验、可排名的数字。


二、工程方案:因子流水线

2.1 因子即纯函数

def factor_momentum(panel):
    return panel / panel.shift(20) - 1      # 20日动量因子(面板)
def factor_reversal(panel):
    return -panel.diff(5)                    # 5日反转因子

2.2 去极值 + 标准化(防极端值)

def winsorize(x, lo=0.01, hi=0.99):
    return x.clip(*x.quantile([lo, hi]))      # 截尾,不用裸极值
def standardize(x):
    return (x - x.mean()) / x.std()           # 横截面 z-score

2.3 IC:因子有没有用的尺子

因子值本身不重要,它预测下期收益的能力才重要。用 rank-IC:

fwd_ret = panel.shift(-1) / panel - 1        # 下期收益
ic = []
for t in range(20, len(panel)-1):
    ic.append(np.corrcoef(factor_momentum(panel).iloc[t].rank().values,
                          fwd_ret.iloc[t].rank().values)[0, 1])
ic_mean = np.nanmean(ic)

|IC| 越大,因子预测力越强;IC=0 → 纯噪声。


三、本机复核(合成面板 seed=42)

20 日动量因子,在纯随机游走面板上算 rank-IC:

20日动量因子 rank-IC 均值 = 0.000  (示意样本,随机游走下≈0)

这正是关键教学点:动量因子在随机游走(无真实规律)下 IC≈0,毫无预测力。一个"看起来有道理"的因子,必须用 IC 证伪——如果历史上 IC≈0,它只是噪声,上实盘必亏。真实有效的因子(如低波、质量)IC 通常在 0.02~0.08 区间且样本外稳定


四、原理深挖:四个真实坑

  1. 前视偏差(最致命):因子若用了 t 当天数据(含当天收益)去预测 t 当天收益,IC 必然虚高。因子与信号必须全部基于 t−1 及之前的数据。
  2. 幸存者偏差:回测只用工信存在的股票,漏掉退市的,因子 IC 被高估。截面必须用"当时全部上市股票"。
  3. IC 要样本外:在训练期 IC 高不代表未来高。必须滚动样本外检验(如每月用过去 12 个月估 IC,预测下月)。
  4. 因子衰减:很多因子 IC 随时间衰减(被套利走)。要监控 IC 的时间序列稳定性,而非单次高低。

五、小结

因子 = 把"感觉"变成 f(data)→数字 的纯函数;去极值 + 标准化让它跨期可比;IC 是它有没有用的唯一尺子——随机游走下 IC≈0,提醒我们"有道理 ≠ 能赚钱"。到这里,模块三收口:指标(#13–#15)→ 横截面排名(#16)→ 因子(#17)。下一篇进入模块四,用回测框架把信号变成"可验证的收益"。

因子的工程化计算、去极值、IC 检验都建立在全市场对齐数据上;魔码因子体系(19 接口 / 77 因子)提供现成因子源,配合完整历史权限可直连你的回测。了解各档证书权益见文末。


免责声明:本文所有示例数据仅用于接口演示,不构成任何投资建议;市场有风险,投资需谨慎。

系列持续更新中。 想要亲手跑通上面的代码?前往 魔码证书申请页 免费领取你的专属证书,复制即用、按次计费、稳定可用。

想亲自试一下?免费获取证书
客服微信
客服微信二维码