QQC综合质量因子:从理论构建到实战应用
  alphonse 2025年06月16日 81 0

最近几年在做量化研究时,我有一个很深的感受:A股市场正在发生一些根本性的变化。以前那种靠题材炒作、概念驱动的投资方式越来越难赚钱了,反而是一些基本面扎实的公司开始受到资金青睐。

这种变化背后有两个很重要的推手。第一个是外资的持续流入。我记得2016年刚开始关注北上资金的时候,很多人还把它当作一个短期的资金流向指标来看。但现在回头看,外资买入的逻辑其实很清晰:ROE高、现金流好、行业地位稳固的龙头公司。这些公司可能不是最sexy的,但确实是最赚钱的。

第二个推手是监管层面的变化。2020年的退市新规我觉得是一个分水岭,以前那些靠财务造假、关联交易维持上市地位的公司,生存空间被大大压缩了。市场开始真正奖励那些经营质量高的公司,惩罚那些浑水摸鱼的。

在这样的背景下,我开始思考:能不能用量化的方法,系统性地识别出这些"优质公司"?这就是我研究QQC质量因子的初衷。

理论基础:Gordon模型给我的启发

说实话,刚开始研究质量因子的时候,我有点无从下手。什么叫"质量"?怎么量化"质量"?市面上关于质量因子的研究很多,但大多数都是把一堆财务指标堆在一起,缺乏理论指导。

后来我重新翻阅了一些经典的估值理论,Gordon成长模型给了我很大启发:

PB=profitability×payout_ratiorequired_returngrowth\frac{P}{B} = \frac{profitability \times payout\_ratio}{required\_return - growth}

这个公式虽然简单,但它把公司价值的驱动因素讲得很清楚:盈利能力、分红政策、成长性、风险水平。更重要的是,它给了我一个思考框架:一家"优质"的公司,应该在这几个维度上都有不错的表现。

但这里有个问题:分红政策(payout ratio)在A股市场的区分度不够高,很多公司要么不分红,要么分红政策变化很大。所以我对这个框架做了一些调整,最终确定了六个维度:盈利能力、成长能力、盈余质量、营运效率、安全性、公司治理。

这六个维度基本涵盖了我对"优质公司"的理解:不仅要赚钱(盈利能力),还要持续赚钱(成长能力),赚的钱要是真金白银(盈余质量),赚钱的效率要高(营运效率),财务要稳健(安全性),治理要规范(公司治理)。

因子构建:六大维度的深度挖掘

2.1 盈利能力:不只是看ROE那么简单

提到盈利能力,很多人第一反应就是ROE。ROE确实重要,但我在实际测试中发现,单纯的ROE在A股市场的预测能力并不是最强的。

经过大量测试,我发现 经营现金流/总资产(CFOA) 的表现最为出色,IC_IR高达0.47。这个发现让我很有感触:在A股这个相对不成熟的市场,会计利润和经营现金流之间的差异往往很大。那些经营现金流充沛的公司,往往代表着更真实的盈利质量。

我记得有一次路演,一个投资经理问我:"为什么不直接用净利润增长率?"我的回答是:净利润可以通过各种会计处理来调节,但现金流是骗不了人的。一家公司可以连续几年报告盈利,但如果现金流持续为负,那这种"盈利"的可持续性就很值得怀疑。

最终,我选择了CFOA、ROE、ROIC三个指标等权构建盈利能力因子。这个组合既考虑了会计利润,也考虑了现金流,还兼顾了资本配置效率。

# 主要逻辑:计算公司的基础盈利能力指标。 class ProfitabilityFactors: def calculate_factors(): for each stock: # 1. 经营现金流资产比 CFOA = operating_cash_flow / total_assets # 2. 净资产收益率 ROE = net_profit / average_equity # 3. 投资资本回报率 ROIC = NOPAT / (total_assets - current_liabilities) return standardized_factors

关键点:

  • 使用TTM(滚动12个月)数据
  • 考虑行业中位数进行标准化
  • 处理异常值和极端情况

001_factor_analysis.png

2.2 成长能力:从增长率到增长质量

成长因子的构建是我花时间最多的部分,因为传统的增长率指标在A股市场有一个很大的问题:波动性太大。很多公司的季度增长率可能从100%跳到-50%,这种增长率对投资决策的指导意义不大。

所以我引入了几个创新性的指标:

加速度指标:这个想法来源于物理学。我想,如果一家公司的业绩增长不仅在加速,而且加速度还在提升,那这种增长的质量应该更高。通过对连续8个季度的业绩进行二次回归:

NPt=α×t2+β×t+cNP_t = \alpha \times t^2 + \beta \times t + c

这里的α就是"加速度"。测试结果证明了这个想法的有效性。

稳健增速指标:这个指标解决的是另一个问题。有些公司增长很快,但增长的稳定性很差,这种增长往往不可持续。稳健增速指标就是用增长率的均值除以标准差,奖励那些增长稳定的公司。

