개요
Moving Average Convergence Divergence (MACD, 이동평균수렴확산)는 Gerald Appel이 1970년대 후반에 고안하여 1979년 소책자 The Moving Average Convergence Divergence Method로 최초 공식 발표한 추세 추종 모멘텀 지표다1.
Appel은 뉴욕 Brooklyn College에서 학사(1954), NYU에서 사회사업 석사(1956)를 취득한 뒤 독학으로 기술적 분석에 입문했다. 1973년 투자자문사 Signalert Corporation을 설립하여 뉴스레터 Systems & Forecasts를 발행하면서 40년 이상 시장 타이밍과 기술적 분석을 연구했다. MACD는 그 연구의 핵심 산물이다2.
개발 동기
1970년대 당시 기술적 분석의 주류 도구였던 단순이동평균(SMA) 크로스오버에는 세 가지 근본적 한계가 있었다:
- Whipsaw 빈발: 단일 이동평균 교차는 횡보장에서 과도한 거짓 신호를 생성한다.
- 지연(Lag): 긴 기간의 SMA는 추세 전환을 너무 늦게 감지한다.
- 해석 복잡성: 여러 이동평균을 동시에 관찰해야 신호 신뢰도를 확보할 수 있다.
Appel은 이 한계를 극복하기 위해 두 EMA의 차이를 단일 지표로 응축하는 방식을 설계했다3.
핵심 아이디어: MACD는 빠른 EMA(12기간)와 느린 EMA(26기간)의 차이를 추적한다. 두 EMA가 발산(diverge)하면 추세가 강화되고, 수렴(converge)하면 추세가 약화된다. 이 수렴-발산의 동역학이 지표의 이름이 된 것이다.
1988년 Thomas Aspray는 MACD의 지연 문제를 보완하기 위해 MACD Histogram을 도입했다. MACD Line과 Signal Line의 차이를 막대 그래프로 시각화하여, MACD 크로스오버보다 1~4봉 선행하는 경고 신호를 제공한다4.
2022년에는 Alex Spiroglou가 MACD의 5가지 구조적 결함을 식별하고, ATR로 정규화한 MACD-V를 발표하여 NAAIM Founders Award와 Charles H. Dow Award를 동시에 수상했다5.
수학적 정의
기본 공식
MACD는 세 가지 구성 요소로 정의된다. 모든 이동평균은 표준 EMA(평활 계수 )를 사용한다23.
1. MACD Line (MACD 선)
두 지수이동평균의 차이, 즉 빠른 EMA(12기간)와 느린 EMA(26기간) 사이의 스프레드(spread)를 측정한다. 양수이면 단기 평균이 장기 평균 위에 있고(상승 모멘텀), 음수이면 아래에 있다(하락 모멘텀).
2. Signal Line (시그널 선)
MACD Line 자체에 9기간 EMA를 적용한 평활선이다. MACD의 "추세"를 보여주며, MACD Line과의 교차가 매매 신호가 된다3.
3. MACD Histogram (히스토그램)
Thomas Aspray가 1988년 Technical Analysis of Stocks & Commodities에서 최초로 제안한 구성 요소다4. MACD Line과 Signal Line의 차이를 막대 그래프로 시각화하며, 두 선 사이의 거리가 확대되는지(모멘텀 증가) 축소되는지(모멘텀 감소)를 즉각적으로 보여준다.
변수 정의
| 변수 | 정의 |
|---|---|
| 시점 의 종가(Close Price) | |
| 에 대한 기간 지수이동평균, 평활 계수 | |
| 빠른(fast) EMA, | |
| 느린(slow) EMA, | |
| 시그널(signal) EMA, |
EMA 재귀 공식
각 EMA는 다음 재귀 공식으로 계산된다:
초기값은 해당 기간 개 데이터의 SMA를 사용한다:
EMA의 상세 수학적 특성은 EMA 지표 문서를 참조한다.
단계별 계산
26일 이상의 데이터로 EMA(12)와 EMA(26)이 안정화된 상태에서의 계산 과정을 보인다.
Step 1: 두 EMA 계산
| 일자 | 종가 () | EMA(12) | EMA(26) | MACD Line |
|---|---|---|---|---|
| Day 27 | 45,200 | 44,800 | 44,500 | +300 |
| Day 28 | 45,500 | 44,908 | 44,574 | +334 |
| Day 29 | 45,100 | 44,937 | 44,613 | +324 |
| Day 30 | 44,800 | 44,916 | 44,627 | +289 |
| Day 31 | 44,600 | 44,867 | 44,625 | +242 |
EMA(12) 계산 예시 (Day 28):
Step 2: Signal Line 계산
이전 8일의 MACD 값과 함께 Day 27의 Signal Line이 290이라고 가정하면:
Step 3: Histogram 계산
양수 히스토그램은 MACD Line이 Signal Line 위에 있고, 상승 모멘텀이 가속 중임을 의미한다.
비유적 설명
MACD는 토끼(12일 EMA)와 거북이(26일 EMA)의 달리기 경주로 이해할 수 있다.
- 토끼(빠른 EMA)는 최근 가격 변화에 민감하게 반응하여 재빠르게 방향을 바꾼다.
- 거북이(느린 EMA)는 전체 추세를 대표하며 느리지만 안정적으로 이동한다.
- MACD Line은 "토끼가 거북이보다 얼마나 앞서 있는가"를 측정한다. 토끼가 멀리 앞서면 상승 모멘텀이 강하고, 거북이가 앞서면 하락 모멘텀이 강하다.
- Signal Line은 "최근 9일간 토끼가 앞선 평균 거리"다. 토끼의 리드가 이 평균보다 커지면(히스토그램 양수) 가속 중이고, 줄어들면(히스토그램 음수) 감속 중이다.
- 제로 크로스오버(MACD가 0을 교차)는 토끼와 거북이가 나란히 달리는 순간 -- 리드가 바뀌는 전환점이다.
밴드패스 필터로서의 MACD
MACD Line은 두 EMA의 차이, 즉 두 저역통과 필터(low-pass filter)의 차분이다. 신호처리 관점에서 이것은 밴드패스 필터(bandpass filter)와 동등하다3.
- EMA(12): 12기간 이하의 단기 노이즈와 12기간 이상의 추세를 모두 통과
- EMA(26): 26기간 이상의 장기 추세만 통과
- 차이(MACD): 약 12~26기간 사이의 중기 사이클만 추출
즉, MACD는 매우 짧은 노이즈(12기간 미만)와 매우 긴 추세(26기간 초과)를 걸러내고, 중간 주기의 모멘텀 변화만 포착하도록 설계된 필터다.
Histogram: 모멘텀의 모멘텀
MACD Line 자체가 가격의 모멘텀(두 이동평균의 차이)이므로, Histogram은 "모멘텀의 변화율" -- 즉 모멘텀의 모멘텀이다. 물리학의 운동 비유로 정리하면:
| 물리학 | MACD | 의미 |
|---|---|---|
| 위치 | 가격 | 현재 상태 |
| 속도 | MACD Line | 가격의 모멘텀 (변화 방향) |
| 가속도 | Histogram | 모멘텀의 변화율 (가속/감속) |
Aspray가 Histogram을 도입한 핵심 이유가 바로 이것이다: Histogram의 피크(최대/최소)는 MACD의 변곡점(inflection point)에 해당하며, 이는 MACD-Signal 크로스오버보다 항상 선행한다46.
특수 케이스
MACD = 0 (제로 라인)
두 EMA가 정확히 동일한 값을 가지는 순간이다. 단기 평균과 장기 평균이 수렴한 상태로, 추세 방향의 전환점일 수 있다7.
초기값 (EMA Warm-up)
MACD 전체 시스템이 안정적으로 작동하려면 최소 26 + 9 - 1 = 34기간의 데이터가 필요하다. 실무적으로는 EMA의 지수적 감쇠 특성상 100기간 이상의 데이터가 있어야 초기값의 영향이 무시할 수 있을 만큼 작아진다.
파라미터
기본값: 12/26/9의 유래
Appel이 1970년대 후반에 제시한 기본 파라미터는 빠른 EMA 12, 느린 EMA 26, Signal EMA 9이다2. 이 값들은 이론적 최적해가 아니라 1970년대 미국 주식시장의 거래일 사이클을 반영한 실험적 heuristic이다3.
| 파라미터 | 값 | 거래일 의미 | 달력 의미 |
|---|---|---|---|
| Fast EMA | 12 | 약 2.5 거래주 | 반월(half-month) 사이클 |
| Slow EMA | 26 | 약 1 거래월 | 월간(monthly) 사이클 |
| Signal EMA | 9 | 약 1.8 거래주 | Signal smoothing용 반주기 |
빠른 EMA(12)와 느린 EMA(26)의 비율은 약 1:2.17이다. 이 비율은 추세 판단(장기)과 반응 속도(단기)의 균형을 위해 의도적으로 설계된 것이며, Appel 본인은 "12/26/9는 실험적으로 결정한 heuristic이며, 시장과 타임프레임에 따라 반드시 조정되어야 한다"고 명시했다3.
Appel의 비대칭 파라미터 권장
Appel은 롱 사이드(매수 신호)와 숏 사이드(매도 신호)에 서로 다른 파라미터를 사용할 것을 권고했다2. 주가 하락은 상승보다 빠르게 전개되는 경향이 있어, 매도 신호 감지에는 더 짧은 EMA가 유리하다는 관찰에 근거한다.
| 포지션 | Fast | Slow | Signal | 설계 의도 |
|---|---|---|---|---|
| 매수(Long) | 12 | 26 | 9 | 표준 -- 추세 확인 후 진입 |
| 매도(Short) | 8 | 17 | 9 | 더 민감 -- 하락은 상승보다 빠르므로 |
파라미터 조정 가이드
| 조정 방향 | Fast/Slow/Signal | 효과 | 적합 상황 |
|---|---|---|---|
| 더 민감하게 | 8/17/9 | 빠른 반응, 더 많은 신호, whipsaw 증가 | 짧은 타임프레임, 변동성 높은 시장 |
| 표준 | 12/26/9 | 균형 잡힌 반응 | 일봉 기준 대부분의 시장 |
| 더 둔감하게 | 19/39/9 | 느린 반응, 적은 신호, 큰 추세만 포착 | 긴 타임프레임, 장기 투자 |
암호화폐 24시간 시장 고려사항
암호화폐 시장은 전통 시장과 근본적으로 다른 특성을 가진다:
- 주 7일 거래: 전통 시장의 26 거래일이 약 5.2주(37 달력일)인 반면, 암호화폐의 26일은 정확히 26 달력일이다. 동일한 기간 파라미터가 더 짧은 달력 기간을 커버한다.
- 높은 변동성: EMA 스프레드(MACD 값)가 크게 진동하여 거짓 크로스오버가 빈발할 수 있다. Signal Line 기간을 늘려(예: 12) 평활화하는 것이 하나의 대안이다.
- 실증 연구: Bitcoin 2021-2024 데이터에서 최적 파라미터는 (17, 21, 15)로 표준 (12, 26, 9)과 상이하다는 연구 결과가 있다. 단, 피어리뷰 미완료 상태이므로 자체 백테스트를 통한 검증이 필수다.
- MACD-V의 장점: 암호화폐의 급격한 변동성 변화에 대응하는 데 ATR 정규화된 MACD-V가 표준 MACD보다 안정적인 신호를 생성할 수 있다5.
해석 방법
Appel이 The Moving Average Convergence Divergence Method(1979)에서 정의한 원전 해석은 세 가지다2. 이후 Aspray(1988)가 히스토그램을 도입하며 두 가지 해석이 추가되었다4.
1. MACD Line 제로선 교차 (Appel 원전)
MACD Line이 0을 상향 돌파하면 빠른 EMA(12)가 느린 EMA(26)를 초과한 상태로, 장기 추세가 상승 전환되었음을 의미한다. 반대로 0을 하향 돌파하면 장기 하락 추세 진입이다3.
- MACD > 0: 단기 모멘텀이 장기 모멘텀보다 강함 (상승 추세)
- MACD < 0: 단기 모멘텀이 장기 모멘텀보다 약함 (하락 추세)
- MACD = 0: 두 EMA가 수렴, 추세 전환 경계
Appel은 제로선 교차를 장기 추세 필터로 활용할 것을 권했으며, 단독 진입 신호로 사용하는 것은 지연이 커서 권장하지 않았다3.
2. MACD와 Signal Line 교차 (Appel 원전)
MACD Line이 9일 Signal Line을 돌파할 때가 진입/청산 신호다2.
- Golden Cross: MACD가 Signal을 상향 돌파 -- 매수 신호
- Dead Cross: MACD가 Signal을 하향 돌파 -- 매도 신호
Appel은 교차 발생 위치에 따라 신호 강도를 차등화했다3:
| 교차 위치 | 신호 강도 | 해석 |
|---|---|---|
| 제로선 아래에서 Golden Cross | 강한 매수 | 과매도에서 반등 |
| 제로선 위에서 Golden Cross | 보통 매수 | 상승 추세 지속 |
| 제로선 위에서 Dead Cross | 강한 매도 | 고점에서 반전 |
| 제로선 아래에서 Dead Cross | 보통 매도 | 하락 추세 지속 |
3. 수렴/발산의 의미 (Appel 원전)
지표 명칭이 표현하듯, 두 EMA의 거리 변화가 핵심이다2:
- Convergence(수렴): 두 EMA가 가까워짐 -- MACD가 0에 접근 -- 현재 추세 약화, 전환 임박
- Divergence(발산): 두 EMA가 멀어짐 -- |MACD| 증가 -- 현재 추세 강화, 지속 가능성
4. Histogram 변화 (Aspray 1988)
Aspray는 MACD의 지연 문제, 특히 주봉 차트에서 Signal Line 교차가 너무 늦게 발생하는 문제를 해결하기 위해 MACD Histogram을 제안했다4.
히스토그램의 핵심 기여는 MACD/Signal 교차를 선행 예측한다는 점이다:
- 히스토그램이 0 부근에서 증가 방향 전환 -- Golden Cross 임박
- 히스토그램이 0 부근에서 감소 방향 전환 -- Dead Cross 임박
- 히스토그램 피크 축소 -- 현재 추세 모멘텀 약화 (조기 경고)
5. 다이버전스 (Aspray 1988, Murphy 1999)
가격과 MACD(또는 Histogram)의 고점/저점 불일치는 추세 반전의 선행 신호다47.
정규 약세 다이버전스 (Bearish Divergence)
가격은 더 높은 고점(Higher High)을 만들었지만, MACD는 더 낮은 고점(Lower High)을 형성한다. 상승 모멘텀이 약화되고 있다는 경고다.
정규 강세 다이버전스 (Bullish Divergence)
가격은 더 낮은 저점(Lower Low)을 만들었지만, MACD는 더 높은 저점(Higher Low)을 형성한다. 하락 모멘텀이 약화되고 있다는 경고다.
Histogram 다이버전스
Aspray의 핵심 기여에 해당하며, MACD Line 다이버전스보다 더 이른 경고를 제공한다4. 가격이 고점을 높이는데 히스토그램의 양의 피크가 낮아지면, MACD의 가속도가 약해지고 있다는 뜻이다. 이는 MACD-Signal 크로스오버보다 선행하므로 "크로스오버 예고" 신호로 사용된다.
| 유형 | 가격 | MACD/Histogram | 의미 |
|---|---|---|---|
| 정규 약세 다이버전스 | 고점 상승 | 고점 하락 | 상승 추세 약화, 하락 전환 가능 |
| 정규 강세 다이버전스 | 저점 하락 | 저점 상승 | 하락 추세 약화, 상승 전환 가능 |
| 히든 약세 다이버전스 | 고점 하락 | 고점 상승 | 하락 추세 지속 (되돌림 종료) |
| 히든 강세 다이버전스 | 저점 상승 | 저점 하락 | 상승 추세 지속 (되돌림 종료) |
다이버전스는 단독 매매 신호가 아니라 경고(warning)로 취급해야 한다. 학술 연구에서 다이버전스의 hit-rate는 약 50% 내외로 보고되며, 강한 추세에서는 다이버전스가 여러 번 연속으로 실패할 수 있다3.
실용적 활용
매매 전략
진입 규칙
| 신호 | 진입 조건 | 강도 |
|---|---|---|
| 강한 매수 | MACD < 0에서 Golden Cross + Histogram 증가 전환 | 높음 |
| 보통 매수 | MACD > 0에서 Golden Cross | 중간 |
| 약한 매수 | 정규 강세 다이버전스만 관측 | 낮음 (확인 필요) |
| 강한 매도 | MACD > 0에서 Dead Cross + Histogram 감소 전환 | 높음 |
| 보통 매도 | MACD < 0에서 Dead Cross | 중간 |
청산 규칙
- 추세 이탈: 반대 방향 Signal Line 교차 발생
- 모멘텀 소실: Histogram이 3~5봉 연속 축소
- 제로선 복귀: MACD Line이 진입 반대 방향으로 0선 돌파
손절 기준
MACD는 손절가를 직접 제시하지 않으므로, 진입봉의 스윙 하단(매수) 또는 스윙 상단(매도)을 사용한다. Appel 본인도 "MACD는 진입 타이밍 도구이며, 손절 관리는 별도 규칙이 필요하다"고 강조했다3.
다른 지표와의 조합
RSI + MACD: 추세와 과매수/과매도의 이중 확인
MACD는 추세 방향성을 제공하지만 과매수/과매도 수준을 정량화하지 못한다. RSI는 0~100 스케일로 모멘텀 수준을 정규화하지만 추세 방향을 표시하지 않는다. 두 지표는 서로의 맹점을 보완한다8.
| 신호 조합 | 해석 | 행동 |
|---|---|---|
| MACD Golden Cross + RSI 30~50 | 과매도 반등 진입 | 강한 매수 |
| MACD Golden Cross + RSI > 70 | 과매수 + 추세 진입 | 주의 (후발 진입) |
| MACD Dead Cross + RSI 50~70 | 고점 이탈 | 강한 매도 |
| MACD 다이버전스 + RSI 다이버전스 | 이중 확인 | 고신뢰 반전 |
Chong, Ng & Liew(2014)는 5개 OECD 시장에서 MACD(12,26,0) + RSI(21,50) 조합이 1% 거래비용을 적용해도 abnormal return을 유지함을 실증했다8.
MACD + Bollinger Bands: 변동성과 모멘텀의 결합
- BB 상단 터치 + MACD Dead Cross: 과매수 영역에서의 고신뢰 매도
- BB 하단 터치 + MACD Golden Cross: 과매도 영역에서의 고신뢰 매수
- BB squeeze + MACD 제로선 근접: 돌파 임박, 방향 대기
MACD + Volume: 추세의 실체 검증
- MACD Golden Cross + OBV 상승: 매수세 유입 확인, 신뢰도 상승
- MACD Golden Cross + OBV 평탄: 거짓 돌파 경계
PPO (Percentage Price Oscillator)
Appel이 MACD와 함께 고안한 백분율 정규화 버전이다3.
| 속성 | MACD | PPO |
|---|---|---|
| 단위 | 가격(절대값) | 백분율(%) |
| BTC (90,000,000원) MACD=500,000 | "50만원 차이" | PPO=0.56% |
| ETH (3,500,000원) MACD=20,000 | "2만원 차이" | PPO=0.57% |
| 종목 간 비교 | 불가 (가격 수준에 비례) | 가능 (정규화됨) |
PPO는 MACD와 완전히 동일한 크로스오버/다이버전스 신호를 생성하지만, 가격 수준에 독립적(price-level invariant)이다. 암호화폐처럼 가격 변동폭이 큰 자산에서 특히 유용하다.
MACD-V (Volatility Normalised Momentum)
Alex Spiroglou가 2022년에 발표한 MACD의 현대적 변형이다5.
PPO는 가격 수준만 정규화하지만, MACD-V는 변동성까지 정규화한다. 따라서 MACD-V의 수치는 시장 환경(고변동성/저변동성)에 걸쳐 일관된 의미를 가진다:
- 종목 간 비교 가능: BTC와 ETH의 모멘텀을 동일 척도로 비교
- 객관적 임계값: +150 이상 강한 상승, -150 이하 강한 하락
- 시간 안정성: 가격 스케일 변화에 독립적
학술적 검증
Chong & Ng (2008) -- 영국 FT30 장기 검증
| 항목 | 내용 |
|---|---|
| 시장 | 영국 London Stock Exchange, FT30 지수 |
| 기간 | 1935~1994 (약 60년) |
| 방법론 | MACD(12,26,0) 규칙을 buy-and-hold 대비 비교, 부트스트랩 검정 |
| 결과 | MACD(12,26,0) 매매 규칙이 유의미한 초과수익(abnormal return) 생성9 |
Chong, Ng & Liew (2014) -- 5개 OECD 시장 확장 검증
| 항목 | 내용 |
|---|---|
| 시장 | 미국 DJIA, 영국 FT30, 독일 DAX, 이탈리아 Milan Comit General, 캐나다 S&P/TSX |
| 방법론 | MACD(12,26,0) + RSI(21,50), 1% round-trip 거래비용 적용 |
| 결과 | Milan Comit General과 S&P/TSX에서 거래비용 차감 후에도 abnormal return 유지. DJIA, FT30, DAX에서는 효과 일관되지 않음8 |
Aspray (1988) -- MACD Histogram 선행성
주봉 기준 MACD 크로스오버는 13주 지연이 있으나 MACD-H의 방향 전환 및 다이버전스는 해당 교차를 **14 bar 선행**함을 사례 분석으로 제시했다4. 다만 업계지(practitioner magazine)이며 통계적 검정 엄밀도는 제한적이다.
Spiroglou (2022) -- MACD-V와 5대 결함
S&P 500(19282021, 약 93년)과 글로벌 멀티에셋 유니버스(19902021)를 대상으로 표준 MACD의 5대 구조적 결함을 통계적으로 식별하고, MACD-V가 스케일 불변(scale-invariant)이며 시간/자산에 걸쳐 안정적임을 실증했다5. NAAIM Founders Award 2022와 Charles H. Dow Award 2022(CMT Association)을 동시 수상했다.
통계적 유효성 요약
| 연구 | 시장 | 기간 | 결과 |
|---|---|---|---|
| Chong & Ng (2008) | 영국 FT30 | 1935-1994 | 유의미한 초과수익 확인 |
| Chong et al. (2014) | 5개 OECD 지수 | 다국가 장기 | 이탈리아/캐나다 유효, 미국/영국/독일 일관성 없음 |
| Aspray (1988) | 미국 주식/상품 | 1980년대 | MACD-H가 크로스오버를 1-4 bar 선행 |
| Spiroglou (2022) | S&P 500 + 멀티에셋 | 1928-2021 | MACD-V는 scale/time-invariant |
EMH(효율적 시장 가설)와의 관계
Chong & Ng(2008)9 및 Chong et al.(2014)8는 거래비용 차감 후에도 특정 시장에서 MACD 규칙이 초과수익을 생성함을 실증했다. 이는 약형 EMH의 부분적 기각(partial rejection)으로 해석된다. 반면 DJIA, FT30, DAX 등 가장 효율적인 시장에서는 MACD가 일관된 수익을 내지 못했으며, 이는 시장별 차등 효율성과 부합한다.
MACD의 유효성은 시장의 효율성 수준과 반비례 경향이 있다. 효율적이지 않거나 추세가 지속되는 시장(이탈리아, 캐나다)에서 효과적이며, 대형 효율 시장에서는 2000년대 이후 알파가 감쇠한다.
암호화폐 시장 적용
암호화폐 시장에서 MACD의 유효성은 학술적 공백 영역(research gap)이다. Bitcoin 파라미터 최적화 연구(arXiv 2024)가 존재하나 피어리뷰 저널 게재 연구는 아직 제한적이다. Spiroglou(2022)의 MACD-V 프레임워크가 변동성 큰 자산군에 대한 이론적 토대를 제공하지만, 주식 시장 검증 결과를 암호화폐에 직접 이식할 수 없음을 인지해야 한다.
한계점
1. 가격 스케일 종속성
MACD Line의 절대값은 EMA 차이의 원시값이므로 가격 수준에 비례한다5. BTC가 70,000달러일 때 MACD = 500과 ETH가 3,500달러일 때 MACD = 25는 직접 비교할 수 없다. 종목 간 모멘텀 순위를 매길 수 없고, 같은 자산이라도 시간에 따라 자기 비교가 불가능하다.
대안: PPO(백분율 표시) 또는 MACD-V(ATR 정규화) 사용5.
2. 횡보장 Whipsaw
무추세 구간에서 MACD/Signal Line이 반복적으로 교차하여 연속적 거짓 신호(whipsaw)를 생성한다5. 이는 EMA 기반 지표의 공통 약점이며, 낮은 변동성 구간에서 특히 심각하다.
대안: ADX > 25 필터로 추세장에서만 MACD를 사용하거나, Bollinger Bands Width로 squeeze 구간을 식별하여 일시적으로 MACD 신호를 무시한다.
3. 후행성 (Lagging)
MACD는 두 EMA의 차이이므로 본질적으로 이중 평활 지표다. Signal Line까지 포함하면 삼중 평활 구조가 된다. 일봉 MACD(12,26,9)의 전형적 반전 신호 지연은 510봉이며, 급락 시 Dead Cross는 가격 고점 이후 평균 710% 하락 후 발생하는 경우가 많다.
대안: Histogram 변화를 선행 지표로 활용하거나(Aspray 1988)4, MACD-V로 반전 감지를 개선한다5.
4. 시간 불안정성
MACD 수치는 시점의 가격 수준에 비례한다. 2000년 S&P 500의 MACD 값과 2021년 MACD 값은 동일 모멘텀을 의미하지 않는다5. 같은 자산이라도 수십 년 스케일에서 기준점이 드리프트한다.
5. 다이버전스 정밀도 한계
MACD 다이버전스의 hit-rate는 학술 표본에서 50% 내외로 보고되며, 특히 강한 추세장에서는 다이버전스가 여러 번 발생한 뒤에야 실제 반전이 일어난다. Appel 자신도 다이버전스를 다른 신호(지지/저항, 거래량)와 반드시 병용할 것을 권고했다3.
흔한 오용
오용 1: Signal Line 교차 맹신
Appel은 Signal Line 교차의 위치(제로선 상/하)가 신호 강도를 결정한다고 명시했다3. 횡보장에서는 무의미한 교차가 반복되므로 추세 필터(ADX, 200일 이평선) 병용이 필수다.
오용 2: 다이버전스 조기 진입
다이버전스는 반전 가능성 신호이지 확정 신호가 아니다. 실제 반전은 가격 구조(고점 이탈, 추세선 이탈)로 확인된 뒤 진입해야 한다.
오용 3: 단일 타임프레임 판단
15분봉 Dead Cross가 발생해도 4시간봉이 여전히 Golden Cross 상태라면 상위 타임프레임 추세 내 되돌림일 가능성이 높다. 최소 상위 2개 타임프레임에서 신호 일관성 확인이 필요하다.
오용 4: MACD 단독 매매
MACD는 추세/모멘텀 지표일 뿐이며, 거래량/변동성/가격 구조 정보를 담지 않는다. Appel 본인도 "MACD는 완전한 거래 시스템이 아니며, 다른 확인 도구와 결합해야 한다"고 명시했다3.
오용 5: 파라미터 무조정 적용
Appel 본인이 "12/26/9는 heuristic이며 조정되어야 한다"고 명시했다3. 특히 암호화폐 24시간 시장에서는 12/26의 "반월/월간" 근거가 소멸하므로 타임프레임별 재보정이 필요하다.
구현 예시
Gerald Appel의 원저1와 Thomas Aspray의 Histogram 도입4에 충실한 구현이다. EMA 함수는 앞서 작성된 calculateEMA를 재사용하며, 교육 목적이므로 가독성을 우선한다.
타입 정의
interface MACDInput {
/** 종가(close price) 배열. 시간순 정렬 (오래된 것부터) */
prices: number[];
/** 빠른 EMA 기간. Appel 기본값 12 */
fastPeriod?: number;
/** 느린 EMA 기간. Appel 기본값 26 */
slowPeriod?: number;
/** Signal Line EMA 기간. Appel 기본값 9 */
signalPeriod?: number;
}
interface MACDResult {
/** MACD Line = EMA(fast) - EMA(slow) */
macd: number[];
/** Signal Line = EMA(MACD Line, signalPeriod) */
signal: number[];
/** Histogram = MACD - Signal (Aspray 1988) */
histogram: number[];
}
기본 구현: Appel의 표준 MACD (12/26/9)
function calculateMACD(input: MACDInput): MACDResult {
const {
prices,
fastPeriod = 12,
slowPeriod = 26,
signalPeriod = 9,
} = input;
if (fastPeriod >= slowPeriod) {
throw new Error(
`fastPeriod (${fastPeriod}) must be less than slowPeriod (${slowPeriod}).`
);
}
const minLength = slowPeriod + signalPeriod - 1;
if (prices.length < minLength) {
return { macd: [], signal: [], histogram: [] };
}
// 1단계: 빠른 EMA, 느린 EMA 계산
const emaFast = calculateEMA({ prices, period: fastPeriod });
const emaSlow = calculateEMA({ prices, period: slowPeriod });
// 2단계: MACD Line = EMA(fast) - EMA(slow), 시점 정렬
const offset = slowPeriod - fastPeriod;
const macdLine: number[] = [];
for (let i = 0; i < emaSlow.values.length; i++) {
macdLine.push(emaFast.values[i + offset] - emaSlow.values[i]);
}
// 3단계: Signal Line = EMA(MACD Line, signalPeriod)
const signalResult = calculateEMA({
prices: macdLine,
period: signalPeriod,
});
const signalLine = signalResult.values;
// 4단계: Histogram = MACD - Signal (Aspray 1988)
const macdAligned = macdLine.slice(signalPeriod - 1);
const histogram: number[] = [];
for (let i = 0; i < signalLine.length; i++) {
histogram.push(macdAligned[i] - signalLine[i]);
}
return {
macd: macdAligned,
signal: signalLine,
histogram,
};
}
시그널 감지
type SignalType =
| 'bullish_cross'
| 'bearish_cross'
| 'zero_cross_up'
| 'zero_cross_down';
interface MACDSignal {
index: number;
type: SignalType;
}
function detectMACDSignals(result: MACDResult): MACDSignal[] {
const signals: MACDSignal[] = [];
const { macd, histogram } = result;
if (histogram.length < 2) return signals;
for (let i = 1; i < histogram.length; i++) {
const prevHist = histogram[i - 1];
const currHist = histogram[i];
const prevMacd = macd[i - 1];
const currMacd = macd[i];
// MACD-Signal 크로스오버
if (prevHist <= 0 && currHist > 0) {
signals.push({ index: i, type: 'bullish_cross' });
} else if (prevHist >= 0 && currHist < 0) {
signals.push({ index: i, type: 'bearish_cross' });
}
// MACD Line 제로선 교차
if (prevMacd <= 0 && currMacd > 0) {
signals.push({ index: i, type: 'zero_cross_up' });
} else if (prevMacd >= 0 && currMacd < 0) {
signals.push({ index: i, type: 'zero_cross_down' });
}
}
return signals;
}
PPO 구현
function calculatePPO(input: MACDInput): MACDResult {
const {
prices,
fastPeriod = 12,
slowPeriod = 26,
signalPeriod = 9,
} = input;
if (fastPeriod >= slowPeriod) {
throw new Error('fastPeriod must be less than slowPeriod.');
}
const minLength = slowPeriod + signalPeriod - 1;
if (prices.length < minLength) {
return { macd: [], signal: [], histogram: [] };
}
const emaFast = calculateEMA({ prices, period: fastPeriod });
const emaSlow = calculateEMA({ prices, period: slowPeriod });
const offset = slowPeriod - fastPeriod;
// PPO Line: 백분율 정규화
const ppoLine: number[] = [];
for (let i = 0; i < emaSlow.values.length; i++) {
const slow = emaSlow.values[i];
const fast = emaFast.values[i + offset];
ppoLine.push(slow === 0 ? 0 : ((fast - slow) / slow) * 100);
}
const signalResult = calculateEMA({ prices: ppoLine, period: signalPeriod });
const signalLine = signalResult.values;
const ppoAligned = ppoLine.slice(signalPeriod - 1);
const histogram: number[] = [];
for (let i = 0; i < signalLine.length; i++) {
histogram.push(ppoAligned[i] - signalLine[i]);
}
return { macd: ppoAligned, signal: signalLine, histogram };
}
엣지 케이스
| 케이스 | 입력 | 출력 | 설명 |
|---|---|---|---|
| 빈 배열 | { prices: [] } | 모두 빈 배열 | 에러 없이 빈 결과 |
| 데이터 부족 | 길이 33 이하 (12/26/9 기준) | 모두 빈 배열 | 최소 34개 필요 |
| fast >= slow | fastPeriod: 26, slowPeriod: 12 | Error | 빠른 EMA가 느려야 의미 구조 유지 |
| 동일 가격 반복 | 모두 100 | 모두 0 | 두 EMA가 같으므로 차이 0 |
라이브러리 비교
| 항목 | 본 구현 | technicalindicators |
|---|---|---|
| 입력 필드명 | prices | values |
| 출력 형태 | 세 배열 ({ macd, signal, histogram }) | 객체 배열 ([{ MACD, signal, histogram }]) |
| 시점 정렬 | 세 배열 동일 길이 | 초기 시점에서 signal/histogram undefined |
| fast >= slow 검증 | Error throw | 검증 없음 |
요약
| 항목 | 내용 |
|---|---|
| 개발자 | Gerald Appel (1979), Histogram: Thomas Aspray (1988) |
| 유형 | 추세 추종 모멘텀 지표 (오실레이터) |
| 구성 | MACD Line, Signal Line, Histogram |
| 표준 파라미터 | 12 (Fast EMA), 26 (Slow EMA), 9 (Signal EMA) |
| 값 범위 | 제한 없음 (가격 차이의 절대값) |
| 차트 표시 | 별도 패널 (overlay: false) |
| 주요 신호 | 제로선 교차, Signal 교차, 히스토그램 변화, 다이버전스 |
| 적합 시장 | 추세가 뚜렷한 시장 (횡보장에서 whipsaw 발생) |
| 학술적 지위 | 조건부 유효 -- 효율성 낮은 시장에서 초과수익 실증 |
| 현대적 변형 | PPO (가격 정규화), MACD-V (변동성 정규화, Spiroglou 2022) |
| 장점 | 추세와 모멘텀 동시 분석, 다양한 신호, 밴드패스 필터 특성 |
| 단점 | 후행성, 횡보장 취약, 가격 스케일 종속, 다이버전스 낮은 정밀도 |
Footnotes
-
Appel, G. (1979). The Moving Average Convergence Divergence Method. Signalert, Great Neck, NY. ↩ ↩2
-
Appel, G. & Dobson, E. (2008). Understanding MACD (Moving Average Convergence Divergence). Traders Press Inc. ISBN: 978-0934380928. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
-
Appel, G. (2005). Technical Analysis: Power Tools for Active Investors. FT Press. ISBN: 978-0131479029. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16
-
Aspray, T. (1988). "MACD Momentum (Part 1)." Technical Analysis of Stocks & Commodities, 6(8), 294-297. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10
-
Spiroglou, A. (2022). "MACD-V: Volatility Normalised Momentum." NAAIM Founders Award 2022 White Paper. SSRN: 4099617. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9
-
Aspray, T. (1988). "MACD Momentum (Part 2)." Technical Analysis of Stocks & Commodities, 6(9). ↩
-
Murphy, J.J. (1999). Technical Analysis of the Financial Markets. New York Institute of Finance. ISBN: 978-0735200661, pp. 252-255. ↩ ↩2
-
Chong, T.T.-L., Ng, W.-K. & Liew, V.K.-S. (2014). "Revisiting the Performance of MACD and RSI Oscillators." Journal of Risk and Financial Management, 7(1), 1-12. DOI: 10.3390/jrfm7010001. ↩ ↩2 ↩3 ↩4
-
Chong, T.T.-L. & Ng, W.-K. (2008). "Technical analysis and the London stock exchange: testing the MACD and RSI rules using the FT30." Applied Economics Letters, 15(14), 1111-1114. DOI: 10.1080/13504850600993598. ↩ ↩2