跳到正文

因子动物园及其之后:哪些因子真正能扛得住交易成本

超越 Fama-French:约 200 个已发表因子里,真正扛得住成本、扛得住拥挤、跨得过周期的可能只有二三十个。这篇讲哪些、以及它们为什么存在。

第 3 篇 · 共 8 篇 约 9 分钟

自 1980 年以来,学术界至少发表了 200 个因子。其中大多数扛不住交易成本。能活下来的可能也就二三十个。

Fama 和 French 在 1993 年给了我们三因子模型,然后很多人读到这儿就不往下读了。其实不该停——因子动物园一直在扩张,而且其中相当一部分确实含有信号,这是不含成本的说法。这三个字是本文的主线:一个因子要值得你投钱,得连过三关。(a) 扣掉双边 30–50 个基点的成本之后还能赚钱;(b) 不会在所有人一拥而上时被压垮;(c) 不是只在 1990 年代管用,能跨周期成立。下面每讲一个因子,都会拿这三关去量它。

Fama-French 之后的四个股票因子

先把股票这一侧讲完。这四个是三因子模型之外最经得起检验的,其中两个后来被 Fama-French 自己收编进了五因子模型。

质量

高 ROE、低负债、盈利稳定、高利润率。你买入那些赚钱、管理良好的公司,做空那些垃圾公司。

学术论文里的 Sharpe 大约 0.4–0.6,发表后的实际表现按变体不同大概 0.3–0.5。质量是文献里最稳健的因子之一——Novy-Marx (2013) 证明它从 1963 年开始就管用,跨越了每一个主要周期。Robert Novy-Marx, The Other Side of Value, Journal of Financial Economics, 2013, ISSN 0304-405X.

它的机制说得通,这一点很重要,因为讲不出机制的因子通常也扛不过第三关。会赚钱的公司是稀缺的。投资者愿意为成长故事付高价,却不愿意为无聊的现金生成付高价。这种误定价消化得很慢,因为大多数主动管理基金被明文规定不许买”无聊”的股票——他们要给客户讲故事。换句话说,维持这个溢价的是一个制度性约束,而制度不会因为有人发了篇论文就改。

低波动 / 反向押注 Beta(BAB)

低波动股票在风险调整后跑赢高波动股票。注意是风险调整后——绝对收益上它们在牛市里跑输。从 Sharpe 角度讲,你每承担一单位风险拿到的回报更高。

AQR 把这个做成了旗舰策略。Frazzini, Kabiller, and Pedersen, Betting Against Beta, Journal of Financial Economics, 2014. 历史 Sharpe 大约 0.5–0.7。加杠杆约束的 BAB 版本比朴素的低波动稍好,因为它显式地把仓位按风险拉平。

直观解释跟质量因子是同一个套路:大多数投资者对杠杆有约束,所以他们为高 beta 股票付高价(高 beta 给了他们”免费”的杠杆),低估了低 beta 股票。套利手法是买入低 beta 再加杠杆。听起来简单,但”再加杠杆”那半句是整个游戏——它意味着你需要便宜的融资,而这正是第一关(成本)会淘汰大多数人的地方。

盈利能力(RMW)

高毛利除以总资产,从 1963 年一直强到现在。Fama 和 French 在 2015 年把它加成第五因子,就是因为原始三因子模型解释不了盈利能力驱动的收益。Eugene Fama and Kenneth French, A Five-Factor Asset Pricing Model, Journal of Financial Economics, 2015, ISSN 0304-405X.

具体做法:按 gross profitability(收入减去销售成本,再除以总资产)对股票排序,做多前五分之一,做空后五分之一。溢价在美国数据里年化 3–5%(毛收益,未扣成本)。这个因子换手率低——基本面变化慢——所以它过第一关比较轻松。

投资(CMA)

低投资除以资产。资产规模增长慢的公司往往跑赢那些疯狂堆资产的公司。这是 Fama-French 的另一个 2015 年新增项。

故事是这样的:管理者手里有现金就会过度投资,建新工厂、收购同行、做杠杆收购,做着做着价值就毁了;保守增长的公司则默默地把账面价值复利起来。

这个因子有意思的地方在于它跟质量相关(好公司不会过度投资),但不是同一笔交易。这个区别在组合里很要紧——两个高度相关的因子放一起,你以为自己分散了,其实只是把同一个赌注下了两遍。

