MACD 指标完整教学
黄金/死亡交叉的真实用法
MACD(Moving Average Convergence Divergence,指数平滑移动平均线)由 Gerald Appel 在 1979 年发明,是技术分析最经典的趋势追踪指标。 几乎每个人都听过「黄金交叉买、死亡交叉卖」,但单看交叉胜率约 50% — 跟丢硬币差不多。本文讲为什么 + 怎么改进。
1. MACD 是什么?三条线在干嘛
MACD 由三个元素组成:
① MACD 线 = EMA(12) - EMA(26)
两条均线的差值。当短期 EMA 高过长期 EMA → MACD > 0;反之 < 0。 快速反映短期动能 vs 长期动能的关系。
② Signal 线 = EMA(MACD, 9)
MACD 线的 9 期均线,反应慢一些。当作 MACD 线的「平滑参考」。
③ Histogram = MACD - Signal
两条线的差值用直方图呈现。Histogram 为正(绿柱)= MACD 在 Signal 上面 = 多头动能; 反之为负(红柱)= 空头动能。
2. 入门用法:黄金 / 死亡交叉
这是教科书版本:
- 黄金交叉:MACD 线从下往上穿越 Signal 线 → 买
- 死亡交叉:MACD 线从上往下穿越 Signal 线 → 卖
Pine 实作(纯交叉,教学用):
//@version=5
strategy("MACD 纯交叉(教学版)", overlay=true)
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
if (ta.crossover(macdLine, signalLine))
strategy.entry("Long", strategy.long)
if (ta.crossunder(macdLine, signalLine))
strategy.entry("Short", strategy.short)3. 中阶用法:MACD + 零轴过滤
黄金交叉发生在零轴上方(MACD > 0) vs零轴下方(MACD < 0)意义不同:
- 零轴上方的黄金交叉:多头趋势中的回踩买点,胜率高
- 零轴下方的黄金交叉:弱反弹,常常假突破
- 空头交叉同理(零轴下方更可靠)
//@version=5
strategy("MACD + 零轴过滤", overlay=true)
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
// 只接受「零轴上方的多头交叉」+「零轴下方的空头交叉」
longSignal = ta.crossover(macdLine, signalLine) and macdLine > 0
shortSignal = ta.crossunder(macdLine, signalLine) and macdLine < 0
if (longSignal)
strategy.entry("Long", strategy.long)
if (shortSignal)
strategy.entry("Short", strategy.short)4. 进阶用法:MACD 直方图缩放
Histogram 不只是看正负,绝对值大小反映动能强度。 当红柱连续变短(负值缩小) → 空头动能在减弱 → 可能反弹。 这比看交叉早 1-2 根 K 棒。
//@version=5
indicator("Histogram 缩放侦测", overlay=false)
[_, _, hist] = ta.macd(close, 12, 26, 9)
// 连续 3 根红柱越来越短 → 空头动能衰竭
weakening_down = hist < 0 and hist > hist[1] and hist[1] > hist[2] and hist[2] > hist[3]
// 连续 3 根绿柱越来越短 → 多头动能衰竭
weakening_up = hist > 0 and hist < hist[1] and hist[1] < hist[2] and hist[2] < hist[3]
bgcolor(weakening_down ? color.new(color.green, 80) : na, title="多头警示")
bgcolor(weakening_up ? color.new(color.red, 80) : na, title="空头警示")5. 高阶用法:MACD 背离
跟 RSI 一样,MACD 也有背离信号:
- 价格创新高,MACD 没创新高 → 空头背离(看跌)
- 价格创新低,MACD 没创新低 → 多头背离(看涨)
MACD 背离跟 RSI 背离原理一样,但 MACD 的背离通常更早出现(因为 MACD 反应短期动能更敏感)。可以两个都看,互相确认。
ta.pivothigh 和 ta.pivotlow 可以找 局部高低点。比对价格 pivot vs MACD pivot 的方向就能写背离侦测。 TradingView 也有许多现成的「MACD Divergence」公开脚本可以参考。6. MACD 参数可以改吗?
预设 (12, 26, 9) 是 Wilder 当年用日线得出的。在不同市场 / 时间框架, 可以调:
| 情境 | 建议参数 | 理由 |
|---|---|---|
| 标准(传统) | (12, 26, 9) | 通用 |
| 较敏感(短线) | (5, 13, 5) | 捕捉短线转折,杂讯多 |
| 较稳定(中长线) | (19, 39, 9) | 过滤杂讯,但信号慢 |
| 高波动加密永续 | (12, 26, 9) 或 (8, 17, 9) | 标准仍可用,较短款更应对快波动 |
7. 常见错误
❌ 在震荡盘用 MACD
MACD 是趋势追踪指标,震荡盘连续假交叉打脸。 先用 ADX / 波动率指标判断市场状态,趋势盘才用 MACD。
❌ 只用 MACD 不设止损
MACD 给的是进场信号,不是出场保护。 配合 ATR 止损或固定百分比止损是必须的。
❌ 多时间框架不一致
1 小时 MACD 黄金交叉但日线在死亡交叉中 → 逆势进场,胜率低。 先看大时间框架方向再用小时间框架抓进场点。
Get started
把你的策略接上 TradingView webhook,自动下单到 Binance / OKX / Bybit 等 7 家交易所。
免费注册 TVSBot8. 进阶:MACD + RSI 双重确认策略
实战常见组合:MACD 给进场、RSI 过滤趋势方向。
//@version=5
strategy("MACD + RSI 双重确认", overlay=true)
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
rsi = ta.rsi(close, 14)
// 多头:MACD 黄金交叉 + MACD > 0 + RSI > 50
longSignal = ta.crossover(macdLine, signalLine) and macdLine > 0 and rsi > 50
// 空头:MACD 死亡交叉 + MACD < 0 + RSI < 50
shortSignal = ta.crossunder(macdLine, signalLine) and macdLine < 0 and rsi < 50
if (longSignal)
strategy.entry("Long", strategy.long)
if (shortSignal)
strategy.entry("Short", strategy.short)