第 03 篇
多因子策略入门
用几个可量化的「标准」(因子)给股票打分选股:先主观挑因子、逐个试效果,留好删差,再用排名法把不同量纲的因子统一起来。入门篇(postId=1399,作者导数君)用 ROA、净利润率、净利润环比、市值、ROE 的组合试错演示,回测最高做到 42 倍。素材见 raw/collections/jq-quant-classroom/03-03-多因子策略入门md.md。
这是什么
本篇讲基本面多因子选股的入门做法。先定义「因子=选股择时的标准」,再演示一套最朴素的方法:挑几个财务因子,逐个往策略里加,看回测效果,好的留下、差的删掉。文中用聚宽的财务数据做了几轮实验(ROA、净利润/营业总收入、净利润环比增长率、市值、ROE 的组合),并交代了三个绕不开的工程问题:财务数据缺失、因子量纲不统一、代码函数化。
核心要点
因子是什么
- 因子通俗说就是选股择时的标准。例:认为「营收增长率高的公司是好公司」,就把营收增长率大于 30% 的股票选出来——这个条件就是因子。
- 因子分两类:选股因子(股票好不好:基本面、财务向)与择时因子(好股票什么时候买,与技术指标关系紧密)。本篇只讲财务向的选股因子。
试错法选因子(几个回测实验)
- 方法:先物色喜欢的因子,一个个加进去看效果,效果好留、效果差删,反复迭代。
- 实验 A:ROA + 净利润/营业总收入(%) 两因子,各取前 20 名买入 → 11 年收益 3.98 倍,比大盘略好。
- 实验 B:把「净利润/营业总收入」换成「净利润环比增长率(%)」→ 11 年收益 7.54 倍,好一点。
- 实验 C:三个因子全加(ROA + 净利润/营业总收入 + 净利润环比)→ 5.34 倍,反而不如两个因子。结论:保留 ROA + 净利润环比增长率两个。
- 实验 D:再加市值因子 → 28 倍。
- 反复试错后:小市值 + 高 ROE 的股票收益高 → 回测显示最高可达 42 倍。
- 文章定位:试错法是最基础的选因子方式,但「其实还挺有用」。
三个工程问题
- 财务数据缺失要清洗:有些财务数据取不到,对排序影响大。简单办法是用均值填充(pandas 有现成函数,编者另写了自用函数)。更精细的思路:某只股票本期某项数据空缺、但上期有,可按下式推算——空缺值 = 本期该字段平均值 × 上期该字段数值 ÷ 上期该字段平均值。
- 因子量纲不统一:市值能到几十亿,收益率只有十几甚至为负,直接加权没法算。办法是用排名统一——把每个因子值变成名次。Python 自带 sort;编者自己用冒泡排序练手,高手可用堆排序/归并排序加快回测。
- 函数化:把「集中取数据 → 清洗数据 → 排名」汇总成子函数,主函数就很好写了。
小结与预告
- 入门版是「主观分析 + 排名」。
- 主流定量方法——回归分析、对各因子打分——留到进阶量化课堂。
机制 / 论证
- 因子不是越多越好:三个因子(5.34 倍)反而输给两个因子(7.54 倍)——多因子之间有冗余、噪音与相互干扰;「逐个加、看效果」正是为了在组合里筛掉拖后腿的因子。
- 换对因子能改变量级:把「净利润/营业总收入」换成「净利润环比增长率」收益从 3.98 倍升到 7.54 倍;补上「市值」直接到 28 倍——选因子本身比数量重要。
- 排名为什么能统一量纲:市值(几十亿)和收益率(十几甚至负)没法直接赋权相加;把每个因子转成名次后,所有因子都在同一把尺子上,才能比较与组合。这是「打分法」的雏形。
- 数据缺失的处理逻辑:均值填充最简单但粗糙;「按上期比例推算」假设该股票相对同类的强弱会延续,比填全场均值更贴个体。
- 诚实提示:这套方法回测数字惊人(42 倍),但文章也明确这只是入门框架——真正严谨的是打分与回归,且回测语境(股票池、区间、是否含偏差)正文未交代。
可操作
- 因子与组合(保留正文实验值,11 年回测):
- 双因子:ROA + 净利润环比增长率(%),各取前 20 名 → 7.54 倍。
- 加市值因子 → 28 倍;小市值 + 高 ROE → 最高 42 倍。
- 参数:取因子值前 20 名买入(选股数可调)。
- 数据与流程:财务字段取数在聚宽走 get_fundamentals(见 聚宽行情与财务数据获取 API;财务字段口径见 利润表(读懂一段时间赚了多少钱));缺失值用均值填充或「本期均值 × 上期值 / 上期均值」推算;各因子转成名次后综合。
- 代码结构:子函数 = 取数据 + 清洗(填充缺失)+ 排名(冒泡/堆/归并可换);主函数只调子函数、做买入卖出。
- 教训:回测好≠策略真有效;组合因子时留好删差,警惕三因子不如两因子的「加料反而变差」。
术语
- 因子:选股/择时的可量化标准(如营收增长率>30%)。
- 选股因子 vs 择时因子:公司好不好 vs 什么时候买。
- ROA:总资产收益率。ROE:净资产收益率。
- 净利润/营业总收入(%):销售净利率类指标;净利润环比增长率(%):本期净利相对上期的增速。
- 均值填充:用字段平均值补缺失数据。
- 冒泡/堆/归并排序:把因子值变名次的排序算法。
- 排名法:把不同量纲因子统一成名次再组合(入门法);打分/回归为进阶法。
不确定 / 待验证
- 正文未写股票池范围、回测区间与复权口径;各实验倍数(3.98/7.54/5.34/28/42 倍)只能按正文陈述记录,是否含幸存者偏差/前视偏差无从核实 [需要验证]。
- 「42 倍」的小市值+ROE 结论是 2016 年前后语境,A 股风格切换后未必复现。
- 完整代码(取数、清洗、排序、下单)在附图与规范源码,raw 正文未含 [需要验证]。
- 文章 2018-12 有过「修正卖出」(v3.0),正文没写改了什么。
相关
- 雪球云蒙银行股搬砖 — 同批第四篇:把多因子做成银行股综合打分 + 调仓
- 因子选股(排名 / 打分 / 阈值筛选) — 因子选股:排名/打分的统一思路
- 聚宽行情与财务数据获取 API — get_fundamentals 取财务/市值字段
- 利润表(读懂一段时间赚了多少钱) — 财务字段口径(可持续利润 vs 一次性)
- 聚宽量化课堂(低频量化策略 43 篇) — 量化课堂 43 篇总览
更新 2026-09-06