跨资产的三个溢价

上面四个是股票因子。还有三个不在股票里,但哪儿都有它们的影子,通常被归到”另类风险溢价”这个大筐里。

期限溢价。 长期债券在长周期上跑赢短期债券,美国数据里历史年化大约 1–2%。机制朴素得几乎不像个因子:投资者锁定更长时间的钱,会要求额外收益作为补偿,而他们拿到了。

信用溢价。 高收益债跑赢投资级债,历史年化大约 2–4%。违约风险更高,但利差平均下来足够补偿——“平均下来”这四个字里藏着它的全部风险,因为补偿的分布是左偏的。

货币 carry。 借入低息货币(JPY、CHF),买入高息货币(BRL、MXN、AUD),赚利差。Sharpe 大约 0.4–0.6,但它每隔五到十年会在央行转向时崩一次:1998(LTCM)、2008、2014、2022。左尾很疼,而且崩的时候通常跟你其它仓位一起崩——这就是为什么它在第二关(拥挤脆弱性)上得分最差。

Fama-French 五因子模型怎么用

现在学术界的标准模型是:

Ri−Rf=α+β1⋅MKT+β2⋅SMB+β3⋅HML+β4⋅RMW+β5⋅CMA+εR_i - R_f = \alpha + \beta_1 \cdot MKT + \beta_2 \cdot SMB + \beta_3 \cdot HML + \beta_4 \cdot RMW + \beta_5 \cdot CMA + \varepsilon

五个因子分别是市场超额收益(MKT)、小减大规模(SMB)、高减低账面市值比价值(HML)、强减弱盈利能力(RMW)、保守减激进投资(CMA)。

这个模型对你的实际用途只有一个,但很关键:拿你的策略收益对这五个因子做回归,看 alpha 还在不在。如果 alpha 在被五个因子吃掉之后还能存活,你可能手里真有东西;如果不能,那你的策略要么是加了杠杆的 beta,要么是换了件衣服的因子押注——你以为自己发现了 alpha,其实是重新实现了一遍 HML。这一步做起来很便宜,却能挡掉相当一部分自欺。

AQR 的四因子风格溢价

跨资产这条线上,AQR 发表的研究(Asness, Moskowitz, Pedersen, Value and Momentum Everywhere, Journal of Finance, 2013, ISSN 0022-1082)把上面那堆东西提炼成了四个大类:价值(便宜 vs 昂贵:股票账面市值比、利率水平、信用利差、FX 的 PPP 偏离)、动量(赢家 vs 输家:过去 12 个月收益,跳过最近一个月)、carry(高收益 vs 低收益工具)、防御(低波动、高质量、低 beta)。

这四类在全球股票、固定收益、外汇、大宗商品上都成立,而且每一类干的事情不一样。它们之间相关性很低,这恰恰是重点——组合起来之后的收益曲线比任何单一因子都平滑得多。注意这个框架跟前面那四个股票因子不是竞争关系:质量和低波动被归进”防御”,盈利能力和投资是质量的两个具体度量。它是一个更粗的分层,用来做跨资产配置,不是用来选股。

怎么在平台上真跑一个因子

内置的价量因子(momentum_20、momentum_60、reversal_5、volatility_20)一行就能评:

from apexquant.notebook import evaluate_factor

report = evaluate_factor(bars, "momentum_60", quantiles=5, periods=(1, 5, 21))
report["ic_summary"]

提示词

用 Arithmion 的 notebook.evaluate_factor 评价内置的 60 日动量因子,分 5 个分位,看 1/5/21 期前向收益。

但本文讲的质量、盈利能力、投资这些是基本面因子,平台没有内置版本——你得自己算分数,然后把它塞进规范形状。规范形状是一张因子面板:两层 MultiIndex(timestamp 必须 tz-aware UTC,symbol),一列一个因子,值是数值,(timestamp, symbol) 不许重复。apexquant.core.panel 里的 validate_panel 负责把关,panel_to_factor_series 把其中一列转成 evaluate_factor 要的堆叠 Series:

from apexquant.core.panel import panel_to_factor_series, validate_panel
from apexquant.bundled.analytics.factor_eval import evaluate_factor


validate_panel(quality_panel)
factor = panel_to_factor_series(quality_panel, "quality")

report = evaluate_factor(prices, factor, quantiles=5, periods=(21,), cost_bps=10.0)

