업데이트: 2026년 11월 3일. MACD의 구성과 계산, 교차 신호의 지연, 다이버전스 해석의 조건을 다룹니다. 차트와 숫자는 가상 데이터로 만든 설명용 예시이며, 매매 성과를 측정한 결과가 아닙니다.
MACD는 두 지수이동평균 사이의 거리를 잰다
MACD(Moving Average Convergence Divergence)는 제럴드 아펠(Gerald Appel)이 1970년대 후반에 개발한 지표입니다. 빠른 지수이동평균(EMA)에서 느린 EMA를 뺀 값으로, 두 평균이 벌어지는지(divergence) 좁혀지는지(convergence)를 보여줍니다.
가격이 꾸준히 오르면 빠른 EMA가 느린 EMA보다 가격을 더 가깝게 따라가므로 MACD는 양수가 됩니다. 꾸준히 내리면 음수가 됩니다. 즉 MACD는 최근 가격 변화의 방향과 속도를 이동평균의 차이로 요약한 모멘텀 지표입니다.
세 요소는 모두 같은 종가에서 나온다
StockCharts ChartSchool이 정리한 기본 설정은 12, 26, 9입니다.
| 요소 | 계산 | 의미 |
|---|---|---|
| MACD 선 | 12기간 EMA − 26기간 EMA | 두 평균의 거리. 0 위면 빠른 평균이 위에 있음 |
| 시그널 선 | MACD 선의 9기간 EMA | MACD 선을 한 번 더 평활한 선 |
| 히스토그램 | MACD 선 − 시그널 선 | MACD 선이 시그널 선에서 얼마나 떨어져 있는지 |
히스토그램은 아펠의 원래 구성에 나중에 더해진 요소입니다. 토머스 애스프레이(Thomas Aspray)가 1986년에 MACD의 지연을 줄여 보려고 고안했고, 1988년 Technical Analysis of Stocks & Commodities에 관련 글을 실었습니다.
교차 신호는 추세가 이미 진행된 뒤에 나온다
흔히 쓰는 신호는 두 가지입니다.
- 시그널 선 교차: MACD 선이 시그널 선을 아래에서 위로 넘으면 상승 교차, 위에서 아래로 넘으면 하락 교차입니다. 히스토그램의 부호가 바뀌는 시점과 같습니다. 국내에서는 이를 골든크로스·데드크로스라고 부르기도 하지만, 원래 두 이동평균선의 교차를 가리키는 말과 섞이지 않게 구분하는 편이 좋습니다.
- 제로선 교차: MACD 선이 0을 넘으면 12기간 EMA가 26기간 EMA 위로 올라섰다는 뜻입니다.
두 신호 모두 이동평균에서 나오므로 가격보다 늦습니다. 아래 코드는 40봉 동안 하락했다가 40봉 동안 같은 폭으로 반등하는 가상 경로에서 이를 확인합니다. 저점은 39번째 봉이고, 상승 교차는 그 뒤에, 제로선 교차는 그보다 더 뒤에 나옵니다. 이 경로에서는 상승 교차가 저점 3봉 뒤(가격 약 81), 제로선 교차가 16봉 뒤(가격 약 87.7)에 나옵니다.
import numpy as np
import pandas as pd
def macd(close, fast=12, slow=26, signal=9):
ema_fast = close.ewm(span=fast, adjust=False).mean()
ema_slow = close.ewm(span=slow, adjust=False).mean()
line = ema_fast - ema_slow
sig = line.ewm(span=signal, adjust=False).mean()
return pd.DataFrame({"macd": line, "signal": sig, "hist": line - sig})
def crossovers(df):
above = df["macd"] > df["signal"]
up = above & ~above.shift(1, fill_value=False)
down = ~above & above.shift(1, fill_value=False)
return list(df.index[up]), list(df.index[down])
flat = macd(pd.Series([100.0] * 60))
assert np.allclose(flat[["macd", "signal", "hist"]], 0)
# Steady trend of 0.5 per bar: MACD converges to (26-12)/2 * 0.5 = 3.5.
trend = macd(pd.Series(100 + 0.5 * np.arange(400)))
assert abs(trend["macd"].iloc[-1] - 3.5) < 1e-6
assert np.allclose(trend["hist"], trend["macd"] - trend["signal"])
# Same shape at ten times the price -> ten times the MACD value.
assert abs(macd(pd.Series(1000 + 5 * np.arange(400)))["macd"].iloc[-1] - 35) < 1e-5
# Fall then rise: the bullish crossover arrives after the low, not at it.
path = pd.Series(np.r_[np.linspace(100, 80, 40), np.linspace(80, 100, 40)])
ups, downs = crossovers(macd(path))
assert path.idxmin() == 39 and ups and ups[0] > 39
zero_up = (macd(path)["macd"] > 0).idxmax()
assert zero_up > ups[0] # the centerline cross comes even later than the signal cross
꺾임이 완만하거나 가격에 잡음이 섞이면 지연은 더 길어지고, 방향 없는 구간에서는 교차가 짧은 간격으로 반복됩니다. ChartSchool의 예시에서도 제로선 교차 뒤에 추세가 이어지지 않아 잦은 손실 신호(whipsaw)가 나온 구간이 있습니다. 교차를 규칙으로 쓰려면 교차 뒤 몇 봉에 체결하는지, 횡보 구간의 반복 거래 비용이 얼마인지까지 함께 계산해야 합니다.
MACD 값은 가격 단위라서 종목끼리 비교할 수 없다
위 코드의 두 번째 검증이 보여주듯, 봉마다 0.5씩 오르는 꾸준한 추세에서 MACD는 (26 − 12) / 2 × 0.5 = 3.5로 수렴합니다. 같은 모양을 가격만 10배로 키우면 MACD도 35가 됩니다. MACD는 가격 단위의 값이므로 가격대가 다른 종목의 MACD를 직접 비교할 수 없고, 같은 종목도 가격 수준이 크게 바뀌면 과거 값과 비교하기 어렵습니다. 비교가 필요하면 차이를 느린 EMA로 나눈 PPO(Percentage Price Oscillator)를 씁니다.
같은 이유로 MACD에는 RSI 같은 상한·하한이 없습니다. ChartSchool은 MACD가 범위가 없어 과매수·과매도 판단에 특히 유용하지 않고, 급격한 움직임에서는 과거 극단값을 넘어 계속 확장될 수 있다고 설명합니다.
다이버전스와 히스토그램은 둔화를 보여줄 뿐이다
가격은 더 낮은 저점을 만들었는데 MACD는 더 높은 저점을 만들면 상승 다이버전스, 가격은 더 높은 고점인데 MACD는 더 낮은 고점이면 하락 다이버전스라고 부릅니다. ChartSchool은 다이버전스를 신중하게 다뤄야 한다고 경고합니다. 강한 상승 추세에서는 하락 다이버전스가 흔하고, 강한 하락 추세에서는 상승 다이버전스가 자주 나타납니다. 다이버전스가 나온 뒤에도 추세는 오래 이어질 수 있습니다.
히스토그램이 줄어든다는 것은 MACD 선이 시그널 선에 가까워지고 있다는 뜻입니다. 시그널 교차보다 먼저 변화를 보여주지만, 그만큼 잡음에도 더 민감합니다. 히스토그램 축소는 “추세가 끝났다”가 아니라 “최근 가격 변화의 속도가 줄었다”는 관찰입니다.
기본값 12-26-9와 다른 조합은 검증 대상이다
12, 26, 9는 널리 쓰이는 기본값이지만 어떤 자산에 최적이라는 근거는 아닙니다. 기간을 줄이면 반응은 빨라지지만 교차가 늘고, 기간을 늘리면 교차는 줄지만 더 늦어집니다. 특정 자산에 특정 조합이 낫다는 주장은 그 자산·시간프레임·비용 조건에서 직접 검증하기 전까지는 가설입니다. 여러 조합을 시험했다면 과적합 방지 칼럼에서 다룬 워크포워드 검증으로 선택 과정까지 다시 확인합니다.
다른 지표와 함께 볼 때는 정보가 겹치는지 먼저 따집니다. RSI와 MACD는 둘 다 같은 종가의 모멘텀에서 나옵니다. 둘이 같은 방향을 가리켰다고 독립된 두 증거로 세면 확신이 과장됩니다. 가격 범위나 변동성 정보가 필요하면 볼린저밴드나 ATR처럼 다른 성격의 지표가 서로를 더 보완합니다.
자료와 적용 범위
- StockCharts ChartSchool: MACD: 아펠의 1970년대 후반 개발, 12-26-9 공식, 교차·다이버전스에 대한 주의, 범위가 없다는 한계, PPO.
- TradingView 도움말: MACD: 1986년 토머스 애스프레이의 히스토그램 도입.
- Stocks & Commodities V.6:8, Thomas Aspray, “MACD Momentum” (1988): 애스프레이가 1986년 가을 MACD 히스토그램을 완성했다는 기사 소개.
- Park & Irwin (2007), “What Do We Know About the Profitability of Technical Analysis?”: 기술적 규칙 연구의 데이터 스누핑과 사후 규칙 선택 문제를 정리한 문헌 검토.
- 이 글은 MACD의 계산과 신호의 성질을 설명합니다. 특정 교차나 다이버전스 규칙이 수익을 낸다고 주장하지 않으며, 투자 자문이 아닙니다.


