← 返回博客列表

【Python量化实战全攻略 #16】选股策略回测验证手册:向量化跑一遍(附代码)

2026年10月19日 09:41 · 智兔数服 · Python量化实战全攻略

摘要:【Python量化实战全攻略 #16】选股策略回测验证手册:向量化跑一遍(附代码) 手册定位:模块二第 8 篇(收官)。前面 7 篇把因子、合成、中性都讲完,本篇用 向量化回测 验证「按总分选股到底赚不赚钱」——算分

手册定位:模块二第 8 篇(收官)。前面 7 篇把因子、合成、中性都讲完,本篇用向量化回测验证「按总分选股到底赚不赚钱」——算分组收益、多空收益、IC。
数据来源复用 #14 合成分 + #02 历史K线(未来收益)。

1. 你将得到什么

  • 用 pandas 把「因子分 + 未来 N 日收益」拼成面板、向量化算分组收益的代码;
  • 多头组 vs 空头组的多空收益;
  • 因子的 IC(信息系数) 计算;
  • 回测的 4 个坑(未来函数、前视偏差、幸存者偏差、交易成本)。

2. 取数约定(复用)

用途 来源 见
因子分 多因子合成分 #14
未来收益 日线 close 算 N 日收益 #02

3. 数据来源(复用,不重复罗列)

本篇是验证层,因子分见 #14,价格见 #02,不新增接口。

4. 核心模板函数(自包含可跑)

import pandas as pd
import numpy as np

_MOCK = True


def backtest_groups(scores, fwd_ret, n_groups=5):
    df = pd.DataFrame({"分": scores, "未来收益": fwd_ret}).dropna()
    df["组"] = pd.qcut(df["分"].rank(method="first"), n_groups, labels=False)
    grp = df.groupby("组")["未来收益"].mean()
    long_short = grp.iloc[-1] - grp.iloc[0]
    return grp, long_short


def ic(scores, fwd_ret):
    df = pd.DataFrame({"分": scores, "未来收益": fwd_ret}).dropna()
    return df["分"].corr(df["未来收益"])


def run_check():
    rng = np.random.default_rng(0)
    n = 500
    true = rng.normal(0, 1, n)
    scores = true + rng.normal(0, 0.5, n)
    fwd = true * 0.02 + rng.normal(0, 0.05, n)
    grp, ls = backtest_groups(pd.Series(scores), pd.Series(fwd))
    val_ic = ic(pd.Series(scores), pd.Series(fwd))
    assert ls > 0 and val_ic > 0
    print("校验通过 | 多空收益=%.4f IC=%.3f" % (ls, val_ic))
    return grp, ls, val_ic


if __name__ == "__main__":
    run_check()

5. 跑通示例

grp, ls, val_ic = run_check()
print("各组平均未来收益:\n", grp.round(4))
print("多空收益:", round(ls, 4), " IC:", round(val_ic, 3))

6. 坑与注意事项

  1. 未来函数:因子必须用「当时可见」的数据,不能用未来财报/价格。
  2. 前视偏差:排序用 T 日因子、T+1 日才交易,未来收益用 T 日后 N 日。
  3. 幸存者偏差:回测只用当前在市股票会高估收益,要用当时全部上市股票池。
  4. 交易成本:没扣佣金的回测收益要打折,高换手策略摩擦能吃掉大半 alpha。

7. 小结与下一篇预告

模块二(选股因子)闭环:从因子→合成→中性→回测验证。下一篇进入模块三(择时策略):均线交叉择时。

下一篇预告:《【Python量化实战全攻略 #17】均线交叉择时手册:单、多均线金叉死叉(附代码)》

8. 免责声明

本文为回测方法示例,演示数据为模拟,不构成投资建议。


关于数据来源:本文回测所需的因子分与价格数据来自智兔数服(www.zhituapi.com)官方文档接口(详见本系列 #02/#14),覆盖 200+ 已验证路径,注册可领免费 token 做研究测试。
更多实战手册见技术博客:zhituapi.com/blog.html。
本系列《Python量化实战全攻略》共 32 篇,下一篇进入择时策略模块。

想亲自试一下?免费获取证书