提示词

把自己算的质量分数做成 Arithmion 的因子面板,校验形状之后转成堆叠 Series,再按 5 分位、月度前向收益、单边 10bp 成本评价。

cost_bps 那个参数值得停一下,因为它直接关系到本文的第一关。这个函数默认 cost_bps=0.0,是一个明确的”不含成本”基线;在这个默认下分位曲线每根 bar 免费换手,那个数字不是可交易的收益。所以判断一个因子扛不扛得住成本,正确做法是把两个数一起跑出来看:cost_bps=0 那版告诉你信号里有没有东西,填上真实成本那版告诉你东西够不够多。一个在 0 bp 下 Sharpe 0.9、填上 10 bp 就掉到 0.2 的因子,不是一个 0.9 的因子。

真要做成多空组合去回测,走的是另一条路:继承 PortfolioStrategy(apexquant.core.portfolio_strategy),在 on_rebalance(view) 里返回 {ticker: 目标权重},权重按当前净值计,然后跑 run_backtest。分位排序、目标权重、T+1 成交撮合各归各的层,别在 on_bar 里手搓。

多因子分散到底做了什么

单因子 Sharpe 随因子和时间段不同,大致在 0.3–0.7 之间。四因子组合(价值 + 动量 + 质量 + 低波动),等权或风险平价,文献和实务报告里常见的区间是 1.0–1.5——但这个数强烈依赖样本期和成本假设,看到它先问是哪十年、扣没扣成本。

背后没什么神秘的,就是数学。当因子之间相关性很低时,把它们组合起来,方差下降的速度比预期收益下降的速度快,于是组合的 Sharpe 比任何单一成分都高。这也是为什么上一节要强调”质量和投资相关但不是同一笔交易”——分散化的收益完全来自相关性,你以为的四个因子如果实际上是两个,那这个提升就不存在。

但它们会一起崩

这是没人写进摘要的那部分。当 50 家量化基金都挤进同一个因子,溢价会缩水;当他们同时夺路而逃时,就是因子崩盘。2009 年的动量在 12 个月里跌了约 50%。2020 年的价值被成长股碾压,碾压的程度几十年没见过。

关键在于,因子崩盘的时候上一节那个”低相关性”假设正好失效——压力之下相关性会飙升,你精心搭的四因子组合在最需要它分散的那一刻,表现得像一个因子。所以分散化是一个平时有效、极端时打折的工具,别把它当保险。

质量和低波动比动量和价值没那么拥挤,原因也很实在:它们规模上更难做,你需要可靠的基本面数据、更长的持仓周期、更低的换手率。门槛把人挡在外面,溢价就留下来了——这是第二关的一般规律,凡是容易做的都会被做满。

所以如果你在跑一个多空股票组合,别把赌注全压在一个因子上,混四到五个,而且用风险平价加权,免得不知不觉变成六成动量加四成其它一切。拥挤这条线怎么持续测量,是另一篇文章的事。

收尾

如果我今天要搭一个因子组合,大致是这样:挑四到六个相互相关性低的因子(价值、动量、质量、低波动、规模),先各自算清楚扣成本前后的 IC 和 Sharpe,再按风险贡献加权组合起来,目标年化波动 10–12%,每月再平衡,同时把拥挤信号挂上持续看。

最后一条是预期管理,而且我认为是最重要的一条:任何单一因子每十年都会有两三年表现很烂。这不是意外,是它的正常形态。如果你的持仓计划扛不住连着两年跑输,那你实际上没有在做因子投资,你在做择时——而择时是另一件难得多的事。

溢价是真实的。它比 1990 年代那批学术论文说的要小,它会衰减,但还没衰减到零。

参考文献

  • Fama, E. & French, K. (2015). A Five-Factor Asset Pricing Model. Journal of Financial Economics. ISSN 0304-405X.
  • Novy-Marx, R. (2013). The Other Side of Value. Journal of Financial Economics. ISSN 0304-405X.
  • Frazzini, A., Kabiller, D., & Pedersen, L. (2014). Betting Against Beta. Journal of Financial Economics.
  • Asness, C., Moskowitz, T., & Pedersen, L. (2013). Value and Momentum Everywhere. Journal of Finance. ISSN 0022-1082.
  • AQR Capital Management. Style Premia: An Alternative Approach to Alternative Investments. Research paper, 2017.