首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Python多因子选股入门:从因子构建到回测的完整指南
📅 2026/10/15 13:25:58
✍️ 爱科研究院
👁 阅读 3,247
1. 从零开始理解多因子选股为什么基本面量化值得花时间很多人第一次听到“多因子选股”这个词脑子里浮现的是一堆数学公式和密密麻麻的财务表格觉得这是机构里拿着高薪的量化研究员才玩得转的东西。但实际情况是只要你懂一点Python基础能看懂资产负债表和利润表的大致结构就已经具备了搭建一套基础多因子选股系统的前提条件。我自己最开始接触这个方向的时候也是从“什么是因子”“为什么要做基本面量化”这些最基础的问题一步步摸索过来的踩过不少坑也走过一些弯路今天就把这些前期知识储备的东西系统性地梳理一遍。所谓多因子选股本质上就是用多个维度的指标来给股票打分排序然后选出综合得分最高的那一批。这里的“因子”就是指标比如市盈率、净资产收益率、营收增速、资产负债率等等。单看一个指标选股很容易翻车比如你只看低市盈率可能会选出一堆夕阳行业的股票只看高ROE又可能买在景气度顶点。多因子的逻辑就是“不把鸡蛋放在一个篮子里”从估值、盈利、成长、质量等多个角度综合评估降低单一指标失效带来的风险。那为什么用Python来做这件事因为Python在数据处理方面有天然优势。pandas处理表格数据、numpy做数值计算、matplotlib做可视化再加上各种财经数据接口整个流程可以高度自动化。你不需要手动去Excel里一个一个拉数据、算指标写一次代码以后每期更新数据就能自动跑出结果。这对于需要定期调仓的选股策略来说效率提升是数量级的。这篇文章适合谁看如果你是刚接触量化投资的新手想从基本面角度入手但不知道从哪里开始那这篇内容就是为你准备的。如果你已经有一些编程基础但对财务指标和因子构建的逻辑还不清楚也可以从这里补齐短板。我会尽量用生活化的例子来解释专业概念让没有金融背景的读者也能跟上节奏。注意本文涉及的所有数据接口、代码示例均为通用方案演示不构成任何投资建议。实际使用时请自行评估数据源的可靠性和策略的适用性。2. 核心概念拆解因子、基本面与选股逻辑2.1 什么是因子用买菜的逻辑来理解因子这个词听起来很学术但其实逻辑特别简单。你去菜市场买菜会看几个维度价格便不便宜、新不新鲜、是不是当季的、摊主口碑好不好。这几个维度就是你的“选菜因子”。股票也一样你需要一些可量化的维度来判断一家公司值不值得买。在量化选股里因子通常分为几大类估值因子市盈率PE、市净率PB、市销率PS、股息率等。核心逻辑是“便宜的东西上涨空间大”。盈利因子净资产收益率ROE、总资产收益率ROA、毛利率、净利率等。核心逻辑是“赚钱能力强的公司更值得投资”。成长因子营收增长率、净利润增长率、经营现金流增长率等。核心逻辑是“增长快的公司未来价值更高”。质量因子资产负债率、流动比率、应收账款周转率等。核心逻辑是“财务健康的公司抗风险能力强”。动量因子过去一段时间的收益率、换手率等。虽然严格来说动量属于技术面但在多因子框架里经常和基本面因子混合使用。每个因子就像一把尺子从某个特定角度去衡量股票的好坏。但任何一把尺子都有局限性所以需要多把尺子一起量。2.2 基本面选股和技术面选股的本质区别技术面选股看的是价格和成交量的历史规律比如均线金叉、MACD背离、成交量放大等等。它的假设是“历史会重演”价格走势已经反映了所有信息。基本面选股看的是公司的财务数据和经营状况它的假设是“价格终将回归价值”好公司迟早会被市场认可。这两种方法没有绝对的好坏之分但基本面选股有几个明显的优势第一数据更新频率低财报一个季度才出一次不需要天天盯盘第二逻辑更扎实你知道自己为什么买这家公司而不是因为“图形好看”第三容量更大基本面策略通常能容纳更大的资金规模不容易因为交易拥挤而失效。当然基本面选股也有缺点。最大的问题是数据滞后性——你看到的财报可能是三个月前的经营情况等你买入的时候市场可能已经提前反应了。另外财务数据有可能被粉饰单纯依赖报表数字有踩雷的风险。这些都是在构建因子时需要特别注意的地方。2.3 多因子模型的基本框架长什么样一个完整的多因子选股流程大致可以拆成这么几步确定股票池比如全市场剔除ST股、剔除上市不满一年的新股、剔除流动性太差的股票。获取财务数据从数据源拉取每只股票的估值、盈利、成长、质量等指标。数据清洗与预处理处理缺失值、异常值做去极值、标准化等操作。因子有效性检验看每个因子和未来收益的相关性剔除无效因子。因子合成把多个因子加权合成为一个综合得分。排序选股按综合得分从高到低排序选出前N只股票。回测验证用历史数据检验策略的表现看收益、回撤、夏普比率等指标。定期调仓比如每季度财报发布后重新计算因子并调仓。这个框架看起来步骤不少但每一步拆开来看都不复杂。前期知识储备阶段最重要的是理解每一步在做什么、为什么这么做而不是急着写代码。3. 数据准备财务数据从哪里来、怎么用3.1 常见的数据获取渠道对比做基本面量化数据是基础。没有可靠的数据源后面的一切都是空中楼阁。目前常见的获取渠道有这么几类数据源类型代表方案优点缺点开源财经接口各类公开财经数据接口免费、上手快数据字段有限、稳定性一般券商研究平台部分券商提供的量化研究环境数据质量高、字段全需要开户、有使用门槛付费数据服务专业金融数据服务商数据全面、更新及时费用较高自建爬虫自行抓取公开财报数据灵活可控维护成本高、易失效对于刚入门的个人开发者我的建议是先从开源接口入手把整个流程跑通等策略逻辑验证清楚了再考虑升级数据源。一开始就追求完美数据很容易陷入“数据准备半年策略一行没写”的困境。3.2 财务数据的关键字段说明拿到数据之后你需要知道哪些字段是核心的。下面这张表列出了最常用的基本面字段字段名称含义所属类别使用注意PE_TTM滚动市盈率估值负值需特殊处理PB市净率估值重资产行业参考性更强ROE_TTM滚动净资产收益率盈利需关注可持续性gross_margin毛利率盈利行业间差异大revenue_yoy营收同比增长率成长需剔除基数效应profit_yoy净利润同比增长率成长波动较大debt_to_assets资产负债率质量金融行业不适用current_ratio流动比率质量低于1需警惕这些字段不是越多越好关键是理解每个字段背后的经济含义。比如PE_TTM为负说明公司亏损这时候低PE不代表便宜反而可能是陷阱。再比如资产负债率制造业和银行业的合理水平完全不同不能一刀切。3.3 数据清洗的四个关键步骤原始财务数据往往有很多“脏”的地方直接拿来算因子会出问题。数据清洗通常包括以下几步第一步处理缺失值。有些股票某些字段没有数据可能是新股、可能是行业特殊性。常见的处理方式是直接剔除该股票或者用行业中位数填充。我个人的习惯是如果核心字段缺失超过三个就直接把这只股票从当期股票池里去掉。第二步去极值。财务数据里经常出现极端值比如某家公司卖资产导致净利润暴增几百倍这种数据会严重干扰因子排序。常用的去极值方法有MAD法中位数绝对偏差法和分位数法。MAD法的逻辑是先算所有数据的中位数再算每个数据与中位数的偏差把偏差超过一定倍数的值拉回到边界上。第三步标准化。不同因子的量纲完全不同PE可能是10到100ROE可能是0到30%直接加权没有意义。标准化的目的就是让所有因子都变成均值为0、标准差为1的分布这样才有可比性。最常用的是Z-score标准化。第四步中性化。这一步很多人会忽略但其实很重要。比如你发现小市值股票的ROE普遍偏低如果不做市值中性化你的因子可能实际上在赌市值风格而不是真的在选高质量公司。中性化的做法是用因子值对市值等行业变量做回归取残差作为新的因子值。实操心得数据清洗这一步看起来枯燥但实际上是整个流程里最影响最终结果的环节。我见过太多人因子逻辑设计得很漂亮结果因为没处理好极端值回测收益虚高得离谱实盘一跑就原形毕露。4. 因子构建与有效性检验的实操要点4.1 单因子测试的标准流程构建好因子之后不能直接拿来用必须先检验它是否有效。所谓“有效”简单说就是这个因子值高的股票未来收益是不是真的比因子值低的股票好。标准的单因子测试流程是这样的每期比如每个季度根据因子值将股票池分成5组或10组。计算每组在下一期的平均收益。观察最高组和最低组的收益差是否显著。计算IC值信息系数即因子值与下期收益的相关系数。看IC的均值、标准差、IC_IR信息比率等指标。如果最高组的收益持续高于最低组且IC均值在0.03以上、IC_IR大于0.3那这个因子就算是比较有效的。当然这只是经验阈值不同市场、不同时期的标准会有差异。4.2 因子有效性的三个核心指标评价一个因子好不好主要看三个指标IC值Information Coefficient因子值与未来收益的截面相关系数。IC均值越高说明因子的预测能力越强。一般来说IC均值超过0.05就算不错了超过0.1就是非常强的因子。但要注意IC高不代表一定能赚钱还要看稳定性。IC_IRIC Information RatioIC均值除以IC标准差。这个指标衡量的是因子预测能力的稳定性。IC_IR越高说明因子在不同时期的表现越一致。通常IC_IR大于0.5就算比较稳定了。多空收益差最高分组和最低分组的收益差。这个指标直接反映了因子的选股能力。如果多空收益差常年为正且幅度可观说明因子确实能区分好坏股票。4.3 因子相关性分析与合成方法当你手上有多个因子时不能简单地把它们加起来因为因子之间可能存在高度相关性。比如ROE和ROA都是衡量盈利能力的相关性可能达到0.8以上同时使用会导致盈利因子被重复计算权重失衡。处理方法是先算因子之间的相关系数矩阵把相关性过高的因子合并或剔除。一般来说相关系数超过0.7的两个因子保留IC更高的那个就行。因子合成最常用的方法是等权加权和IC加权。等权就是每个因子权重一样简单粗暴但有效。IC加权是根据每个因子的历史IC均值来分配权重IC高的因子权重更大。我个人更倾向于等权因为IC加权容易过拟合历史数据而且因子IC本身波动就大用历史IC推未来权重未必靠谱。5. 回测框架搭建与常见陷阱5.1 回测的基本逻辑和关键参数回测就是用历史数据模拟策略的表现。听起来简单但细节特别多。一个基本的回测框架需要明确以下参数调仓频率季度调仓还是月度调仓基本面因子通常用季度调仓因为财报数据是季度更新的。持仓数量选前10只、前20只还是前50只持仓太少波动大持仓太多超额收益被稀释。交易成本佣金、印花税、滑点都要考虑。很多人回测收益很高一算交易成本就亏了。基准指数用来对比策略表现比如沪深300或中证500。5.2 回测中最容易犯的五个错误第一个错误未来函数。这是最致命的。比如你在计算因子时用了当天收盘后的数据但回测时假设当天收盘就能交易这就用了未来信息。正确的做法是财报发布后的下一个交易日才能使用该数据。第二个错误幸存者偏差。如果你只用了当前还在上市的股票做回测那些已经退市的股票就被自动剔除了这会高估策略收益。正确的做法是使用包含退市股票的全历史数据。第三个错误过度优化。为了让回测曲线好看不断调整参数比如把持仓数量从20改成18把调仓频率从季度改成两个月。这种过度拟合历史数据的策略实盘表现往往很差。第四个错误忽略流动性。小市值股票收益可能很高但实际交易时可能买不进也卖不出。回测时必须考虑成交额限制比如只选日均成交额超过一定阈值的股票。第五个错误数据对齐错误。财务数据的报告期和实际发布日期是两回事。比如一季报的报告期是3月31日但实际发布可能在4月底。如果你用报告期来对齐数据就会引入未来信息。避坑技巧回测结果好得离谱的时候先别高兴大概率是哪里出错了。正常的年化超额收益在10%到20%之间就算不错了如果回测显示年化50%以上几乎可以肯定有bug。5.3 评价策略表现的四个核心指标指标名称含义参考标准年化收益率策略每年的平均收益跑赢基准5%以上算合格最大回撤从最高点到最低点的最大亏损控制在30%以内比较理想夏普比率单位风险的超额收益大于1算不错大于2算优秀胜率盈利调仓次数占总次数的比例基本面策略通常50%到60%这四个指标要结合起来看不能只看收益。一个策略年化收益30%但最大回撤50%持有体验会非常差很多人中途就割肉离场了。6. 常见问题与排查技巧实录6.1 数据类问题排查问题一财务数据缺失严重怎么办先排查是数据源的问题还是股票本身的问题。如果是数据源接口不稳定换一个数据源试试。如果是股票本身某些字段没有比如银行股没有毛利率数据那就针对行业做特殊处理或者直接剔除该行业。问题二不同数据源的财务数据对不上怎么办这是很常见的情况不同数据商对同一家公司的净利润统计可能有差异。处理原则是选定一个数据源后就不要频繁更换保持一致性。如果发现某个字段明显异常可以手动核对原始财报。问题三财报数据更新不及时怎么办有些数据接口的更新有延迟比如财报发布后一周才更新。这时候可以在代码里加一个判断逻辑如果最新报告期数据缺失就沿用上一期数据但要标记出来避免误用。6.2 因子类问题排查问题一因子IC值很低甚至为负怎么办先检查因子计算逻辑有没有写错比如增长率算成了绝对值。如果逻辑没问题可能是这个因子在当前市场环境下失效了。因子失效是正常现象没有永远有效的因子。可以尝试调整因子定义比如把ROE换成ROE的同比变化。问题二因子之间相关性太高怎么办用相关系数矩阵排查把相关性超过0.7的因子合并。合并方法可以是取平均也可以做主成分分析提取主成分。但主成分分析的可解释性差我个人不太推荐在初期使用。问题三因子在回测中表现好但实盘不行怎么办大概率是过拟合了。检查回测中是否有未来函数、幸存者偏差等问题。另外实盘和回测的交易成本、滑点差异也要考虑进去。如果回测时没算交易成本实盘一扣就亏了。6.3 代码实现类问题排查问题一pandas处理大数据量时内存不够怎么办可以用分块读取的方式每次只读一部分数据。另外把数据类型从float64降为float32也能省不少内存。如果数据量实在太大考虑用数据库存储只把需要的数据读进内存。问题二循环计算因子太慢怎么办尽量用pandas的向量化操作代替for循环。比如计算所有股票的ROE不要一只一只循环直接用列运算。如果实在需要循环可以用apply或者numba加速。问题三回测代码跑一次要很久怎么办先做性能分析看时间花在哪里。通常是数据读取和因子计算占大头。可以把中间结果缓存起来避免重复计算。另外用多进程并行处理也能显著提速。实操心得我刚开始写回测的时候一个季度调仓的策略跑十年数据要十几分钟后来发现是每次调仓都重新读取全部数据。改成一次性读取、内存中切片之后时间缩短到几十秒。这种优化看起来不起眼但当你需要反复调试参数时节省的时间非常可观。7. 从知识储备到实战的过渡建议前期知识储备做得再充分最终还是要落到代码上。我的建议是不要等所有知识都学完了再动手而是边学边做。可以先从一个最简单的单因子策略开始比如只用低市盈率选股把数据获取、清洗、排序、回测整个流程跑通。跑通之后再逐步加入更多因子优化数据清洗逻辑完善回测框架。这个过程中你会遇到很多文档里不会写的问题比如某个数据接口突然不能用了、某只股票的财务数据明显异常、回测结果和预期完全相反。这些问题才是真正让你进步的地方。每解决一个问题你对整个系统的理解就深一层。另外不要闭门造车。多看看别人写的因子逻辑和回测框架哪怕不直接用也能给你很多启发。量化投资这个领域思路比代码重要而好的思路往往来自于广泛的阅读和交流。最后说一个我自己的体会基本面多因子选股不是一夜暴富的工具它更像是一种系统化的投资思维方式。它强迫你去关注公司的真实经营状况而不是被市场情绪牵着走。即使你最终不用它来实盘交易学习这套方法本身也能让你对投资有更理性的认识。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/15 13:25:58
STM32裸机Zlib裁剪实战:14KB Flash实现Deflate压缩
2026/10/15 13:20:57
贪心算法实战:Prim最小生成树从原理到堆优化
2026/10/15 13:20:57
外贸独立站3类页面合格度,怎么用脚本一次跑完
2026/10/15 15:56:56
Vector Drawable转SVG:属性映射、group变换与批量脚本
2026/10/15 15:56:56
单片机语音数字化存储与回放:采样、Flash存储与PWM还原
2026/10/15 15:56:56
HART转TCP网关实现水泥厂高温管道温度监控方案实践
2026/10/15 15:56:56
一块坐垫有几个面?用部位清单读懂面料规格
2026/10/15 15:56:56
AI+物联网在零售业的长期应用:从架构到ROI测算
2026/10/15 15:51:52
STM32F103输入捕获测周期与占空比实战避坑指南
2026/10/15 0:02:59
AI Coding时代的柔性之美:从静态软件到自演化软件,软件研发正在重新进化
2026/10/15 0:02:59
亨得利客户服务中心官方网点分布一览:2026年全国多城门店地址与最新联系电话公布
2026/10/15 0:02:59
防关联浏览器哪个好?三款产品实测差异解析
2026/10/13 12:25:09
流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南
2026/10/14 18:35:19
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别
2026/10/14 14:52:59
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容
2026/10/15 1:07:55
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/15 5:07:59
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/15 8:10:01
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)