我们先看一张表。下面是 A 股几个年份里,小盘(中证1000)和大盘(沪深300)、成长(300成长)和价值(300价值)各自的全年收益差:

同一年里,不同风格的收益差
年份沪深300中证1000小盘 − 大盘成长 − 价值
2013−5.3%+32.5%+37.8+1.0
2015+7.2%+76.6%+69.4+4.4
2017+24.3%−16.9%−41.1−5.9
2020+29.9%+20.5%−9.4+42.1
2024+18.2%+2.8%−15.4−23.9

中证指数官网全收益指数,含分红再投资。收益差单位是百分点。

表 1 · 同样是 A 股,2015 年小盘比大盘多涨了 69 个点,2017 年又少涨了 41 个点

这种差别,在 A 股投资者的语言里叫“风格”:某一年是小盘的天下,另一年是大盘蓝筹的天下;某一年成长股一飞冲天,另一年价值股更扛跌。如果手里有一组量化策略,分别擅长不同的风格,再能判断出当下是哪种风格,似乎就可以在合适的时候用合适的策略。

不过,在讨论“怎么切换”之前,有几个更基础的问题。上面这些差别,是一种会持续一段时间的规律,还是只是每年随机波动的结果?如果市场风格确实存在,它应该用什么来描述,持续多久,怎么从数据里认出来?市面上的产品和研究有没有在做这件事,它们是怎么设计的?如果我们自己来设计一个“策略篮子 + 风格判定”的系统,它应该长什么样,又该怎么检验?

本文按这个顺序,从风格是否存在,一直讲到一个可以落地的方案。

一、市场风格是否存在

要检验的是什么

表 1 里的收益差很大,但“差别大”本身证明不了什么。即使每天的涨跌完全随机,一年下来大盘和小盘的收益也会有差别。“风格”这个说法隐含了更多的东西:它会持续一段时间。今年小盘占优,接下来几个月大概率还是小盘占优;市场处在剧烈波动的阶段,接下来一段时间也大概率继续剧烈波动。

所以检验的思路是:把真实的日收益随机打乱顺序,再计算同样的统计量。打乱以后,每天的涨跌幅度原封不动,只是时间顺序没了,任何“持续性”都会消失。如果真实数据的统计量明显落在打乱结果的范围之外,就说明数据里确实有打乱破坏掉的那种结构,也就是风格。

数据用 2005 年到 2026 年 10 月的沪深300、中证1000、300价值、300成长全收益指数1,港股用 2008 年以来盈富基金的复权价2。每个统计量都和 200 次打乱的结果比较。

证据一:波动会聚集

最直接的一种持续性是波动。我们算每天的 20 日波动率,再看它和 60 个交易日以前的 20 日波动率之间的相关系数:

20 日波动率与 60 个交易日前的相关系数
序列真实数据打乱后(97.5% 分位)
沪深3000.460.07
小盘 − 大盘0.260.08
成长 − 价值0.620.07
港股(盈富基金)0.280.12

打乱后的相关系数几乎是 0,200 次里最大的那 2.5% 也只有 0.07 到 0.12。

表 2 · 三个月前市场在剧烈波动,现在大概率还在剧烈波动;打乱顺序后这种关系消失

四条序列全部远高于打乱后的上限。波动状态是确定存在的:市场会在“平静”和“剧烈”两种状态之间切换,每种状态都会持续好几个月。这也是金融时间序列里最稳健的经验事实之一,Ang 和 Bekaert 在国际股市里观察到的“高波动、高相关”的熊市状态3,说的也是这件事。

证据二:趋势在某些尺度上会持续

第二种持续性是方向。用来衡量它的工具叫方差比(variance ratio):把 q 天的累计收益的方差,除以 q 倍的单日收益方差。如果每天的涨跌互不相关,这个比值应该接近 1;大于 1 说明涨了之后还会涨(趋势),小于 1 说明涨了之后会回落(反转)。

方差比 VR(q) · 真实值与打乱后的 95% 范围
序列5 天20 天60 天250 天
沪深3001.03
[0.92, 1.09]
1.03
[0.84, 1.15]
1.38
[0.73, 1.33]
2.19
[0.46, 1.66]
小盘 − 大盘(指数)1.40
[0.93, 1.08]
1.57
[0.85, 1.16]
1.25
[0.71, 1.28]
1.05
[0.45, 1.67]
小盘 − 大盘(ETF,2016 年起)1.02
[0.94, 1.06]
0.98
[0.85, 1.15]
0.88
[0.77, 1.24]
0.57
[0.14, 1.43]
成长 − 价值1.12
[0.92, 1.06]
1.15
[0.86, 1.17]
1.23
[0.74, 1.31]
1.46
[0.46, 1.68]
港股0.92
[0.91, 1.08]
0.78
[0.81, 1.18]
0.66
[0.66, 1.29]
1.28
[0.46, 1.73]

绿色:显著大于打乱后的范围(有趋势);红色:显著小于(有反转)。ETF 一行用 512100 和 510300 的真实价格。250 天一列只有约 20 个不重叠的样本,范围很宽。

表 3 · 沪深300 在季度到年度的尺度上有趋势;大小盘的短期惯性只出现在指数里,换成 ETF 价格就消失了

这张表比表 2 复杂,可以分三点看:

  • 大盘的趋势是长周期的。 沪深300 在 5 天、20 天上和随机游走没有区别,到了 60 天、250 天,方差比明显大于打乱后的上限。也就是说,A 股的“牛市”“熊市”在季度和年度的尺度上是真实存在的,但在几天、几周的尺度上看不出来。
  • 大小盘的短期惯性要打个问号。 用指数算,小盘相对大盘的 5 天、20 天方差比高达 1.40 和 1.57,看起来风格惯性很强;可用两只真实 ETF 的价格算同一个量,结果和随机游走一样。原因是小盘指数里总有一部分成分股成交稀少,收盘价“慢一拍”,第二天才补涨补跌,于是指数收益出现了虚假的正自相关,这是 Lo 和 MacKinlay 讨论过的不同步成交效应4。这里是根据两组数字的差别做的推断,没有逐只检查成分股。
  • 港股的月度节奏相反。 港股 20 天的方差比只有 0.78,低于打乱后的下限,说明在月度尺度上更容易“涨多了就回落”。A 股和港股不能共用一套风格假设。

证据三:不同状态下,市场的样子不一样

如果风格存在,那么在不同的状态里,收益的分布应该明显不同。我们先用一个简单的规则(第二节会详细介绍)把每天分成四种状态,再看各状态下的统计量:

四种状态下的市场特征 · 2005–2026
状态天数沪深300 年化波动小盘 − 大盘(年化)成长 − 价值(年化)
上涨趋势238924.5%−3.7−0.5
下跌趋势172126.5%+1.6−3.4
低波震荡76118.4%+7.6−8.4
高波震荡29534.6%+32.9+10.2

这里用当天的状态描述当天的市场,只用于说明“状态之间不一样”,不能直接用来交易,原因见第四节。

表 4 · 高波震荡里的波动接近低波震荡的两倍,小盘相对大盘年化多涨 33 个点

证据四:趋势段的长度,大部分随机游走也能产生

最后一个检验是一个反面的提醒。用同一套规则,在真实数据和打乱后重建的价格上分别切分状态,比较每种状态平均持续多少天:上涨趋势真实是 109 天,打乱后是 82 天(97.5% 分位 114 天);下跌趋势 64 天对 59 天;低波震荡 22 天对 16 天(97.5% 分位 19 天);高波震荡 15 天对 15 天。

