4. 动量类指标:RSI、KDJ、MACD的原理与实战用法

动量类指标,说白了就是帮我们判断「这股劲儿还能不能持续」。我刚开始做量化那会儿,总觉得指标越多越好,后来发现——真正好用的,就那么几个。

今天聊的三个指标:RSI、KDJ、MACD,是动量择时的核心。它们各有脾气,但组合起来用,效果往往出奇的好。

4.1 相对强弱指标(RSI)

RSI衡量的是「涨跌的力度对比」。它不关心价格本身,只关心最近一段时间里,上涨和下跌谁更强势。

计算公式(简化版)

RSI = 100 - [100 / (1 + RS)]
其中 RS = 平均上涨幅度 / 平均下跌幅度

嗯,公式看着有点绕。但你记住一句话就行:RSI超过70算超买,低于30算超卖

核心用法

  • RSI > 70:市场过热,考虑卖出或减仓
  • RSI < 30:市场过冷,考虑买入或加仓
  • RSI在50附近:多空平衡,观望为主

我在项目中遇到过一个问题:ETF在单边上涨行情里,RSI经常在70以上待很久。如果你一看到70就卖,很容易踏空。所以我个人的习惯是——结合趋势线来用。上升趋势中,RSI到80以上才考虑减仓;下降趋势中,RSI到20以下才考虑抄底。

避坑指南:我曾经在震荡市里用RSI做反向交易,效果很好。但一到趋势行情,RSI就频繁发出假信号。后来我加了一条规则:先判断趋势,再用RSI找买卖点。顺序不能反。

4.2 随机指标(KDJ)

KDJ比RSI更敏感。它不光看收盘价,还看最近的高点和低点。说白了,就是看当前价格在最近波动区间里的「位置」。

三条线的关系

  • K线:快速线,反应灵敏
  • D线:慢速线,K线的移动平均
  • J线:方向线,K与D的差值放大版

你想想看,KDJ最经典的用法是什么?金叉死叉。

实战规则

  • K线上穿D线(金叉):买入信号
  • K线下穿D线(死叉):卖出信号
  • J线超过100:超买,警惕回调
  • J线低于0:超卖,可能反弹

我记得有一次做ETF回测,发现KDJ在震荡市里准确率很高,但在单边行情里经常被「钝化」。什么叫钝化?就是价格一直涨,KDJ却一直在高位钝着不动,金叉死叉频繁切换,全是假信号。

怎么解决?我的做法是:给KDJ加一个「过滤条件」。比如,只在大盘指数(如沪深300)的20日均线向上时,才用KDJ的金叉做多。均线向下时,KDJ的信号直接忽略。

注意:KDJ的参数默认是9,3,3。我个人习惯在ETF上把周期调大一点,比如改成14,3,3。这样信号少一些,但胜率更高。你可以在回测里试试看。

4.3 MACD指标

MACD是我最常用的趋势类动量指标。它不告诉你「超买超卖」,而是告诉你「趋势的强弱和转折」。

三个组成部分

  • DIF线:快线,12日EMA - 26日EMA
  • DEA线:慢线,DIF的9日EMA
  • MACD柱:DIF - DEA,红绿柱

说白了,MACD就是看两条均线的「距离」在变大还是变小。距离拉大,趋势强;距离缩小,趋势弱。

核心用法

  1. 金叉/死叉:DIF上穿DEA为金叉(买入),下穿为死叉(卖出)
  2. 零轴位置:零轴上方为多头市场,下方为空头市场
  3. 背离:价格创新高但MACD没创新高——顶背离,看跌;价格创新低但MACD没创新低——底背离,看涨

我个人觉得,MACD最值钱的地方就是「背离」。为什么?因为背离是趋势衰竭的前兆。我在做ETF择时系统时,把MACD底背离作为「加仓信号」之一,效果比单纯的金叉好很多。

实战技巧:我曾经在回测中发现,MACD在日线级别上的金叉死叉,滞后性比较明显。后来我改用「MACD柱的变向」来做短线信号——红柱开始缩短时减仓,绿柱开始缩短时加仓。虽然信号多了点,但反应快了不少。

4.4 三个指标的协同用法

单独用任何一个指标,都有缺陷。但组合起来,就能互相弥补。

我常用的一个组合策略:

信号 RSI KDJ MACD
买入 低于30 金叉 零轴下方金叉或底背离
卖出 高于70 死叉 零轴上方死叉或顶背离
持仓 30-70之间 K线在D线上方 DIF在DEA上方

你想想看,三个指标同时发出买入信号的概率有多大?不大。但一旦出现,胜率往往很高。我习惯用「2/3原则」——三个指标里至少两个发出同向信号,我才动手。

代码示例(Python)

import pandas as pd
import talib

# 计算三个指标
df['RSI'] = talib.RSI(df['close'], timeperiod=14)
df['K'], df['D'] = talib.STOCH(df['high'], df['low'], df['close'],
                                fastk_period=9, slowk_period=3, slowd_period=3)
df['MACD'], df['MACD_signal'], df['MACD_hist'] = talib.MACD(df['close'],
                                                             fastperiod=12, slowperiod=26, signalperiod=9)

# 组合信号
df['buy_signal'] = (df['RSI'] < 30) & (df['K'] > df['D']) & (df['MACD'] > df['MACD_signal'])
df['sell_signal'] = (df['RSI'] > 70) & (df['K'] < df['D']) & (df['MACD'] < df['MACD_signal'])

重要提醒:指标组合不是越多越好。三个指标已经够用了。再加第四个、第五个,反而容易陷入「信号冲突」的泥潭。记住一句话:简单的东西,往往最可靠。

4.5 知识体系总览

下面这张图,是我自己整理的这个章节的核心逻辑。你可以把它当作一个「速查地图」:

动量类指标知识体系 RSI 超买超卖判断 KDJ 金叉死叉 + 钝化 MACD 趋势 + 背离 协同用法:2/3原则 + 趋势过滤 至少两个指标同向才操作 实战要点 • 趋势优先,指标辅助 • 参数可调,回测验证 常见陷阱 • 钝化时盲目反向 • 指标堆砌过度拟合 核心:动量择时 = 趋势判断 + 超买超卖 + 背离识别

嗯,这张图基本把这一章的核心逻辑串起来了。你写代码的时候,可以对照着看,思路会清晰很多。


公众号:蓝海资料掘金营,微信deep3321