实际测试中,营业利润稳健加速度(OP_SD) 的表现最为出色,IC_IR达到0.73。这个结果让我更加确信:在成长性评估中,增长的质量比增长的速度更重要。

# 主要逻辑:分析公司的增长轨迹和稳定性。 class GrowthFactors: def calculate_growth(): for each stock: # 1. 增长加速度(二次拟合) growth_acc = quadratic_regression(earnings_series) # 2. 增长稳定性 growth_stability = mean(growth_rates) / std(growth_rates) # 3. 营业利润稳定性 op_stability = operating_profit.std() / operating_profit.mean() return standardized_factors

关键点:

  • 使用二次回归捕捉加速度
  • 考虑增长的可持续性
  • 平滑季节性波动

002_growth_analysis.png

2.3 营运效率:挖掘隐藏的价值驱动力

营运效率这个维度,我觉得是最容易被忽视但又很重要的一个维度。很多投资者喜欢关注收入增长、利润增长,但很少有人关注资产周转效率的变化。

除了传统的周转率指标,我还构建了一个产能利用率提升因子(OCFA)。这个因子的逻辑是:如果一家公司能够在固定资产不变的情况下,提高产能利用率,那么它的营运效率就在改善。

具体的计算方法是通过营业总成本对固定资产做滚动回归:

Total_Operation_Cost=β0+β1×Fixed_Assets+εTotal\_Operation\_Cost = \beta_0 + \beta_1 \times Fixed\_Assets + \varepsilon

这里的残差项ε就代表了产能利用率的变化。如果ε为负且在改善,说明公司在相同的固定资产规模下,成本控制得更好了。

这个因子在测试中表现不错,让我认识到:有时候最有价值的alpha可能隐藏在一些不太引人注意的地方。

# 主要逻辑:评估公司的资产使用效率。 class OperationalEfficiencyFactors: def calculate_efficiency(): for each stock: # 1. 资产周转率 asset_turnover = revenue / average_total_assets # 2. 存货周转率 inventory_turnover = cost_of_goods / average_inventory # 3. 应收账款周转率 receivables_turnover = revenue / average_accounts_receivable return standardized_factors

关键点:

  • 考虑行业特征差异
  • 使用平均资产计算
  • 处理季节性影响

003_efficiency_analysis.png

2.4 盈余质量:A股市场的"照妖镜"

在A股市场做量化研究,盈余质量是一个绕不开的话题。我见过太多公司通过关联交易、资产重组来粉饰业绩,所以这个维度对我来说特别重要。

应计利润占比(APR) 是我最看重的一个指标:

APR = \frac{营业利润 - 经营现金流净额}{营业利润}

这个指标的逻辑很简单:如果一家公司的利润主要来源于应计项目而不是现金流,那这种利润的质量就值得怀疑。在我的测试中,APR确实表现出了显著的负向预测能力。

有意思的是,这个因子在2018年表现特别突出。回想起来,2018年正是监管趋严、很多公司财务问题暴露的一年。这从侧面验证了盈余质量指标的有效性。

# 主要逻辑:评估盈利的真实性和可持续性。 class EarningsQualityFactors: def calculate_quality(): for each stock: # 1. 应计利润占比 APR = (operating_profit - operating_cash_flow) / abs(operating_profit) # 2. 现金流稳定性 CFO_stability = 1 / cash_flow.std() # 3. 盈利持续性 earnings_persistence = AR1_coefficient(earnings_series) return standardized_factors

关键点:

  • 关注现金流支持度
  • 分析时间序列特征
  • 考虑行业差异

004_quality_analysis.png

2.5 市场反应:捕捉市场情绪的变化

市场反应因子是我在研究过程中后来加入的一个维度。最初我觉得这个维度可能和质量因子的"基本面"导向不太相符。但后来我发现,市场反应其实反映了投资者对公司质量的认知过程,这个维度可以帮助我们更好地把握投资时机。

我设计的市场反应因子主要包含三个方面:

分析师一致性(Analyst Consensus):这个指标衡量分析师对公司的评级变化趋势。我发现,相比单纯的分析师评级,评级的变化方向和一致性更有预测价值。特别是当多个分析师在短期内同向调整评级时,往往预示着公司基本面正在发生重要变化。

机构持股变化(Institutional Ownership Change):这个指标跟踪主要机构投资者的持股变动。我特别关注那些长期业绩优秀的基金经理的持仓变化,因为他们往往更注重公司的长期质量而不是短期波动。

成交特征(Trading Characteristics):这里我设计了一个特别的指标,叫做"智能成交比率(Smart Money Ratio)":

