MACD 背离——顶背离与底背离的识别、计算与实战

一句话:价格和 MACD 走势方向相反,说明动能与价格在"说谎",可能是转折信号。
实证结论:底背离在熊市是可靠的买入信号;顶背离在趋势股上反复失效,不宜用来减仓。

googl_divergence_backtest.png


一、MACD 基础(必须先懂)

背离是在 MACD 图上识别的,先确认 MACD 三条线的含义:

名称 计算方式 图表颜色(通常)
MACD 线 EMA(12) − EMA(26) 蓝色/白色实线
Signal 线 MACD 线的 EMA(9) 橙色/红色实线
Histogram(柱) MACD 线 − Signal 线 绿/红色柱状

背离主要看 MACD 线(或 Histogram)的高点和低点,与价格高低点对比。


二、背离的定义

顶背离(Bearish Divergence)——看跌信号

条件:价格创新高,但 MACD 线未创新高

价格:  [高点①] ─── [高点②]   ← 高点② > 高点①(价格创新高)
MACD:  [高点①] ─── [高点②]   ← MACD② < MACD①(MACD 未创新高)

直观图:
价格   ↗↘↗   ↗↘↗↘↗  ← 第二个山峰更高
MACD   ↗↘↗   ↗↘↗     ← 第二个山峰更低  ← 背离!

含义: 价格虽然涨了,但推动上涨的动能(MACD)在减弱。
就像跑步运动员步伐在加快,但心跳已经跑不上去——速度不可持续。


底背离(Bullish Divergence)——看涨信号

条件:价格创新低,但 MACD 线未创新低

价格:  [低点①] ─── [低点②]   ← 低点② < 低点①(价格创新低)
MACD:  [低点①] ─── [低点②]   ← MACD② > MACD①(MACD 未创新低)

直观图:
价格   ↘↗↘   ↘↗↘↗↘  ← 第二个谷底更低
MACD   ↘↗↘   ↘↗↘     ← 第二个谷底更高  ← 背离!

含义: 价格虽然还在跌,但下跌动能已经在衰减。
就像刹车踩到底,但车速减缓的幅度越来越小——下跌快要停了。


三、手动识别背离的步骤

工具准备


步骤一:在价格图上找"相邻两个同类极值点"

找顶背离:找价格的两个相邻高点(中间有明显回调)

判断标准:
  ✅ 高点之间的回调幅度 > 3%(小噪声不算)
  ✅ 两个高点之间相隔 ≥ 10 个交易日
  ✅ 第二个高点明确高于第一个高点

找底背离:找价格的两个相邻低点(中间有明显反弹)

判断标准:
  ✅ 低点之间的反弹幅度 > 3%
  ✅ 两个低点之间相隔 ≥ 10 个交易日
  ✅ 第二个低点明确低于第一个低点

步骤二:在 MACD 副图上找对应位置的值

📌 用 MACD 线(快线),不用 Histogram(柱)。
Histogram 会受 Signal 线位置影响,会产生误判。


步骤三:比较

类型 价格条件 MACD 条件 结论
顶背离 高点② > 高点① MACD② < MACD① ✅ 背离成立
底背离 低点② < 低点① MACD② > MACD① ✅ 背离成立
无背离 高点② > 高点① MACD② > MACD① ❌ 趋势一致,无背离

具体示例(GOOGL 2022 年底背离)

以 2022 年三次底背离为例:

第一次(3月 → 7月):
  价格低点:3月14日 $124.8 → 7月26日 $104.1(价格更低 ✅)
  MACD:   3月14日 -1.998 → 7月26日 -1.231(MACD 更高 ✅)
  → 底背离成立,加仓信号

第二次(7月 → 11月):
  价格低点:7月26日 $104.1 → 11月3日 $82.7(价格更低 ✅)
  MACD:   7月26日 -1.231 → 11月3日 -3.494
  → MACD 更低 ❌,背离不成立(直接创新低,是真实熊市)
  → 但此时正是绝对底部……(背离的局限性见下文)

第三次(独立低点):
  2022-11-03  $82.7,MACD -3.494
  → 随后反弹,成为整个熊市的最低点

⚠️ 注意:背离的识别需要"事后"确认极值点,实时操作中无法100%确定当前是否是极值
这是所有基于极值点的技术分析方法的共同局限。


四、GOOGL 背离策略回测结果(2022-2026)

检测到的所有信号

底背离(加仓信号)— 共 5 次

日期 价格 MACD 信号质量
2022-03-14 $124.8 -1.998 ✅ 有效,熊市中段
2022-07-26 $104.1 -1.231 ✅ 有效,继续下跌前的反弹
2022-11-03 $82.7 -3.494 绝对大底,完美信号
2024-09-10 $147.7 -4.618 ✅ 有效,随后涨至 $200+
2026-07-23 $317.7 -6.312 待验证