只有低波震荡的持续时间明显长于随机游走。一段看起来很长的“上涨趋势”,随机游走也能走出来。 这提醒我们:肉眼看到的趋势段,不等于可以利用的规律,判断风格是否存在要靠统计检验,不能靠看图。

小结:风格存在,但分层次

把四组证据放在一起,可以得到一个比“有”或“没有”更具体的回答:

  • 波动状态:确定存在,持续数月,A 股和港股都是如此。
  • 大盘的趋势状态:在季度到年度的尺度上存在,在周的尺度上看不出来。
  • 风格分化:幅度很大,大小盘年度收益差的中位数是 12.4 个百分点,近三分之二的年份超过 10 个点;成长价值是 10.4 个点。但大小盘在短期内的“惯性”主要是指数的统计假象。
  • 市场之间:港股在月度尺度上偏反转,和 A 股不同。

既然风格存在,它应该用什么样的形式来描述?

二、市场风格的描述方式

两个层面:市场状态与风格偏好

上一节的证据提示,“风格”至少包含两个层面的东西。

一个是市场状态(regime):整个市场处在什么样的环境里,比如在涨还是在跌,平静还是剧烈。资产配置文献主要研究的是这一层,学术起点是 Hamilton 1989 年的马尔可夫切换模型5:市场在几个看不见的状态之间切换,每个状态下收益的均值和波动不同,我们只能从观察到的价格反推当前处在哪个状态。

另一个是风格偏好:在同一个市场里,哪一类股票占优,比如大盘还是小盘、价值还是成长。A 股卖方报告里的“风格轮动”主要指这一层。

两个层面有关联但不相同。表 4 显示,高波震荡里小盘明显占优,低波震荡里价值相对成长占优,所以市场状态可以作为判断风格偏好的线索之一。

风格的几个性质

从第一节的检验结果,还能读出风格的几个性质,它们直接决定了判定方法该怎么设计:

  1. 潜在的。风格不能直接观察,只能从价格、成交、估值等数据里推断,推断总有误差。
  2. 事后清楚,事前模糊。回头看,2015 年是小盘年一目了然;身在 2015 年 3 月,只能看到最近几周小盘在涨。
  3. 有确定的部分,也有模糊的部分。波动状态的持续性很强,判断出来就比较可靠;趋势方向在短期内接近随机,判断出来也未必延续。
  4. 切换是跳跃的。状态往往在几天之内从一种变成另一种,判定规则既要跟得上切换,又不能被噪声带着来回跳。

一种可操作的定义

按这些性质,我们给市场状态一个简单的定义,用两个维度:

  • 趋势维度:沪深300 的价格和它的 120 日均线。价格在均线上方、而且均线本身在 20 个交易日里抬高了,是上涨趋势;价格在均线下方、均线也在下降,是下跌趋势;其余情况,价格和均线方向不一致,是震荡。
  • 波动维度:只用来细分震荡市。20 日年化波动率高于过去 3 年的中位数,是高波震荡,否则是低波震荡。

为什么趋势市不再按波动细分?因为趋势市里方向已经决定了大部分事情,再分一层,每一格里的样本就太少了。

这样每天得到一个标签:上涨趋势、下跌趋势、低波震荡、高波震荡。第一版跑出来有一个问题:价格在均线附近徘徊时,标签今天是“上涨”,明天是“震荡”,一年要切换 13.5 次。针对“切换是跳跃的”这个性质,我们加了一个确认期:新状态连续出现 5 天才算数。加了以后,一年切换 5.6 次。

沪深300 全收益指数和每天的市场状态(2006–2026) 上半部分是沪深300全收益指数的对数走势,下半部分四行分别标出每一天被判成上涨趋势、下跌趋势、低波震荡、高波震荡的时段;下跌趋势集中在 2008、2011、2016、2018、2022 年的大跌里。 沪深300 全收益指数(对数刻度)与判定出的状态 2000 4000 上涨趋势 下跌趋势 低波震荡 高波震荡 2006 2010 2014 2018 2022 2026 价格在 120 日线下方且均线向下 → 下跌趋势
图 1 · 只用趋势和波动两个维度,2006 年以来的 A 股被切成四种状态;趋势状态平均持续两三个月,震荡状态只有两三周

风格偏好这一层,我们不另外定义标签,而是交给策略工具本身去处理:大小盘轮动、价值成长轮动这类工具,本身就是在跟踪风格偏好。这一点在第四节设计篮子时会具体说明。

这样的定义是不是太简单了?在动手设计之前,先看看市面上的产品和研究是怎么做的。

三、同行的做法

有没有这样的产品

答案是有,而且形态差别很大。我们对照了国内外能找到公开信息的平台、卖方研究和产品。

国内量化平台提供的主要是数据、回测和交易通道。聚宽、米筐、优矿、掘金这类平台不直接判定风格,但米筐的数据接口提供风格因子暴露和因子收益6,可以作为风格判定的输入;BigQuant 的策略模板里有一个“大盘风控”开关:上证指数 5 日跌幅超过 4% 就清仓7;果仁网把大盘择时做成了可配置的独立模块8。“判定状态,再切换策略”这一层,平台上没有现成的模块。

国内卖方和基金做得更深入。国金证券用宏观(长周期)和情绪(短周期)两个维度各训练一个 XGBoost 模型,在沪深300 和中证500 之间轮动,两个信号方向冲突时两边各配一半9;天风证券的择时框架分估值赔率、宏观胜率、资金趋势、拥挤反转四个维度打分10;国联期货按利率、期限利差、信用利差的周期判断大小盘和价值成长11。公募产品里,汇安启程混合用宏观增长、流动性、风险偏好、交易拥挤度四个维度判断大盘还是中小盘占优,再切换下层的量化选股策略12,结构和本文要讨论的方案几乎一样。

海外的代表做法有四种。Two Sigma 用高斯混合模型对 17 个因子的收益聚类,得到危机、平稳、通胀、“如履薄冰”四个状态,输出每个状态的概率13;Kritzman 等人对市场动荡、通胀、增长三个维度各用一个两状态的马尔可夫切换模型14;MSCI 的中国因子模型让因子协方差随市场状态自适应15;iShares 的因子轮动 ETF(DYNF)按经济周期、估值、情绪和因子自身的指标,在几个因子之间轮动16。另一方面,AQR 的研究提醒,因子择时信号常常只是某个已有因子的变形,择时组合应该和静态的多风格组合比较17。

风格判定和策略切换:同行的设计
谁怎么判定可以借鉴局限
国内平台
聚宽、米筐、优矿、掘金不直接判定;米筐提供风格因子暴露和因子收益用风格因子收益的滚动统计当状态输入;A 股、港股分开建模只描述当下,不预测
BigQuant大盘风控:上证 5 日跌超 4% 清仓状态预先算好,交易查表只有两态,阈值是拍的
果仁网可配置的大盘择时模块择时与选股解耦阈值由用户在全历史上挑,易过拟合
国内卖方与基金
国金证券宏观(长周期)和情绪(短周期)各一个 XGBoost,等权打分信号冲突时两边各配一半样本外期较短
天风证券估值赔率、宏观胜率、资金趋势、拥挤反转四维打分加入拥挤度维度权重和阈值也要从历史里挑
国联期货利率、期限利差、信用利差周期用利率和信用利差判断大小盘、价值成长宏观数据频率低、有发布滞后
汇安启程混合四维打分判断大小盘,下层切换选股策略结构和本文几乎一样,已经是公募产品规则不公开,无法复现
海外
Two Sigma高斯混合模型对 17 个因子收益聚 4 类输出概率,按概率混合工具不预测,状态会突跳
Kritzman 等每个维度一个两状态马尔可夫切换模型分维度建模,好解释滤波概率有滞后
MSCI 中国模型风险模型,协方差随状态自适应国企、拥挤度因子商业授权,不给择时建议
iShares DYNF经济周期、估值、情绪、因子自身四类信号长期保持多个因子的分散暴露只覆盖美股
AQR主张谨慎:择时信号常常只是某个已有因子的变形和静态多风格组合比—

