Q-CodeQ-Code 打开工作台

价值质量双因子选股

因子选股A股风险 中进阶更新 2026-09-24#价值因子#质量因子#双因子

以低估值打底、高质量过滤,用 PB 与 ROE 的复合打分在截面中避开价值陷阱,构建季度再平衡组合。

策略目标

价值因子(低 PB)与质量因子(高 ROE)是长期证据最充分的两个截面维度 [1][2]。单独使用低估值容易踩进价值陷阱:便宜的原因是基本面持续恶化;单独使用质量则可能在牛市顶部以极贵价格买入好公司。两者复合的直觉是:用可接受的价格买盈利能力可信的公司,让两个因子互为对方的过滤器。

数据需求(财务 + 估值)

数据 字段 频率 用途
估值 市净率(PB) 日频 价值维度
财务 净资产收益率(ROE) 报告期 质量维度
状态 行业分类、ST 标记、上市日期 基础信息 范围过滤

QMT 端通过平台财务数据接口获取报表与估值字段,字段缺失或口径异常的标的直接跳过,不做估算填充。

复合打分

截面内分别计算百分位:

Qi=rank(ROEi),Vi=1−rank(PBi)Q_{i} = \mathrm{rank}\left(ROE_{i}\right), \qquad V_{i} = 1 - \mathrm{rank}\left(PB_{i}\right)

复合得分(等权起步,权重可参数化):

Scorei=0.5×Vi+0.5×QiScore_{i} = 0.5 \times V_{i} + 0.5 \times Q_{i}

取 ScoreScore 最高的 40 只等权持有。

组合构建规则

季度调仓,持有 40 只等权。金融行业默认剔除(其低 PB 是行业商业模式属性,混入截面会直接占据价值端前排),是否纳入金融可作为开关参数对照实测。ROE 转负的持仓提前剔除。排名缓冲:已持有标的复合分仍在池内前 50% 时不强制卖出。

风险与失效场景

  • 周期顶部陷阱:强周期行业在景气顶点恰好呈现低 PB + 高 ROE,双因子可能恰好选中周期顶,需要辅以盈利趋势或景气位置判断;
  • 价值因子长期失效期:成长风格主导时低估值组合持续跑输,动辄数年,持有体验必须提前接受;
  • 质量因子拥挤:好公司普遍被重仓,估值折扣机会减少;
  • 行业集中:低估+高 ROE 的交集常集中在少数行业,需要集中度监控;
  • 财报滞后:ROE 来自已披露报告期,市场可能已提前定价。

验证状态

待验证。需要完成:PB、ROE、复合得分的分组收益对照;等权与 5:5 之外权重的敏感性;纳入金融行业的开关对照;周期股占比对组合回撤的影响。本文不提供任何未实测的收益或回撤数字。

参考文献与延伸

[1] Fama, E. F., & French, K. R. (1992). The Cross-Section of Expected Stock Returns. Journal of Finance, 47(2).(价值因子奠基证据)

[2] Asness, C., Frazzini, A., & Pedersen, L. H. (2019). Quality Minus Junk. Review of Accounting Studies, 24(1).(质量因子的定义与长期证据)

[3] Q-Code 量化策略工作台

策略逻辑结构

  1. 财务与估值数据 — PB、ROE、行业分类
  2. 估值分位 — PB 截面反向排名
  3. 质量分位 — ROE 截面排名
  4. 复合打分 — 价值与质量等权融合
  5. 组合构建 — 复合分前 40 只等权
  6. 季度再平衡 — 缓冲带与恶化剔除

AI 生成提示词

复制以下提示词,打开 Q-Code 工作台粘贴到 AI 对话框,即可自动生成该策略的 QMT 策略代码(单个完整 .py 文件,支持 QMT 回测与实盘)。

请生成一个 QMT 兼容的 A 股价值质量双因子选股策略。通过平台数据接口获取市净率与 ROE:剔除金融行业、ST、上市不足一年的标的;在剩余池内分别计算 PB 与 ROE 的截面百分位,复合得分 = ROE 分位 - PB 分位(价值反向);取复合分最高的 40 只等权持有,ROE 转负即提前剔除。季度调仓、排名缓冲、单票权重上限写入 init;财务数据只用已披露报告期,禁止未来函数,兼容回测与实盘分支,输出单个完整 Python 文件并包含详细日志。
用自然语言,生成你的 QMT 策略
注册即赠 200 积分,约可生成 5 次 · 支持 Kimi / GLM / DeepSeek
打开 Q-Code 工作台