# 主要逻辑:分析市场对公司质量的认知变化。 class MarketReactionFactors: def calculate_reaction(): for each stock: # 1. 分析师一致性指标 analyst_consensus = weighted_sum(rating_changes) # 2. 机构持股变化 inst_ownership_change = institutional_holdings.diff() # 3. 智能成交比率 smart_money_ratio = large_trades / total_volume return standardized_factors

关键点:

  • 考虑事件窗口选择
  • 处理市场整体影响
  • 分析异常收益

005_reaction_analysis.png

2.6 估值因子:质量溢价的再发现

在构建估值因子时,我采取了一个不同于传统的思路:不是简单地看估值的高低,而是将估值与公司质量结合起来。这源于一个观察:高质量公司的估值溢价往往是可持续的,而低质量公司的低估值可能是一个"价值陷阱"。

我设计了三个核心指标:

质量调整的PE(Quality-Adjusted PE):这个指标的创新之处在于,我用ROE的稳定性来调整PE:

Quality_Adjusted_PE=PE1+ROE_StabilityQuality\_Adjusted\_PE = \frac{PE}{1 + ROE\_Stability}

其中ROE_Stability是ROE的五年标准差的倒数。这样,对于那些ROE稳定的公司,我们会容忍更高的PE。

动态PEG(Dynamic PEG):传统的PEG可能会低估那些处于转型期的公司。我的改进是使用"潜在增长率"来计算PEG:

# 主要逻辑:将估值与公司质量结合评估。 class ValuationFactors: def calculate_valuation(): for each stock: # 1. 质量调整的PE quality_pe = pe_ratio / (1 + roe_stability) # 2. 动态PEG dynamic_peg = pe_ratio / potential_growth_rate # 3. 企业价值倍数 ev_quality = ev_to_ebitda / quality_score return standardized_factors

关键点:

  • 分行业标准化
  • 处理负值情况
  • 考虑成长性差异

这个估值框架在实践中表现出了很好的区分度。特别是在2019-2020年的结构性行情中,它帮助我们避开了很多看似"便宜"但实际质量堪忧的公司,同时也让我们能够坚持持有一些表面看起来"贵"但质量过硬的公司。

006_valuation_analysis.png

QQC综合因子:少即是多的哲学

在决定如何把六大类因子合成一个综合因子时,我面临一个选择:是用IC加权、IC_IR加权,还是简单的等权重?

经过反复测试和思考,我最终选择了等权重。理由有几个:

  1. 避免过拟合:IC加权本质上是一种样本内优化,容易导致样本外表现下降
  2. 逻辑直观:每个维度都代表质量的一个方面,没有理由认为某个维度天然更重要
  3. 稳健性更好:等权重的方法在不同市场环境下的适应性更强

实战应用:沪深300增强的血泪教训

说到沪深300指数增强,早期我试过很多技术指标、动量因子,效果都不理想。后来我意识到,沪深300的增强难度主要在于:

  1. 权重股的影响太大:前15大权重股占比超过30%,如果你在茅台、平安这些股票上判断错了,整个组合的表现就完蛋了
  2. 有效因子太少:我测试了200多个因子,在沪深300内部真正有效的不到20个
  3. 风格暴露难控制:稍不注意就会偏向成长或价值,一旦风格切换就亏钱

基于QQC因子的沪深300增强策略,我设计了很严格的风险控制:

  • QQC因子权重强制≥50%
  • 行业偏离度≤5%
  • 个股权重偏离≤1%

这些约束看起来很保守,但实际效果很好。策略在2011-2020年的年化超额收益达到10.47%,更重要的是,每年都跑赢了基准,这在指数增强策略中是很难得的。

特别是2020年,策略超额收益19.37%,这一年正好是机构抱团、核心资产大涨的一年。事后看来,QQC因子很好地捕捉到了这种"质量溢价"。

一些思考和感悟

QQC因子给我最大的感触是:有时候最简单的方法反而是最有效的

在因子构建过程中,我试过很多复杂的方法:机器学习、神经网络、遗传算法等等。但最终发现,基于扎实理论基础的简单方法,往往比那些看起来很炫酷的复杂方法更稳定、更有效。

另一个感悟是:市场在变,但基本的商业逻辑不变。无论是美股、港股还是A股,无论是成长股还是价值股,那些盈利能力强、成长性好、财务健康的公司,长期来看总是会得到市场的认可。QQC因子之所以有效,本质上是因为它抓住了这些不变的商业逻辑。

最后,我想说的是:量化研究不是纯粹的数据挖掘,更重要的是对市场和商业本质的理解。再强大的模型,如果没有逻辑支撑,也只是空中楼阁。QQC因子的成功,很大程度上得益于我们始终坚持"先有逻辑,再有模型"的研究思路。

如果需要完整代码,这个是代码仓库链接
https://gitee.com/carlo_scarpa/quant-factor-research-collection

最后一次编辑于 2025年06月20日 1

暂无评论

推荐阅读