天风证券和汇安启程的信息来自转载和媒体报道,没有见到原文。华泰、招商、国信等券商的风格轮动框架没找到公开原文,没有列入。

表 5 · 平台提供数据和通道,“判定状态 → 切换工具”这一层由卖方和基金自己做;概率混合、冲突回中性、保持分散是最常见的三条设计

设计上的共同点和分歧

把这些做法拆开看,一个风格系统要回答四个设计问题,同行在每个问题上的选择各不相同:

  • 输入用什么:价格和波动(BigQuant、果仁、本文)、因子收益(Two Sigma、米筐)、宏观和利率(国联、国金、DYNF)、估值和拥挤度(天风、DYNF)。
  • 用什么方法判定:手写规则、多维打分、统计模型(马尔可夫切换、高斯混合)、机器学习(XGBoost)。
  • 输出是什么:一个确定的标签,或者每个状态的概率。
  • 怎么从状态走到仓位:全仓切换到一个策略,按打分或概率加权,信号冲突时回到中性。

共同点也很清楚:状态由少数几个可解释的维度组成;判定和执行分开;越成熟的做法,越倾向于输出概率、按权重混合,而不是非此即彼地切换。

参照这些做法,我们的方案可以怎么设计?

四、系统设计

设计目标

前三节回答了“风格存在、可以描述、同行在做”。要把策略篮子和市场风格做成一个系统,核心是把两件原本分开的事连起来:判断现在是什么风格,和决定现在用哪些策略、各用多少。连起来以后,还要能回答三个问题:每天的决定是怎么一步步得出来的(可解释);风格变了,下游怎么跟着变(联动);用了一段时间,系统怎么知道自己哪里错了、怎么改(闭环)。

按这三点,系统的设计目标是:

  1. 判定和执行分离。风格识别只输出“现在是什么状态”,不直接决定买什么;策略工具只按自己的规则给出目标权重,不关心现在是什么状态。两者由配置引擎连接,任何一层都可以单独替换。这和 QuantConnect 算法框架把 Alpha、组合构建、风控、执行分成独立模块是同一个思路18,BigQuant 的模板也是先算好状态信号、交易逻辑再查表。
  2. 所有决定都可追溯。每天保存状态记录、所用的映射表版本、每个工具的信号和最终订单,事后能复原任何一天的决策过程。
  3. 只用当时可得的数据。每一层的输入都按“信号时点”对齐,防止回测里出现前视偏差。
  4. 用结果反哺上游。实盘的成交、收益和工具表现定期回写,更新映射表和工具档案。

总体架构

策略篮子与市场风格系统的模块和数据流 左边数据层把行情、估值、利率送进中间的决策链:风格识别引擎输出市场状态和切换事件,配置引擎结合右边策略篮子的工具档案和映射表算出目标权重,经组合风控和执行变成订单;底部的复盘模块把归因、衰减监控和月末重算的映射表回写到配置引擎、策略篮子和识别引擎。 数据层 决策链 · 每个交易日 策略篮子 复盘与回写 · 收盘后 / 月末 指数点位 300 1000 价值 成长 ETF 盘口 510300 512100 … 成交额 · 估值 全A成交额 PE 利率 · 信用利差 月频慢变量 虚线:方案里规划、 本文回测未使用 所有数据按“信号时点 可得”对齐,防前视 风格识别引擎 趋势识别器 价格 vs 120日线 波动识别器 20日波动 vs 3年中位 合成 + 确认期 5 天 状态 · 切换事件 配置引擎 映射表 状态×工具 月末走查更新 选取 / 加权 第 1 名 或 按得分 冲突回中性 · 单工具上限 改进项 组合风控 总仓位 · 单资产上限 回撤熔断 · 流动性 执行 差额 > 5% 才调 · 限价→市价 QMT / PTrade 持有沪深300 持有中证1000 持有红利 持有债券 趋势跟踪 均值回归 波动率目标 港股趋势 大小盘轮动 价值成长轮动 工具档案 规则 · 对应 ETF 单边成本 各状态历史表现 在用 / 观察 / 下线 绩效归因 月末重算映射表 工具健康 执行回报、实盘净值
图 2 · 风格识别、策略配置、风控执行串成一条每日决策链;复盘把归因结果和月末重算的映射表回写到上游,形成闭环

系统由七个模块组成,图 2 中间是每天运行的决策链,右边是策略篮子,底部是复盘与回写:

  • 数据层:提供指数点位、ETF 盘口、成交额、估值,以及规划中的利率、信用利差等月频慢变量。它的关键职责是对齐时点:每条数据都带上“何时可得”,下游只能取信号时点之前可得的值。
  • 风格识别引擎:由几个独立的“识别器”组成,每个识别器负责一个维度,输出这个维度的标签。目前有趋势识别器(价格与 120 日均线、均线斜率)和波动识别器(20 日波动率与过去 3 年中位数)。合成器把各维度的标签组合成市场状态,再经过 5 天确认期,输出两样东西:当前确认的状态,以及“状态是否刚发生切换”的事件。
  • 策略篮子:存放所有策略工具。每个工具实现同一个接口:输入行情,输出它想要的目标权重。每个工具还有一份档案,记录它的规则、对应的 ETF、单边成本、在各状态下的历史表现,以及当前是“在用”“观察”还是“下线”。
  • 配置引擎:连接识别和篮子的枢纽。它持有一张“状态 × 工具”的映射表,表里是每个工具在每种状态下的历史平均收益。每天根据当前状态查表,决定用哪个工具或按什么权重组合几个工具,再把各工具的目标权重加总成组合的目标权重。
  • 组合风控:对目标权重做最后的约束:总仓位、单个资产上限、组合回撤超过阈值时降到中性组合(回撤熔断),以及按 ETF 成交额检查流动性。
  • 执行:把目标权重和现有持仓的差额变成订单。差额小于 5% 不调;先挂限价,14:57 前没成交改市价。执行终端可以是券商的 QMT 或 PTrade,它们只负责下单。
  • 复盘与回写:收盘后对账,记录实际成交价和滑点;做绩效归因,把收益拆成“判定对错”“工具选择”“工具本身”“交易成本”四部分;月末用走查重算映射表并发布新版本,检查工具是否衰减,决定工具的上线和下线。

前后联动

各模块之间按三个节奏联动:

系统的三个运行节奏
节奏触发做什么输出给谁
每个交易日
14:45–14:48定时取实时点位;各识别器出标签;合成状态、判断是否切换;配置引擎查表,汇总各工具目标权重组合风控
14:48–14:57定时风控约束;计算差额;下单,未成交改市价券商终端
收盘后定时对账、记录滑点;保存当天的状态记录、映射表版本、工具信号、订单复盘模块
每月最后一个交易日
收盘后定时用全部历史重算映射表(走查);绩效归因;检查工具衰减和映射是否变化配置引擎(次日生效)、策略篮子档案
按事件或每季度
熔断组合回撤超阈值降到中性组合,等人工复核后恢复组合风控
工具变更新工具提交 / 健康检查不合格新工具先观察一个季度再入篮;不合格的工具降权或下线策略篮子、配置引擎
参数审查每季度审查识别器参数(均线长度、确认期),改动需回测并人工确认风格识别引擎

