动量指标:RSI 与 KDJ
三句口诀,一句反了、一句弱、一句方向也反
「RSI 超过 70 是超买,该卖了。」
这句话你一定听过。我们用 50 只标的、3167 次信号检验它:
| 持有期 | RSI 上穿 70 后的收益 | 基准 | 差值 | p 值 |
|---|---|---|---|---|
| 10 日 | +1.565% | +0.558% | +1.008pp | 0.0000 |
方向完全反了。RSI 上穿 70 之后,未来收益在全部 6 个持有期上都显著为正——超买之后不是跌,是继续涨。
这一节审判三句口诀,顺便回答一个更基础的问题:你说的 RSI(14),和我说的 RSI(14),是同一个东西吗?
"跑得越快的人越容易摔倒"——听起来很有道理,而且每次真有人摔倒时,这句话都会被再传播一次。
但如果你去数一数:跑得快的人里摔倒的比例,和所有人里摔倒的比例,到底哪个高?
口诀的生命力来自它被记住的次数,不是它被验证的次数。
一、先问一个更基础的问题:你的 RSI 是哪个 RSI
RSI 的原始定义用 Wilder 平滑(等价于 α=1/n 的 EMA)。但很多实现直接用简单移动平均。实测这两种写法的差异:
RSI(14) Wilder 平滑 vs 简单均值:
平均绝对差 6.72 点 | 最大 52.65 点 | 超过 5 点的天数 2275
「上穿 70」的次数:Wilder 54 次 vs 简单均值 144 次(差 90 次)
同一个标的、同一个参数,信号次数差 2.7 倍。
"我用 RSI(14)"这句话,信息量比你以为的小得多。
平均差 6.72 点意味着:一个说"现在 RSI 是 68,还没超买",另一个说"现在 75,已经超买了"——两人看的是同一天的同一只标的。
所以:先说清平滑方式,再谈参数。否则你们讨论的根本不是同一个指标,而这种分歧在聊天里永远暴露不出来——只会在你复现别人的策略、结果对不上时,浪费你两天。
二、口诀一:RSI 上穿 70 = 超买该卖
若口诀成立,信号后收益应显著为负。实测(3167 次信号):
| 持有期 | 信号后均值 | 基准均值 | 差值 | t 值 | p 值 |
|---|---|---|---|---|---|
| 1 日 | +0.250% | +0.055% | +0.195pp | 3.35 | 0.0008 * |
| 3 日 | +0.580% | +0.167% | +0.413pp | 3.93 | 0.0001 * |
| 5 日 | +0.766% | +0.280% | +0.485pp | 3.65 | 0.0003 * |
| 10 日 | +1.565% | +0.558% | +1.008pp | 5.17 | 0.0000 * |
| 20 日 | +2.294% | +1.128% | +1.166pp | 4.21 | 0.0000 * |
| 60 日 | +4.359% | +3.432% | +0.926pp | 2.21 | 0.0272 * |
六个持有期,全部显著,全部为正。
口诀说"超买该卖",数据说"超买之后继续涨"。而且这不是勉强显著——10 日的 t 值 5.17,幅度 +1.008pp,远大于 p2.1 金叉那 8.4bp 的量级。
这个现象在学术上叫动量效应:短中期内,强者恒强。它和"均值回归"的直觉正好相反,而口诀站在了直觉那一边。
🔧 动手做:换一种 RSI 平滑,信号次数从 54 变 144(5 分钟)
跑 python momentum_indicators.py,对比 RSI 的两种平滑:Wilder 平滑 vs 简单均值。
你会看到(实测):两种 RSI 平均绝对差 6.72 点、最大 52.65 点;而"RSI 上穿 70"的信号次数,一种是 54 次、另一种是 144 次——差近 3 倍。
想明白:"RSI 上穿 70 该卖"这句口诀听着确定,但连它触发几次都取决于你用哪种 RSI。指标名一样、口径不同,结论就能差 3 倍。任何基于指标阈值的规则,先问:这个指标是怎么算的?口诀是别人在哪种口径下总结的?
三、口诀二:RSI 下穿 30 = 超卖该买
| 持有期 | 差值 | p 值 |
|---|---|---|
| 1 日 | -0.100pp | 0.0664 |
| 3 日 | +0.050pp | 0.6092 |
| 5 日 | +0.245pp | 0.0400 * |
| 10 日 | +0.420pp | 0.0069 * |
| 20 日 | +0.619pp | 0.0025 * |
| 60 日 | -0.172pp | 0.6329 |
这一条部分成立,但很弱且不稳:1 日甚至是负的(接近显著),3 日不显著,5–20 日显著为正,60 日又转负。
诚实的读法:这不是一个稳定的结论,是一段在中间几个持有期上碰巧显著的曲线。如果一个效应真实存在,它通常不会这样忽正忽负。
四、口诀三:KDJ 的 J 值下穿 0 = 极度超卖
| 持有期 | 差值 | t 值 | p 值 |
|---|---|---|---|
| 1 日 | -0.090pp | -2.92 | 0.0035 * |
| 3 日 | -0.117pp | -2.11 | 0.0351 * |
| 5 日 | -0.041pp | -0.60 | 0.5462 |
| 10 日 | -0.163pp | -1.72 | 0.0857 |
| 20 日 | -0.058pp | -0.44 | 0.6626 |
| 60 日 | -0.018pp | -0.07 | 0.9425 |
口诀说"极度超卖,该反弹"。数据说:短期继续跌(1 日、3 日显著为负),之后归于无。
又是一次方向相反。
五、把三条口诀放在一起看
| 口诀 | 民间说法 | 数据说 |
|---|---|---|
| RSI > 70 | 超买该卖 | 显著继续涨(6/6 显著) |
| RSI < 30 | 超卖该买 | 弱、不稳(1 日反而为负) |
| J < 0 | 极度超卖该反弹 | 短期继续跌 |
三条口诀,两条方向完全相反,一条不稳定。
它们有一个共同的错误来源:都假设价格会向"正常水平"回归。而实测反复指向另一个方向——短中期内,趋势倾向于延续。
这个结论会在下一节被再次印证:布林带的"上轨突破买入"(趋势派)与"上轨超买卖出"(回归派)两种相反解读,数据站在趋势派那边。
而在 p2.5,你会看到这三个"独立"指标其实高度同源——RSI6 与布林带位置的相关系数是 0.942。它们反复给出同一个结论,不是因为互相印证,而是因为它们本来就是同一个东西的不同写法。
别把这一节读成"反着做就能赚钱"。
"RSI 上穿 70 后 10 日 +1.008pp" 是一个统计事实,不是一个可交易策略。中间还隔着:
- 交易成本(p0.2 的死亡线:单边 18.8bp)
- 容量与冲击(P5.7)
- 参数与样本的选择偏差(本节口径固定,但"70"这个阈值本身是口诀给的)
- 多重检验:本节 3 条口诀 × 6 个持有期 = 18 次检验,按 5% 水平纯随机也会出现约 0.9 次"显著"
+1.008pp 的幅度确实大到值得进一步研究,但"值得研究"和"可以拿钱去做"之间,还有 P5 整章的距离。
📌 免责:本课为技术教学,所有统计为历史模拟,不构成投资建议,更不构成任何买卖时机的建议;标的为沪深300 成分股按代码序取样,非精选。
三句口诀的审判结果:
- RSI > 70 该卖 → 实测 6 个持有期全部显著为正,10 日 +1.008pp(t=5.17)。方向反了
- RSI < 30 该买 → 弱且不稳,1 日为负、5–20 日为正、60 日又转负
- J < 0 该反弹 → 短期显著继续跌。方向也反了
加上一条基础纪律:先说清平滑方式,再谈参数——Wilder vs 简单均值,同一标的的"上穿 70"次数差 2.7 倍。
下一节是布林带的对决:同一个"上穿上轨",趋势派说买入、回归派说卖出。两种解读同时流传多年,而它们不可能同时对。数据会给出裁决——而且裁决方向,和这一节完全一致。
🔎 来源与核验· 4 条,点开核对