顶背离(减仓信号)— 共 11 次

日期 价格 之后走势 信号质量
2023-07-31 $131.6 调整后涨至 $200+ ❌ 过早
2023-09-18 $137.0 短跌后继续上涨 ❌ 过早
2023-10-11 $139.3 涨至 $200+ ❌ 过早
2024-04-26 $170.4 涨至 $200 ❌ 过早
2024-07-10 $189.7 跌后涨至 $350+ ❌ 过早
2025-01-06 $195.8 跌后涨至 $390+ ❌ 过早
2025-02-04 $205.3 跌至 $145,短期对 ⚠️ 部分对
2025-07-03 $179.0 涨至 $390+ ❌ 过早
2025-10-20 $256.0 涨至 $390+ ❌ 过早
2026-01-13 $335.5 跌后涨回 $390 ❌ 过早
2026-02-02 $343.2 跌至 $270,后涨回 ⚠️ 部分对

策略对比

策略 最终资产 总收益 最大回撤 加仓 减仓
⑦ RSI买+MA50偏离+20%卖(推荐) $246,310 +146.3% -41.9% 34 7
纯背离 $198,328 +98.3% -38.1% 5 11
⑨ 底背离或RSI买+顶背离卖 $237,610 +137.6% -42.1% 39 11
🟠 Buy & Hold $240,681 +140.7% -43.6%

五、为什么顶背离在趋势股上连续失效

顶背离的逻辑是"动能减弱 → 价格即将反转"。但在趋势股上,这个逻辑有个致命漏洞:

趋势股上涨的节奏是"加速 → 减速 → 加速 → 减速"的波浪,
而不是"加速 → 减速 → 停止"。

每一次减速(MACD 动能降低)都触发顶背离,
但随后价格重新加速,继续创新高。

11次顶背离中,有9次事后看是中途调整,不是见顶。

汽车比喻:

顶背离 = "油门踩浅了" = "可能要停车"
趋势股上 = 司机只是在换挡,不是真的要停
每次换挡你都下车,结果车没停,你在路边等


六、使用建议

✅ 底背离——推荐用于加仓判断

适合场景:

配合信号(提高可靠性):

最佳用法:
  价格创新低 + MACD 未创新低 + RSI < 30
  → 三重确认,分批加入浮动仓

❌ 顶背离——不推荐用于趋势股减仓

顶背离有效的场景(有限):

对于趋势成长股(GOOGL/NVDA 等):


七、编程实现(Python)

import numpy as np
from scipy.signal import find_peaks

def mark_divergence(df, prom=4.0, dist=12):
    """
    df 需包含 'Close'(收盘价)和 'MACD'(MACD线)两列
    prom  : 峰值突出度,过滤小噪声(单位:价格点数)
    dist  : 相邻两峰最小间距(交易日数)
    返回  : 带 'top_div' 和 'bot_div' 布尔列的 DataFrame
    """
    price = df["Close"].values
    macd  = df["MACD"].values

    # 找价格高点和低点
    peaks,   _ = find_peaks( price, prominence=prom, distance=dist)
    troughs, _ = find_peaks(-price, prominence=prom, distance=dist)

    top_div = np.zeros(len(df), dtype=bool)
    bot_div = np.zeros(len(df), dtype=bool)

    # 顶背离:价格创新高,MACD 未创新高
    for k in range(1, len(peaks)):
        i, j = peaks[k-1], peaks[k]
        if price[j] > price[i] and macd[j] < macd[i]:
            top_div[j] = True

    # 底背离:价格创新低,MACD 未创新低
    for k in range(1, len(troughs)):
        i, j = troughs[k-1], troughs[k]
        if price[j] < price[i] and macd[j] > macd[i]:
            bot_div[j] = True

    df = df.copy()
    df["top_div"] = top_div
    df["bot_div"] = bot_div
    return df

参数调节指南:

参数 效果 建议值
prom 增大 只保留大波动的极值,信号更少但更可靠 日线用 3.0~5.0
prom 减小 捕捉小波动,信号更多但噪声更多 ≥ 1.5
dist 增大 两次信号间隔更长,减少密集误报 日线用 10~15
dist 减小 反应更快,但可能在同一行情触发多次 ≥ 5

八、核心教训

背离是"动能衰减"的信号,不是"价格反转"的保证。

底背离在下跌趋势末期非常可靠:下跌动能衰减 = 真实底部临近。
顶背离在上涨趋势中反复失效:上涨动能减速 ≠ 趋势结束,只是换挡。

用背离做加仓判断(买),用 MA 偏离做减仓判断(卖)。
两种工具各司其职,不要混用。


See Also

Sources