日频负责“用”,月频负责“学”,事件和季度负责“改”。参数只在季度审查时改,避免一边运行一边按最近的结果调参。

表 6 · 每天收盘前跑一遍决策链;每月末把复盘结果回写成新的映射表;结构性的改动只在事件触发或季度审查时进行

在每日决策链里,上下游之间有几条明确的联动规则:

  • 状态切换是事件。识别引擎确认状态发生变化时,配置引擎重新查表,可能换成另一个工具,这是换手最大的时刻。状态不变的日子,配置引擎沿用原来的工具,组合只会因为工具自己的信号(比如趋势跟踪的均线开关)或仓位漂移而调整。
  • 确认期是识别和配置之间的缓冲。原始标签变了,要连续 5 天才触发切换事件,下游不会被一两天的噪声带着来回换仓。
  • 冲突时回到中性。如果以后加入更多识别器,比如趋势判断为上涨、利率识别器判断为紧缩,两者方向矛盾时,配置引擎不选任何一边,退回十个工具等权的中性组合。这是借鉴国金证券“信号冲突各配一半”的做法。
  • 风控有最终否决权。配置引擎给出的目标权重,风控可以削减但不能放大;回撤熔断触发后,配置引擎的输出暂时不生效。
  • 回写只在月末发生。映射表、工具档案在月中保持不变,当月每天的决定都基于同一个版本,便于事后复盘。

一次完整的状态切换

用一个真实的例子把这些联动串起来。2026 年 10 月 12 日起,沪深300 跌破了 120 日均线,均线也开始向下,原始状态变成“下跌”;到 10 月 16 日,已经连续 5 天,确认期满。

2026 年 10 月 16 日收盘前,一次状态切换在系统里经过的六个对象 状态记录确认从低波震荡切换到下跌趋势,映射表的下跌趋势一列选出港股趋势,港股趋势工具因为盈富基金低于 120 日均线给出持有债券的信号,目标组合从 510300 全仓变成 511010 全仓,风控检查通过后生成一卖一买两笔订单。 2026-10-16 · 14:45 起 状态记录 state 价格 / 120日线 6270 / 7006 均线20日斜率 −0.34% 20日波动 / 中位 13.5% / 14.3% 原始状态 下跌 · 第5天 确认状态 下跌趋势 映射表 · 下跌趋势列 09-30 港股趋势 +11.8 趋势跟踪 +11.0 持有债券 +5.5 价值成长轮动 +5.1 选中 港股趋势 工具信号 · 港股趋势 tool 盈富基金 2800 24.82 120 日均线 25.47 信号 低于均线 工具目标 511010 100% 目标组合 target 当前(10-15) 510300 100% 来源 大小盘轮动选大盘 目标 511010 100% 差额 100% > 5% 组合风控 risk 单工具上限 100%(基础版) 流动性 511010 通过 回撤熔断 未触发 订单 orders 卖 510300 限价 4.236 买 511010 限价 140.972 预计成本 约 7bp 14:57 未成交 改市价 10-12 起原始状态就是“下跌”,确认期等满 5 天,10-16 才触发切换
图 3 · 状态切换事件驱动配置引擎查表、工具给出信号、组合算出差额,最后才落到订单;状态不变的日子,只有工具自己的信号和仓位漂移会触发调仓

这一天,系统依次做了这些事:识别引擎确认状态从低波震荡切换到下跌趋势,发出切换事件;配置引擎查 9 月末发布的映射表,下跌趋势一列里港股趋势的历史收益最高(年化 +11.8%),选中它;港股趋势工具按自己的规则检查盈富基金,24.82 港元低于 120 日均线 25.47,给出“持有债券”的信号;组合层把目标从前一天的 510300(大小盘轮动选的大盘)全仓,改成 511010 全仓,差额 100%;风控检查通过;执行层生成一卖一买两笔订单,预计成本约 7bp。

可以看到,状态切换并不直接决定买什么,它只决定由哪个工具来做决定;具体持有什么,由工具自己的规则给出。这就是“判定和执行分离”在一次切换中的体现。

工具的生命周期

策略篮子不是一成不变的。一个工具要进入篮子,需要满足几条标准:能用日均成交额足够大的 ETF 实现;和已有工具的收益相关性不太高,否则只是重复;在至少一种状态下,历史表现明显好于篮子的平均水平。新工具先进入“观察”状态一个季度,只记录信号、不分配资金。

在用的工具每月做一次健康检查:它在被选中的状态下,实盘表现是否持续低于映射表里的历史值;它依赖的统计规律是否还在(比如大小盘轮动依赖的风格惯性,可以用 ETF 价格的自相关和方差比来监控)。连续不合格的工具先降权,再下线。

系统的骨架就是这样。接下来看每个模块的具体实现,以及实现中的取舍。

五、各模块的实现

风格识别:选哪些指标

第二节的定义只用了趋势和波动两个维度。同行的打分卡往往用上十几个指标,估值、成交额、股债性价比、风格动量都在里面。为了决定加哪些,我们先对常用指标做一次“体检”:每个月末取指标值,和下一个月的收益算秩相关系数(Spearman),共 250 个月。秩相关是 0 表示毫无关系,括号里的 t 值超过 2,大约相当于 5% 的显著性。再把样本切成前后两半,看稳定性。

月末指标与下个月收益的秩相关 · 2006–2026
指标预测什么全期(t 值)2006–20152016–2026
价格 / 120 日均线沪深300+0.10(1.6)+0.20−0.05
过去 60 日涨幅沪深300+0.06(0.9)+0.18−0.15
成交额 20 日 / 250 日沪深300+0.09(1.4)+0.21−0.14
市盈率 5 年分位沪深300−0.02(−0.2)—−0.00
盈利收益率 − 债券涨幅沪深300+0.14(1.8)+0.18+0.12
20 日波动率小盘 − 大盘+0.20(3.1)+0.21+0.05
1000 相对 300 的 20 日涨幅小盘 − 大盘+0.03(0.5)+0.09−0.06
成长相对价值的 20 日涨幅成长 − 价值+0.03(0.5)+0.05+0.02
盈富 / 120 日均线港股−0.04(−0.6)+0.01−0.09

市盈率 2011 年起才有,5 年分位要到 2016 年才算得出来。“盈利收益率 − 债券涨幅”是股债性价比的粗糙代理:没有拿到国债收益率的长序列,用中证全债过去 60 日的涨幅代替利率变化。

表 7 · 波动率对下个月大小盘差的预测最强;趋势、动量、成交额在前十年和后十年的方向相反

这张表和第一节的结论对得上:波动是最可靠的状态变量,20 日波动率是唯一全期显著的指标,高波动之后小盘相对更强(和表 4 一致);趋势、动量、成交额在月度尺度上不稳定,前十年正相关,后十年负相关;估值是慢变量,对下个月几乎没有预测力,更适合用在年度的大类配置上。

据此,识别引擎保留“趋势 × 波动”两个维度:波动维度最可靠;趋势维度在月度上不稳定,但在季度到年度上存在(表 3),120 日均线大致对应半年的尺度。多加几个不稳定的指标,合成权重本身又是一组要从历史里挑出来的参数,这正是多重检验文献警告的情形19。

