跳转到内容

市场环境与自适应门禁

第 13 章用分散化对付了个股风险,但留了一类它管不了的东西:全市场一起跌。第 13 章的坑清单里叫「相关性归一」——系统性危机来临时,所有风险资产的相关系数瞬间飙到 0.9,你分散得再好也是一起下水。有没有办法在坏时光到来之前把仓位降下来?

注意,这不是要你预测顶底——那是玄学。这一章的思路朴素得多:不预测,只识别。市场当前处于什么环境,是可以观测、可以写成规则、可以检验的;识别出弱势环境就少做或不做,识别回强势再做。这个外层的主开关,叫门禁(Gating)。

先把这个行业里流传最广的幻想拆掉。有没有一组参数,在单边牛市、阴跌熊市、高波震荡里都能赚钱?

回看第二编就知道答案:趋势策略(第 8 章)靠「突破后跟进」赚钱,震荡市里突破全是假的,它被反复打脸;均值回复(第 9 章)正好反过来,震荡市是它的主场,单边趋势里它一路逆势抄底、一路被套。同一类行情,一个策略的粮食是另一个策略的毒药。把双均线跑在「趋势+震荡」混合的行情上,样本内勉强为正的净值,其实是趋势段赚的钱在给震荡段的亏损填坑——你得到的是一个「平均而言不亏」的策略,而不是一个「随时都懂行情」的策略。

面对这个事实只有两条路:一是造一个能自动适应所有环境的更聪明的策略(这条路极难,而且极易过拟合);二是承认环境的存在,给策略加一个外层开关:环境对路才营业,环境不对路就歇业。本章讲第二条路,因为它简单、可检验、而且效果惊人。

环境必须用可观测的变量来刻画——任何依赖「我感觉要变盘」的判定都不可回测。最常用的一个叫市场宽度(breadth):

Bt=当日收盘价>20 日均线的股票数全市场股票数B_t = \frac{\text{当日收盘价} > \text{20 日均线的股票数}}{\text{全市场股票数}}

人话解释:全市场有几成股票还站在多头结构里。BtB_t 接近 1,普涨格局;接近 0,泥沙俱下;在 0.5 附近拉锯,分化震荡。它是比大盘指数更诚实的体温计——指数被权重股绑架,宽度不会。

有了变量,环境判定就是一条写死的规则:

  • Bt≥0.5B_t \geq 0.5:RiskOn(进攻环境),策略正常营业;
  • 连续 2 日 Bt<0.5B_t < 0.5:RiskOff(防守环境),策略歇业,不开新仓。

为什么要「连续 2 日」而不是当日跌破当日就切?因为宽度在 0.5 附近会来回穿越——单日阈值的门禁会像接触不良的灯管一样疯狂开关,每次开关都是一次交易成本和一次被反复打脸的机会。滞回(hysteresis,多确认一天再动作)用一点反应速度换稳定,这笔交易永远划算。这与上一章的马尔可夫视角一脉相承:环境的自转移概率很高(不会天天翻转),所以「晚一拍」损失很小,「抖动」损失很大。

最后一条纪律先立好:阈值 0.5 和宽度的定义必须在回测之前写死。门禁也是规则,也会过拟合——把 0.4、0.45、0.5、0.55 都试一遍挑最好的,就是第 6 章的参数网格换了件衣服。

用一个 12 天的迷你样本把整套机制算一遍。下表每行依次是:宽度、按滞回规则判定的环境、某多头倾向策略的当日收益、门禁后的当日收益(RiskOff 日空仓记 0):

日宽度环境策略收益门禁后
10.62RiskOn+1.2%+1.2%
20.65RiskOn+0.8%+0.8%
30.70RiskOn−0.5%−0.5%
40.55RiskOn+2.0%+2.0%
50.48RiskOn(跌破第 1 日,不切换)−1.8%−1.8%
60.42RiskOff−2.2%0
70.38RiskOff−1.5%0
80.35RiskOff−0.9%0
90.44RiskOff+1.1%0
100.52RiskOn+0.6%+0.6%
110.58RiskOn+1.4%+1.4%
120.61RiskOn+0.9%+0.9%

无门禁:累计收益 +1.2+0.8−0.5+2.0−1.8−2.2−1.5−0.9+1.1+0.6+1.4+0.9 = +1.1%。途中从第 4 天的高点 +3.5% 一路跌到第 8 天的 −2.9%,回撤 6.4 个百分点。

有门禁:只吃 RiskOn 日的收益,累计 = +1.2+0.8−0.5+2.0−1.8+0.6+1.4+0.9 = +4.6%,最大回撤只剩 +3.5% → +1.7% 的 1.8 个百分点。

注意这 12 天里策略一个字没改——同一组参数、同一套信号,唯一的变化是弱势时段空仓。收益翻了四倍、回撤砍掉七成,全部来自一个二值的开关。也要诚实地看到代价:第 9 天策略赚 +1.1%,门禁把它放弃了(歇业期间的反弹一天都不参与);第 5 天跌 −1.8% 门禁没能躲掉(滞回还在确认中)。门禁是保险,不是预言。

(当然,这 12 天是精心构造的教学数字。真实数据上门禁不会每回都这么灵,下面的坑清单里有它失手的样子。)

