★ 代表实现
多因子选股(Smart Beta)官方示例
python
用价值、质量、动量、低波等因子打分构建加权组合,含因子正交化与回测绩效。
实现代码 python
# =====================================================================
# 量化策略流派 · 官方教学示例(多因子选股 / Multi-factor)
# 策略:价值 + 质量 + 动量 三因子横截面 Z-Score 等权合成,做多高分、做空低分
# 说明:本代码为社区教学示例,由站点整理发布,仅供学习交流。
# 示例代码由站点提供,站点不对代码的安全性、合规性与收益
# 表现作任何明示或默示担保;据此交易风险自负。
# 依赖:numpy(pip install numpy)
# 运行:python multi_factor.py
# =====================================================================
import numpy as np
def gen_stocks(n=300, seed=3):
"""模拟横截面:真实因子暴露 + 观测噪声 + 未来收益。"""
rng = np.random.default_rng(seed)
value = rng.normal(0, 1, n) # 价值(低估值程度)
quality = rng.normal(0, 1, n) # 质量
mom = rng.normal(0, 1, n) # 动量
fwd = 0.3 * value + 0.3 * quality + 0.4 * mom + rng.normal(0, 0.5, n)
obs_value = value + rng.normal(0, 0.4, n) # 观测含噪
obs_quality = quality + rng.normal(0, 0.4, n)
obs_mom = mom + rng.normal(0, 0.4, n)
return dict(value=obs_value, quality=obs_quality, mom=obs_mom, fwd=fwd)
def backtest(d, top=0.1):
def z(x):
return (x - x.mean()) / (x.std() + 1e-9)
score = (z(d["value"]) + z(d["quality"]) + z(d["mom"])) / 3.0
order = np.argsort(score)
k = int(len(score) * top)
longs = order[-k:]
shorts = order[:k]
spread = d["fwd"][longs].mean() - d["fwd"][shorts].mean()
ic = np.corrcoef(score, d["fwd"])[0, 1]
return dict(spread=spread, ic=ic,
top_mean=d["fwd"][longs].mean(),
bot_mean=d["fwd"][shorts].mean())
if __name__ == "__main__":
d = gen_stocks()
m = backtest(d)
print("多因子选股(价值+质量+动量 合成)横截面检验")
print(f" 股票数 : {len(d['fwd'])}")
print(f" 多空收益差 : {m['spread']:.3f}")
print(f" 因子 IC : {m['ic']:.3f}")
print(f" 头部组合均值 : {m['top_mean']:.3f}")
print(f" 尾部组合均值 : {m['bot_mean']:.3f}")
示例代码由用户自行提供,网站不对其安全性与适用性负责。
💬 实现点评
🔵 登录 / 注册