我们也试了统计模型的路线:对沪深300 的周收益拟合一个两状态的高斯隐马尔可夫模型(HMM),每年年末只用截至当时的数据重新估计,第二年用前向滤波(只用过去的数据)算出处在“好状态”的概率,概率过半就持有沪深300,否则持有债券。2008 年以来,它的年化收益是 −4.2%(按“收益 / 波动”高的算好状态)或 2.9%(按低波动的算好状态),同期 120 日均线择时是 9.2%。原因是 A 股的高波动既出现在大涨里,也出现在大跌里:2008 年初估出来的“好状态”年化收益 134%、波动 32%,其实是 2006–2007 年的高波动牛市,于是 2008 年的高波动大跌也被认成了好状态。只看收益分布的两状态模型,很难把这两种高波动分开。

策略工具篮子

选工具有两条约束:每个工具都要能用场内 ETF 实现,这样才能真正交易,也才能用真实价格检验;工具之间的“好年份”要尽量错开,否则十个工具其实是同一个工具的十个变体。

按这两条,我们选了十个工具,分三类。持有类一直持有某个指数,代表一种风格的底仓;择时类在同一个指数上按信号决定持有还是换成债券,趋势跟踪对应时间序列动量的文献20,和 Faber 的 10 个月均线是同一个思路21,波动率目标来自 Moreira 和 Muir 的研究22;轮动类在两种风格之间二选一,直接跟踪风格偏好。

十个工具:规则和事先认为它适合的市场
工具规则(每天收盘后算)直觉上适合
持有类
持有沪深300一直持有沪深300 全收益指数上涨趋势
持有中证1000一直持有中证1000小盘占优
持有红利一直持有中证红利震荡、防御
持有债券一直持有中证全债下跌趋势
择时类
趋势跟踪沪深300 > 120 日均线 → 持有,否则债券趋势明显的市场
均值回归偏离 20 日均线 < −1.5σ 买入,回到均线卖出低波震荡
波动率目标仓位 = min(1, 15% / 20 日年化波动)高波震荡
港股趋势盈富基金 > 120 日均线 → 持有,否则债券A 股走弱时
轮动类
大小盘轮动过去 20 日沪深300、中证1000 谁强持有谁风格持续的市场
价值成长轮动过去 20 日 300价值、300成长 谁强持有谁风格持续的市场

最后一列是动手之前凭常识写下的,下一小节用数据检验它。

表 8 · 篮子里的工具分持有、择时、轮动三类,每个都能用场内 ETF 实现

映射表:状态与工具的对应

篮子和状态都有了,下一步是确认每个工具在哪种状态下效果最好。回测的约定如下:第 t 天收盘后用截至当天的数据算信号,从第 t+1 天起按新仓位计收益;成本按实际换手乘单边费率扣除,A 股 ETF 不交印花税23,沪深300 按 4bp、中证1000 按 6bp、债券按 3bp,港股 ETF 免印花税24,按 10bp;另设一档约三倍的悲观成本。

把每个工具每天的收益,按“前一天收盘时判定的状态”分组,算年化平均:

每个工具在每种状态下的年化收益 · 2008–2026 · 扣成本
工具上涨趋势
1900 天
下跌趋势
1699 天
低波震荡
670 天
高波震荡
295 天
持有沪深3009.3%−1.7%−5.8%21.2%
持有中证10008.0%0.7%−0.6%59.7%
持有红利11.0%0.6%5.1%26.5%
持有债券3.7%5.7%4.9%7.8%
趋势跟踪10.4%10.8%2.8%19.6%
均值回归−2.8%−2.1%−5.2%30.5%
大小盘轮动21.2%2.1%−2.7%41.1%
价值成长轮动10.6%2.1%−7.8%15.1%
波动率目标8.8%2.9%−5.7%17.0%
港股趋势1.4%10.8%3.4%11.4%

绿色是每一列的最高值。下跌趋势里趋势跟踪仍能赚钱,是因为它的开关比状态标签反应快:状态还是“下跌”时,价格可能已经站回均线上方。

表 9 · 上涨趋势里大小盘轮动最好,下跌趋势里趋势跟踪和港股最好,低波震荡里红利最好,高波震荡里持有中证1000 最好

对照表 8 最后一列的直觉,有符合的,也有不符合的。下跌趋势里躲开 A 股、上涨趋势里用进攻性工具,和直觉一致;“低波震荡用均值回归”“高波震荡用波动率目标”这两条直觉,数据并不支持:均值回归在低波震荡里亏得最多,只在高波震荡里赚钱。高波震荡里持有中证1000 的年化高达 59.7%,这种状态多半出现在暴跌之后的反弹段,和表 4 里“高波震荡小盘占优”是同一件事。

做这张表要注意一个细节:必须用“前一天的状态”配“当天的收益”。当天的状态是用当天收盘价算的,当天的收益也取决于当天收盘价,两者天然相关。用当天的状态算,高波震荡里持有沪深300 只有 3.7%,用前一天的状态是 21.2%,差一天,结论就不同。

映射表的更新:走查

表 9 是用 2008 到 2026 年全部数据算的,直接拿它回测,等于 2008 年就看过了 2026 年的答案。配置引擎更新映射表的做法是走查(walk-forward):每个月末只用截至当时的历史,重新算一遍“状态 × 工具”的收益表;下一个月里,每天收盘后判定状态,到表里对应的那一列挑收益最高的工具。表只在月末更新,任何一天的选择都只用到了过去。

走查选工具:月末更新状态×工具表,每天按状态查表 左边是 2026 年 9 月末用 2005 年以来全部历史算出的状态乘工具年化收益表,右边是 10 月 16 日收盘判定为下跌趋势,查表选出下跌趋势这一列最高的港股趋势。 月末更新 · 截至 2026-09-30 的历史 每天查表 · 2026-10-16 年化收益 % 上涨趋势 下跌趋势 低波震荡 高波震荡 持有沪深300 +27.3 -1.7 -1.1 +21.2 持有中证1000 +25.5 +1.4 +6.1 +59.7 持有红利 +29.1 +0.5 +6.1 +26.5 持有债券 +2.9 +5.5 +5.4 +7.8 趋势跟踪 +27.2 +11.0 +2.5 +20.9 大小盘轮动 +40.9 +4.0 +7.8 +43.1 港股趋势 +2.3 +11.8 +5.8 +12.2 另有均值回归、价值成长轮动、波动率目标 3 个工具,略 每格 = 历史上“信号日处于该状态”的那些天, 工具第二天的平均收益(不含成本)×252 表只在月末重算,所以选出的工具不会用到未来 沪深300 6270.45 120日线 7006.16 均线20日斜率 −0.34% 状态 下跌趋势 选中 港股趋势 10-15 还是低波震荡(选大小盘 轮动);新状态连续 5 天才算数, 这里已是第 5 天
图 4 · 走查只用过去:每月末用截至当时的历史重算表,下个月每天收盘后判定状态、查这一列里最好的工具

走查需要热身期来积累第一张表,我们留了 2005 到 2007 年三年,所以后面的检验从 2008 年开始。

走查选出的对应关系很稳定,2010 年以后几乎每个月都是同一张映射:上涨趋势和低波震荡用大小盘轮动,下跌趋势用趋势跟踪(2015 年和 2026 年有几个月换成了港股趋势),高波震荡持有中证1000。工具一年平均切换 4.4 次。2026 年 10 月 16 日收盘,状态刚确认从低波震荡变成下跌趋势,选出的是港股趋势。

