跳转至

⚠️ 免责声明:本章仅为教育与研究方法展示,不构成任何投资建议。 所有回测结果来自历史数据,不代表未来表现。投资有风险,决策需独立判断。

第十一课:新旧强弱势——跃升等级的秘密

本章代码:code/lesson11_strong_weak.py 运行方式:python lesson11_strong_weak.py

11.0 策略概述

这是什么策略

动量策略(第九课)只问"涨了还是跌了"——一个二进制问题。

强弱势策略问的是:"涨了多少个标准差?" 用一个 -4 到 +4 的跃升等级来量化涨跌的强度。

+4:涨幅排全历史前 5% → 极强 0:涨幅在历史中位 → 正常 -4:涨幅排全历史后 5% → 极弱

新旧策略的区别

原始 notebook(Notebooks 7—10)里叫"旧策略":只在极端跳级(-4, -3, +3, +4)时进场。信号稀疏,持有时间短。

后面的 notebook(13—16)做了"新策略":加入中等跳级(-2, +2),信号频率从 33% 提升到 66%。更重要的是——新策略把跃升等级用在股指期货上,可以做空而不仅仅是做多。


11.1 核心代码

# Step 1: 计算 5 日动量
mom5 = [np.prod(1+daily[max(0,i-5):i])-1 for i in range(5, len(daily))]

# Step 2: 按分位数分成 8 个跃升等级 (-4 到 +4)
percentiles = np.percentile(mom5, [5,15,30,50,70,85,95])
levels = np.digitize(mom5, percentiles) - 4

# Step 3: 旧策略——只捕捉极端
old_signal_levels = {-4, -3, 3, 4}
old_signal = [1 if l in old_signal_levels else 0 for l in levels]

# Step 4: 新策略——加入中等信号
new_signal_levels = {-4, -3, -2, 2, 3, 4}
new_signal = [1 if l in new_signal_levels else 0 for l in levels]

11.2 用真实数据跑一遍

CSI300,30 年数据:

跳级分布:-4:154, -3:307, -2:461, -1:615, 0:615, +1:461, +2:307, +3:154
→ 完美对称——极端跳级(±3、±4)确实罕见

旧策略(只看极端档):年化 6.0%,持仓 33%,净值 3.99x
新策略(宽捕捉):年化 6.8%,持仓 67%,净值 4.72x
买入持有:年化 5.6%,净值 3.62x

新策略比旧策略好(年化 +0.8%),两者都跑赢买入持有(+0.4% 和 +1.2%)——但在 30 年尺度上,这点优势可能只是运气。

图 11-1:新旧策略对比。 上排:净值曲线——新策略(蓝线)高于旧策略(红线),但都低于买入持有(灰线)。下排:信号密度——新策略的绿色填充区间明显更密集。跳级持续性分析:-1→-1(38%)说明跳级有温和的持续性,但不够强,无法构成可靠信号。

图 11-1

跳级持续性

-1 → -1: 261 次 (38%) → 今天的跳级明天有 38% 的概率不变
0 → 0: 255 次 (38%) → 同上
-2 → -2: 190 次 (36%) → 持续性在减弱

38% 的持续性不够强——这意味着 62% 的情况下,跳级会在一天内改变。信号太不稳定,无法用于实际交易。


11.3 这一课教了你什么

  1. 跃升等级 = 动量强度的量化——从"涨了没"升级到"涨了多强"。
  2. 新策略(加入中等跳级)比旧策略(只看极端)年化高 0.8%,两者都只是勉强跑赢买入持有。
  3. 但两者都跑输买入持有——在 CSI300 上,强弱势策略的 alpha 已经被挤光。
  4. 跳级持续性只有 38%——信号太不稳定,不适合直接交易。
  5. 强弱势策略的真正价值在"识别极端状态"——跳级 ±4 时,意味着市场处于统计上的极端,应该引起注意而不是自动下单。

11.4 课堂问答

问:新旧强弱势策略都跑输买入持有——那为什么还要讲这一课?

因为跃升等级的价值不在"直接交易"。当跳级到达 -4 或 +4 时,意味着市场处于统计上的极端状态——这个信息可以作为你的 11 个决策框架的输入。比如:跳级 -4 + 接盘论评分 > 7 → 双重确认市场恐慌 → 大幅减仓。跳级 +4 + GOR 方向确认 → 加仓信号。跃升等级是"传感器",不是"自动驾驶"。

问:这些 notebook 的作者花了几十个小时跑出来的结果——真的需要那么长时间吗?

不需要。本仓库 11 个脚本每个跑完只要几秒钟——蒙特卡洛 100 万条路径也就 30 秒。真正花时间的是三件事:从 Wind 终端导出和清洗数据(半天)、设计策略逻辑(思考时间)、反复调参数试错(试 10-20 组参数)。如果你有现成数据,全部从头跑一遍,10 分钟以内完成。我之前说"几十个小时"是夸大了——写书的时候我纠正了这个错误。——跳级 ±4 时,意味着市场处于统计上的极端,应该引起注意而不是自动下单。


动手练习(第 11 课)

  1. 入门:改持有周期。把 HOLD 从 3 改成 1、5、10,新旧策略的年化怎么变? 3 天持有是最优的吗,还是只是"恰好"?
  2. 进阶:改档位数。把 9 档(-4..+4)改成 5 档(-2..+2)和 17 档(-8..+8), 信号变稳定了还是变吵了?档位数和信号质量之间是什么关系?
  3. 挑战:离散化迁移。跃升等级 = 把连续信号切成离散等级。 你行业里有适合这么做的连续指标吗?(信用评分、风控阈值、生产告警、招聘评分) 设计一个:切几档?阈值怎么定?怎么检验它有用?

终章预告: 11 课学完了。现在可以做总结:哪个策略最好?哪个最差?为什么 +44.5% 会变成 -7.5%?如何把学到的思维框架迁移到真正的投资中?