量化课堂 · 依瓦团队 · 18 次阅读

因子计算实战:用 pandas 计算动量与估值因子

因子计算实战|用 pandas 计算动量与估值因子

这节课学什么

本节把原始行情和财务数据转换为可检验的因子矩阵。你将计算20日动量MOM20和盈利收益率EP,完成时间对齐、去极值、标准化和分组检查。先修要求是会使用 pandas 的排序、分组和合并。

两个因子的定义

动量使用复权收盘价,估值使用当时已披露的盈利与截面市值:

MOM20(i,t) = P_adj(i,t) / P_adj(i,t-20) - 1
EP(i,t) = NetProfit_TTM(i,t) / MarketValue(i,t) = 1 / PE_TTM(i,t)

EP比直接使用PE更适合线性排序,但亏损公司会产生负值,不能简单当作异常删除。财务字段必须按公告日生效,不能按报告期结束日连接。

price = price.sort_values(["symbol", "trade_date"])
price["mom20"] = price.groupby("symbol")["adj_close"].pct_change(20)
factor = price.merge(finance_asof, on=["symbol", "trade_date"], how="left")
factor["ep"] = factor["net_profit_ttm"] / factor["market_value"]

横截面处理

每个交易日分别处理,不能把所有日期混在一起标准化。先用分位数或MAD去极值,再计算z-score。保留原始值、处理后值和异常标记,方便追溯。随后按五分位分组,检查每组数量、均值和未来收益。

实操任务

选择连续两年的月末交易日生成因子矩阵,输出 symbol、trade_date、mom20、ep、mom20_z、ep_z。分别计算两个因子的月度IC和五分组收益,再查看二者相关性。若合成因子,先用等权 score=(mom20_z+ep_z)/2 建立基线,不要一开始就优化权重。

本节学习方法

建议先完整阅读概念和公式,再按照实操步骤独立完成一次。不要直接复制最终结果:先记录数据范围、字段口径和预期现象,运行后对照检查。若结果不同,应从复权方式、交易日对齐、缺失值、可交易状态和费用假设逐项排查。每次练习保存代码版本、参数、运行日期和结果截图,形成可以复现的研究记录。

课后检查

本课程用于量化研究方法学习,不构成个股推荐、收益承诺或投资建议。示例参数用于演示计算过程,不代表适合任何真实账户。

IWA依瓦AI量化 —— 金融垂直人工智能平台,覆盖数据、大模型、智能Agent、交易终端全栈能力。

免费注册 更多资讯