作为对照,我们也把凭直觉写的那套对应关系当作一个方案,叫“经验映射”:上涨持有沪深300,下跌持有债券,低波震荡用均值回归,高波震荡用波动率目标。

最小实现

识别引擎和配置引擎的最小实现如下,输入是截至今天的指数点位,MAP 是当前版本的映射表:

Python
import numpy as np, pandas as pd
def regime(c: pd.Series, confirm=5) -> pd.Series:
"""c: 沪深300 每日点位。返回每天的状态,新状态连续 confirm 天才切换。"""
ma = c.rolling(120).mean()
slope = ma / ma.shift(20) - 1
vol = c.pct_change().rolling(20).std() * np.sqrt(252)
hi = vol > vol.rolling(750, min_periods=250).median()
raw = pd.Series(np.where(hi, '高波震荡', '低波震荡'), index=c.index)
raw[(c > ma) & (slope > 0)] = '上涨趋势'
raw[(c < ma) & (slope < 0)] = '下跌趋势'
out, cur, cand, n = [], None, None, 0
for r in raw:
cur = cur or r
if r == cur:
cand, n = None, 0
else:
cand, n = (r, n + 1) if r == cand else (r, 1)
if n >= confirm:
cur, cand, n = r, None, 0
out.append(cur)
return pd.Series(out, index=c.index)
MAP = {'上涨趋势': '大小盘轮动', '低波震荡': '大小盘轮动',
'下跌趋势': '趋势跟踪', '高波震荡': '持有中证1000'} # 每月末用走查重算
def target(hs300: pd.Series, zz1000: pd.Series) -> dict:
tool = MAP[regime(hs300).iloc[-1]]
if tool == '持有中证1000':
return {'512100': 1.0}
if tool == '趋势跟踪':
up = hs300.iloc[-1] > hs300.rolling(120).mean().iloc[-1]
return {'510300': 1.0} if up else {'511010': 1.0}
strong_big = hs300.pct_change(20).iloc[-1] > zz1000.pct_change(20).iloc[-1]
return {'510300': 1.0} if strong_big else {'512100': 1.0}

系统搭起来了,接下来回答另一个问题:这种模式靠不靠谱,能不能真的产生收益?

六、这种模式靠不靠谱

比较对象

检验一个风格切换方案,要和三类基准比:

  1. 持有沪深300,代表不做任何判断。
  2. 十个工具等权,每月再平衡,代表有工具篮子、但不判断风格。AQR 强调择时要和静态的多风格组合比17。
  3. 单一均线择时,它本身就是一个最简单的两状态判定,用来衡量四状态加十个工具多带来了什么。

另外放一个“事后最优映射”作为上限:直接用表 9(含未来)选工具。它和走查的差距,就是“看过答案”的价值。

指数上的结果

2008-01-02 至 2026-10-16 · 指数数据 · 标准成本
方案年化收益最大回撤夏普年换手
按风格切换
走查选最优 1 个11.6%−50%0.6331.8
走查选前 3 个等权5.9%−55%0.4126.5
经验映射5.1%−49%0.398.9
事后最优映射(含未来)16.0%−51%0.8331.0
基准
持有沪深3000.8%−71%0.150
十个工具等权4.8%−50%0.3715.9
单一均线择时9.2%−33%0.6418.7

分时段年化(走查选最优 1 个 / 单一均线 / 持有沪深300):2008–2010 年 18.4% / 19.2% / −15.9%;2011–2015 年 17.7% / 12.5% / 5.9%;2016–2020 年 13.0% / 12.5% / 9.6%;2021–2026 年 2.3% / −1.0% / −1.4%。夏普没有扣无风险利率。2008 年初接近 A 股高点,持有沪深300 的收益因此偏低;从 2006 年起算,它的年化是 10.0%。

表 10 · 走查选工具的方案年化 11.6%,比持有沪深300 高 10.8 个点,比等权高 6.8 个点,比单一均线高 2.4 个点
2008 年以来四种做法的净值(对数刻度,扣标准成本) 走查选工具的组合在 2008 到 2020 年明显跑赢持有沪深300和等权组合,和单一均线择时大体同行;2021 年以后四条线都基本走平。 净值 · 2008-01-02 = 1 · 指数数据 · 标准成本 0.5 1 2 4 8 2008 2011 2014 2017 2020 2023 2026 2021 年起 走查选最优 1 个 7.32 倍 趋势跟踪(120 日线) 4.90 倍 等权全部工具 2.33 倍 持有沪深300 1.15 倍
图 5 · 按状态切换工具的组合将近 19 年跑出 7.3 倍,单一均线择时 4.9 倍,持有沪深300 只有 1.15 倍;但 2021 年以后四条线都差不多走平

为了判断这些差别是不是运气,我们用块自助法(block bootstrap)检验:把两个方案的日收益差切成 20 天一块,有放回地重新抽样 3000 次,看年化超额收益的分布。结果是:

  • 相对持有沪深300,年化超额 +9.4%,95% 区间 [+1.2%, +18.4%],p = 0.012,显著。
  • 相对十个工具等权,+7.2%,p = 0.015,显著。说明“判断风格再选工具”比“有工具但不判断”更好。
  • 相对单一均线,+3.2%,区间 [−3.8%, +10.7%],p = 0.16,夏普相近,不显著。

另外几个方案的结果也能说明一些设计问题:选前 3 个等权只有 5.9%,因为表里排第二、第三的工具和第一名差距很大,平均进来是稀释;经验映射只有 5.1%,说明工具和状态的对应关系要从数据里来;事后最优映射比走查高 4.4 个点,这是直接用全样本统计表回测会高估的部分。

换成可交易的价格

上面用的是指数。第一节已经发现,小盘指数存在不同步成交造成的假惯性,而大小盘轮动正是走查选得最多的工具,所以必须用真实的 ETF 价格再检验一次:信号仍然用指数算(指数点位在收盘前就能看到),收益改用 ETF。512100 在 2016 年 9 月上市,加上均线热身,检验窗口是 2017 年 5 月到 2026 年 10 月。

中证1000 减沪深300 的日收益差:今天和明天的相关系数(滚动 3 年) 用指数算,这个自相关 2008 年约 0.31,之后一路降到 2023 年的 0.03;用两只 ETF 的真实价格算,2019 年以来一直在 0 附近。 一阶自相关 · 滚动 750 个交易日 0.0 0.1 0.2 0.3 2008 2011 2014 2017 2020 2023 2026 指数(中证1000 − 沪深300) ETF(512100 − 510300) 大小盘轮动在指数上赚的钱,主要来自这条线
图 6 · 指数里“小盘今天强、明天还强”的惯性一直在衰减,换成真实 ETF 价格,这股惯性基本不存在
走查选最优 1 个:不同执行假设下的年化超额
假设年化收益相对持有沪深300相对单一均线
指数 · 2008-01 至 2026-10
标准成本,收盘前成交11.6%+9.4%(p 0.01)+3.2%(p 0.16)
第二天收盘才成交8.7%+6.9%(p 0.05)+3.4%(p 0.18)
悲观成本8.3%+6.5%(p 0.06)+1.4%(p 0.29)
真实 ETF · 2017-05 至 2026-10
标准成本,收盘前成交8.9%+4.3%(p 0.14)+5.1%(p 0.07)
第二天收盘才成交8.2%+3.7%(p 0.16)+6.1%(p 0.06)
悲观成本5.2%+0.9%(p 0.39)+3.1%(p 0.18)