把同样的机制跑在本章的合成演示上(门禁演示:250 日合成数据。隐藏环境(强/弱两状态,日切换概率 5%)驱动市场宽度(AR(1),强锚 0.62 / 弱锚 0.34)。门禁规则只用可观测宽度:≥ 0.5 为 RiskOn,连续 2 日 < 0.5 切 RiskOff(2 日滞回防抖)。策略日收益:强环境 N(0.17%, 1.2%)、弱环境 N(−0.22%, 1.4%)(多头倾向策略在弱市阴跌)。gateRule 与 regime 判定只用当日及之前宽度,无前视;门禁后 RiskOff 日空仓(收益 0))。上图是同一策略的两条净值曲线,下图是市场宽度与门禁阈值,浅红色背景是门禁判定为 RiskOff 的区间(由宽度序列按滞回规则逐日算出,只用当日及之前的数据,无前视):

先看数据成色:这段行情由一个隐藏的强/弱两态过程驱动(日切换概率 5%),其中弱势日共 117 天,策略在强势日的日均收益 0.144%、弱势日 -0.185%——一个典型的「多头倾向、弱市阴跌」的策略。门禁从可观测的宽度里恢复出隐藏环境,判定准确率 0.836,实际歇业 108 天;其中 25 个弱日因为宽度确认得慢仍被持有(滞回的代价),另有 16 个强日被误关在门外——晚一拍的账单,两头都有。

对照读图:

指标无门禁有门禁
累计收益-4.9%2.7%
年化收益-4.9%2.7%
最大回撤−20.7%−12.4%
夏普比率-0.220.15

灰色净值在每段浅红背景里阴跌下台阶,红色净值同期基本走平(空仓)——同一个亏损的策略,只是不在弱市营业,就翻转了盈亏符号:累计收益从 -4.9% 变成 2.7%,最大回撤从 −20.7% 压到 −12.4%,夏普从 -0.22 翻到 0.15。策略本身一行代码没动。这就是门禁最可靠的收益不是「多赚」,而是「不亏在错误的时间」:它把策略的亏损集中区(弱市)整段剪掉,剩下的净值曲线自然平滑。

也要看到另一面:被关在门外的 16 个强日、和没躲掉的 25 个弱日,就是「晚一拍」的全部代价。如果策略在弱市的期望只是「差一点」而不是明显为负,这些代价会吃掉更多改善,门禁就变成「降低收益、只换回撤」的保险——值不值取决于你更恨回撤还是更恨踏空。先想清楚你要什么,再决定装不装门禁。

三个容易混淆的东西划清界限:

  • 门禁 ≠ 调参:门禁不碰策略的任何参数。均线还是那对均线,因子还是那个因子。它是套在策略外面的主开关,作用于「要不要暴露」而不是「怎么交易」。
  • 门禁 ≠ 预测:门禁只观测和跟随当前环境,不猜顶底。它永远晚一拍(滞回的设计主动承认了这一点),因此躲不过 V 型反转的第一段——空仓踏空是它的固定成本。
  • 门禁 ≠ 免检:门禁规则(宽度定义、阈值、滞回天数)同样是在历史数据上看出来的,同样要过第 6 章的样本外封条。「策略过了检验,再顺手加个门禁」而门禁本身没检验过,等于给保险柜配了把没验过的锁。
输入:市场宽度序列 B[1..n]、阈值 T = 0.5、滞回天数 H = 2
策略信号与回测引擎(第 4 章)
输出:门禁前后的两套净值与指标(同表对照报告)
第一步:环境判定(每个交易日收盘后,只用当日及之前的宽度)
state = RiskOn(初始),below = 0
对 t 从 1 到 n:
若 state = RiskOn:
若 B[t] < T:below += 1;若 below ≥ H:state = RiskOff
否则:below = 0 // 重置连续跌破计数
否则(RiskOff):
若 B[t] ≥ T:state = RiskOn
regime[t] = state
第二步:门控执行
对 t 从 1 到 n:
若 regime[t] = RiskOn:按策略信号正常交易
否则:不开新仓;已有持仓按策略自身退出规则处理
第三步:对照报告
同一时段输出两组净值:无门禁 vs 门禁后
收益、回撤、夏普同表报告,包括门禁变差的方向
(门禁让收益变低也要写——那是保险费,不是失败)
  1. 阈值是试出来的。0.5 不好使就试 0.45、0.4,挑出回撤最漂亮的那档——门禁的参数网格和第 6 章的均线网格是同一种病。宽度定义(20 日均线还是 60 日)、阈值、滞回天数,全部预先写死。
  2. 门禁信号用了未来数据。宽度用当日收盘价算,当日收盘就切换状态、当日收盘价成交——未来函数的马甲。环境判定必须收盘后做、次日生效。
  3. 把门禁当圣杯。门禁降低弱市暴露,代价是踏空 V 型反转的第一波(空仓时市场已经开始涨了,宽度回升到阈值之上才会重新营业)。滞回越深、越稳,错过的第一段就越长。没有免费午餐,只有明码标价的保险。
  4. 门禁与策略分开检验。最隐蔽的坑:策略单独过了样本外,门禁是后来「顺手加上」的,没进封条流程。正确的做法是把「策略 + 门禁」当成一个整体策略,一起过样本外——门禁改变了交易的时点分布,两者的组合是新产品,不是旧产品的附件。

门禁解决了「什么时候不做」。还剩一个同样值钱的问题:做的时候,买谁? 当特征从一条动量变成几十条,怎么把它们合成一个排序——以及为什么排序排得再准,也可能赚不到钱。下一章讲当代选股研究的核心工具和它最著名的陷阱。