p 值是块自助法下“超额 ≤ 0”的比例,通常以 0.05 为界。ETF 窗口里持有沪深300 年化 4.1%,单一均线 4.1%,十个工具等权 5.0%。2021 年以来走查方案的年化是 1.4%。

表 11 · 换成真实 ETF 价格后,超额收益的点估计仍为正(+0.9 到 +6.1 个点),但都没有达到 5% 的显著性

港股

把盈富基金当作“大盘”,用同一套状态定义和工具(持有、趋势跟踪、均值回归、波动率目标、债券)再走查一遍,2011 年以来年化 2.9%,持有盈富基金 3.4%,单一均线 2.8%,相对持有 −1.9%(p = 0.66);最大回撤从 −49% 降到 −23%。这里的避险资产暂时用中证全债代替港元现金,含了汇率和利率的差异,数字只能作为参考。港股月度偏反转的特点(表 3)也意味着,照搬 A 股的趋势型判定未必合适。

检验结论

把三组检验放在一起:

  • 风险控制部分是成立的。 无论指数还是 ETF、A 股还是港股,方案的最大回撤都明显小于持有指数,大约降低一半。这部分主要来自“下跌趋势时离开股票”,对应的是第一节里确定存在的长周期趋势。
  • 收益增强部分在指数上显著,在 ETF 上尚不显著。 相对持有沪深300,指数上年化多 9.4 个点(p = 0.01);换成 ETF 价格,点估计多 0.9 到 4.3 个点,但 p 值在 0.14 以上。差距的一大部分来自指数的不同步成交,这部分在交易中拿不到。
  • 相对单一均线的增量还需要更多证据。 四状态加十个工具,在各种假设下比单一均线多 1.4 到 6.1 个点,都不显著。
  • 近几年的效果弱于早年。 2021 年以来各方案的收益都接近持有债券,图 6 里指数的大小盘自相关也从 0.31 降到了 0.03。

这些结果说明系统里还存在哪些问题?

七、存在的问题与改进

检验中暴露的问题

回顾从设计到检验的过程,有几个问题值得单独记录:

  1. 指数和可交易价格的差别。 这是影响最大的一条。用指数日线回测、日频换手的轮动工具,都需要用真实的 ETF 价格复核。
  2. 起点敏感。 从 2006 年起算,持有沪深300 年化 10.0%,单一均线 17.5%,走查方案因为热身期拿着债券只有 10.5%;从 2008 年起算,排名完全不同。A 股的牛熊集中,报告结果要给多个起点和分时段的数字。
  3. 小样本的格子。 高波震荡总共 295 天,大约 20 段行情,“持有中证1000 年化 59.7%”主要来自其中几次暴跌后的反弹,证据最弱。
  4. 规律在变化。 2016 年以后趋势类指标的月度方向反转(表 7),2021 年以后各方案收益都接近债券。
  5. 多次尝试。 本文跑过二十个左右的变体(确认期、成交时点、成本档位、选几个工具、HMM 的两种排序)。按 Bailey 和 López de Prado 的缩水夏普(DSR)25,20 次尝试对应的最低年化夏普是 0.31。把走查学到的映射压缩成一条规则(沪深300 在 120 日线上方做大小盘轮动,下方持有债券)、每周调仓,指数上的年化夏普 0.65,可以通过这道门槛,DSR 为 0.92;用 ETF 价格算,按成本和成交假设不同,夏普在 0.03 到 0.52 之间。

改进方向

结合这些问题和第三节同行的做法,下一版可以从这几处改:

  1. 回测一律用可交易价格。 ETF 上市以前用指数,但把日频换手的工具改成周频或加一天延迟,压掉不同步成交的影响。
  2. 从“选第一名”改成“按把握加权”。 借鉴 Two Sigma 和国金证券:工具权重和它在当前状态下的历史优势成正比,样本少的格子向全样本平均收缩;两个维度的信号冲突时回到等权组合。
  3. 单个工具设上限。 借鉴 DYNF 长期保持多个因子分散暴露的思路,单个工具不超过 40% 到 50%,用分散换取对判断错误的容忍度。
  4. 补充慢变量维度,按月使用。 利率、信用利差(国联期货的思路)、估值、拥挤度这类慢变量,适合决定月度或年度的大类倾向,不适合决定日频切换。
  5. 把衰减监控做实。 第四节工具生命周期里的月度健康检查,要落实成具体的阈值:比如大小盘 ETF 收益差的方差比连续 6 个月接近 1,就把大小盘轮动降为观察。
  6. A 股和港股分开建模。 港股月度偏反转,成本也更高(个股印花税 0.1%,ETF 免),状态定义和换手频率都要单独设定。

八、小结

  1. 市场风格是否存在? 存在,但分层次。波动状态确定存在,持续数月;大盘趋势在季度到年度的尺度上存在;风格分化幅度大,大小盘年度收益差中位数 12.4 个点;大小盘的短期惯性主要是指数的统计假象;港股在月度上偏反转。
  2. 风格怎么描述? 分市场状态和风格偏好两层。它是潜在的、事后清楚事前模糊、切换跳跃的。本文用趋势 × 波动定义四种市场状态,加 5 天确认期,风格偏好交给轮动类工具跟踪。
  3. 同行有没有、怎么做? 平台提供数据和通道;卖方和基金用多维打分或机器学习判定,公募已有“判定大小盘再切换选股策略”的产品;海外用马尔可夫切换、高斯混合,越成熟的做法越倾向于输出概率、按权重混合。
  4. 系统长什么样? 数据层、风格识别引擎、策略篮子、配置引擎、组合风控、执行、复盘七个模块;识别和执行分离,由配置引擎查“状态 × 工具”映射表连接;每天收盘前跑一遍决策链,状态切换是触发换仓的事件;每月末用走查重算映射表回写,事件和季度审查负责改参数、换工具。
  5. 各模块怎么实现? 识别引擎用最可靠的波动和长周期趋势两个维度;篮子里十个可用 ETF 实现的工具;映射表用前一天的状态统计、月末走查更新。
  6. 靠不靠谱? 风险控制部分成立,最大回撤大约减半;收益增强在指数上显著,在真实 ETF 上点估计为正但尚不显著;相对单一均线的增量需要更多证据;近几年效果减弱。
  7. 还有什么问题、怎么改? 可交易价格回测、按把握加权、冲突回中性、单工具上限、补慢变量、衰减监控、A 股港股分开建模。

本文的数据、脚本和全部中间结果按“下载 → 整理 → 风格检验 → 工具 → 状态 → 走查 → 复核”的顺序分成了几个脚本,换一组指数或一个起点,可以照着重跑一遍。

参考资料

Footnotes

  1. 沪深300、中证1000、中证红利、300价值、300成长、中证全债等全收益指数日线中证指数有限公司 · 2026-10-17csindex.com.cn ↗2005-01-04 至 2026-10-16,用官网行情接口下载。全收益指数含分红再投资(H00300、H00852、H00922、H00919、H00918、H11001 等),沪深300 滚动市盈率 2011-06 起才有。https://www.csindex.com.cn/ ↩

  2. 盈富基金 2800.HK 与 510300、512100、510880、511010 的复权日线Yahoo Finance · 2026-10-17收藏finance.yahoo.com盈富基金 2008-01 起;510300 2012-05 起;512100 2016-09 起。复权价含分红。https://finance.yahoo.com/quote/2800.HK/ ↩

  3. International Asset Allocation With Regime ShiftsAndrew Ang, Geert Bekaert · Review of Financial Studies · 2002收藏doi.org15(4): 1137–1187。存在高波动、高相关的“熊市”状态,这时分散的效果会下降。https://doi.org/10.1093/rfs/15.4.1137 ↩

  4. An econometric analysis of nonsynchronous tradingAndrew W. Lo, A. Craig MacKinlay · Journal of Econometrics · 1990doi.org ↗45(1–2): 181–211。成分股不同步成交会让指数收益出现虚假的正自相关。https://doi.org/10.1016/0304-4076(90)90098-E ↩

  5. A New Approach to the Economic Analysis of Nonstationary Time Series and the Business CycleJames D. Hamilton · Econometrica · 1989收藏doi.org57(2): 357–384。马尔可夫切换模型的起点:经济在几个看不见的状态之间按马尔可夫链切换,用滤波推断每个时点处在哪个状态。https://doi.org/10.2307/1912559 ↩

  6. RQData 风险因子模块米筐 RiceQuant收藏ricequant.comget_factor_exposure、get_factor_return 等接口;另有港股通 HKv1、A+H 的 AHv1 版本。https://www.ricequant.com/doc/rqdata/python/risk-factors-mod ↩

  7. BigQuant 策略模板文档(大盘风控)BigQuant收藏bigquant.com上证指数 5 日收益低于 −4% 时全仓卖出、停止交易。https://bigquant.com/wiki/doc/OCkaNT91EC ↩

  8. 果仁网果仁网收藏guorn.com风控模块支持用大盘指标择时,交易模型支持定期轮动。https://guorn.com/ ↩

  9. 因子风格择时策略(2021 年 11 月期)国金证券 金融产品研究中心 · 2021-11-05收藏pdf.dfcfw.com沪深300 与中证500 轮动:宏观维度和情绪、估值、风险偏好维度各训练一个 XGBoost,等权打分,方向冲突时两边各配一半。https://pdf.dfcfw.com/pdf/H3_AP202111081527725354_1.pdf ↩

  10. 权益观点:高拥挤已明显缓释—金融工程(转载)格隆汇(转载天风证券金工) · 2026-08-02收藏m.gelonghui.com择时框架分估值赔率、宏观胜率、资金趋势、拥挤反转四个维度,每周打分。转载稿,未见原文。https://m.gelonghui.com/p/5943177 ↩

  11. 利率周期、期限利差周期和信用利差周期风格轮动择时策略国联期货研究所 · 2025-01-24收藏pdf.dfcfw.com利率下行偏成长、上行偏价值;信用利差上升偏大盘价值、下降偏小盘成长。https://pdf.dfcfw.com/pdf/H3_AP202501251642551718_1.pdf ↩

  12. 汇安启程混合发行报道界面新闻 · 2026-08收藏jiemian.com上层用宏观增长、流动性、风险偏好、交易拥挤度四个维度判断大盘或中小盘占优,下层按风格配不同的量化选股策略。媒体报道。https://www.jiemian.com/article/14860958.html ↩

  13. A Machine Learning Approach to Regime ModelingAlex Botte, Doris Bao · Two Sigma · 2021-10-06收藏twosigma.com用高斯混合模型对 17 个因子收益聚类,交叉验证选出 4 个状态:Crisis、Steady State、Inflation、Walking on Ice。作者自述模型不做预测,状态会突跳。https://www.twosigma.com/articles/a-machine-learning-approach-to-regime-modeling/ ↩

  14. Regime Shifts: Implications for Dynamic Strategies (corrected)Mark Kritzman, Sébastien Page, David Turkington · Financial Analysts Journal · 2012收藏doi.org68(3): 22–39。对市场动荡、通胀、经济增长三个维度分别用两状态马尔可夫切换模型识别状态,再做动态配置。https://doi.org/10.2469/faj.v68.n3.3 ↩

  15. MSCI China Equity Factor Model FactsheetMSCI收藏msci.com新增国企、拥挤度等因子,因子协方差随市场状态自适应。https://www.msci.com/downloads/web/msci-com/data-and-analytics/factor-investing/equity-factor-models/MSCI%20China%20Equity%20Factor%20Model_Factsheet.pdf ↩

  16. Factor rotationBlackRock iShares收藏blackrock.comDYNF 按经济周期、估值、情绪、因子自身指标四类信号在几个因子之间轮动。https://www.blackrock.com/us/financial-professionals/insights/factor-rotation ↩

  17. Contrarian Factor Timing is Deceptively DifficultClifford Asness, Swati Chandra, Antti Ilmanen, Ronen Israel · The Journal of Portfolio Management · 2017收藏doi.org43(5): 72–87。用估值价差做因子择时,在已经持有价值因子的组合里几乎没有增量,还会削弱分散。https://doi.org/10.3905/jpm.2017.43.5.072 ↩ ↩2

  18. Algorithm Framework OverviewQuantConnect收藏quantconnect.comUniverse Selection → Alpha → Portfolio Construction → Risk Management → Execution 五个模块。https://www.quantconnect.com/docs/v2/writing-algorithms/algorithm-framework/overview ↩

  19. …and the Cross-Section of Expected ReturnsCampbell R. Harvey, Yan Liu, Heqing Zhu · Review of Financial Studies · 2016收藏doi.org29(1): 5–68。考虑多重检验后,新因子的 t 值门槛应在 3.0 以上。https://doi.org/10.1093/rfs/hhv059 ↩

  20. Time series momentumTobias J. Moskowitz, Yao Hua Ooi, Lasse Heje Pedersen · Journal of Financial Economics · 2012收藏doi.org104(2): 228–250。58 个流动性好的期货品种,过去 1–12 个月的收益能预测未来收益。https://doi.org/10.1016/j.jfineco.2011.11.003 ↩

  21. A Quantitative Approach to Tactical Asset AllocationMebane T. Faber · The Journal of Wealth Management · 2007收藏doi.org9(4): 69–79。价格在 10 个月均线上方就持有、否则换现金,用在多类资产上,回撤大幅下降。https://doi.org/10.3905/jwm.2007.674809 ↩

  22. Volatility-Managed PortfoliosAlan Moreira, Tyler Muir · The Journal of Finance · 2017收藏doi.org72(4): 1611–1644。按上期实现波动率的倒数缩放仓位,多个因子的夏普提高。https://doi.org/10.1111/jofi.12513 ↩

  23. 中华人民共和国印花税法国家税务总局法规库 · 2021-06-10收藏fgk.chinatax.gov.cn第三条所称证券交易指股票和以股票为基础的存托凭证,ETF 不在其中;“ETF 免印花税”是据此推出的。https://fgk.chinatax.gov.cn/zcfgk/c100009/c5193058/content.html ↩

  24. Stamp duty waiver for ETFs香港税务局收藏ird.gov.hk2015-02-13 起香港上市 ETF 的买卖免印花税;股票印花税 2023-11-17 起为 0.1%,买卖双方各付。https://www.ird.gov.hk/eng/faq/ETFs.htm ↩

  25. The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting, and Non-NormalityDavid H. Bailey, Marcos López de Prado · The Journal of Portfolio Management · 2014收藏doi.org40(5): 94–107。试过很多策略再挑最好的,夏普会被高估;按尝试次数、收益偏度和峰度做校正。https://doi.org/10.3905/jpm.2014.40.5.094 ↩

延伸阅读