MACD의 계산

마지막 업데이트: 2022년 5월 19일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
출처 : https://pandas.pydata.org/pandas-docs/stable/user_guide/computation.html#exponentially-weighted-windows

Dipsy 의 백과사전

이번시간에는 MACD ( 이동평균수렴·확산지수 : Moving Average Convergence and Divergence ) 에 대하여 알아보는 시간을 가져보도록 하겠습니다 .

주가의 흐름에서 이동평균선은 일반적으로 주가의 단기변동 때문에 나타나는 불규칙성을 제거하기 위해서 만드는데 MACD 는 이러한 이동평균선을 이용해 기간이 다른 이동평균선 사이의 관계에서 추세변화의 신호를 찾으려고 1979 년 Gerald Appel 에 의해 개발된 지표입니다 . MACD 는 단순이동평균선에서 추세전환 신호가 늦게 나타난다는 단점을 일부 보완해주며 , 추세전환 MACD의 계산 시점을 찾는 것보다는 추세 방향과 주가 움직임을 분석하는데 좋은 지표로 알려져 있습니다 . 또한 이동평균보다 정확하게 고점과 저점을 잡아낸다는 장점을 가지고 있습니다 .

MACD(Moving Convergence & Divergence) 에서는 일반적으로 26 일간의 지수평균과 12 일간의 지수 평균 간의 차이를 산출하여 구하며 , 이 두 지수평균의 차이를 다시 9 일간의 지수평균으로 산출하여 시그널 (signal) 로 사용합니다 . 이 때 이동평균선이 가까워지면 주가는 하락하고 , 이동평균선이 멀어지면 주가는 상승하는 원리를 이용하는 것입니다 .

MACD 곡선 = 단기지수이동평균 – 장기지수이동평균 (12 일 지수이동평균 -26 일 지수이동평균 )

Signal 곡선 = n 일의 MACD 지수 이동평균 ( 일반적으로 9 일 이용 )

MACD 를 매매에 사용할 때 가장 기본적으로 사용하는 방법이 MACD 선과 Signal 선의 교차 신호에 따라 결정을 하는 것인데 , 이 때 교차는 빈번하게 일어나고 허수가 발생할 가능성이 높습니다 . 그렇기 때문에 그것을 보완하기 위해서 오실레이터라는 것이 생겼습니다 . 오실레이터는 보조지표상에서 빨간색 막대와 파란색 막대모양으로 표시되는데 이것이 양으로 전환되면 매수세가 강하다는 것을 말하는 것이고 음으로 바뀌면 매도세가 강하다는 것입니다 .

이 MACD Oscillator 는 보통 차트의 흐름보다 한발 앞서 나가는 경향이 강합니다 . 쉽게 설명하자면 , 0 을 기준으로 마이너스에서 0 을 지나 플러스로 전환되면 상승장세가 따라올 가능성이 높으며 , 그 반대이면 하락장세가 따라올 가능성이 높은 것입니다 . 그렇기 때문에 플러스로 전환할 때가 매수시점 , 그 반대이면 매도시점으로 볼 수 있으며 , 그래프의 고점에서 하락할 때에도 매도시점 , 그래프의 저점에서 상승할 때 매수시점이라고 볼 수 있습니다 .

사용방법
MACD 를 사용해 매매에 사용하는 몇 가지 방법에 대하여 자세히 알아보도록 하겠습니다 .

1) MACD 선과 Signal 선의 MACD의 계산 교차를 이용한 매매

- MACD 가 Signal 선을 상향 돌파하면 , MACD 가 9 일동안의 평균보다 높게 형성되었다는 뜻이므로 상승추세로 파악하고 매수합니다 .

- MACD 가 Signal 선을 하향 돌파하면 , MACD 가 9 일동안의 평균보다 낮게 형성되었다는 뜻이므로 하락추세로 파악하고 매도합니다 .

2) Oscillator 의 전환과 초과매수 (Overbought) / MACD의 계산 MACD의 계산 초과매도 (Oversold) 이용 매매

- MACD 의 Oscillator 가 음 (Negative) 에서 양 (Positive) 으로 전환 시 매수시점 입니다 .

- MACD 의 Oscillator 가 양 (Positive) 에서 음 (Negative) 으로 전환 시 매도시점 입니다 .

- MACD 의 Oscillator 가 양 (Positive) 의 일정 값을 상회 시 매도시점입니다 .

- MACD 의 Oscillator 가 음 (Negative) 의 일정 값을 하회 시 매수시점입니다 .

3) MACD 의 추세선을 이용한 매매

- MACD 의 추세선은 MACD 의 교차에 선행하는 경향이 있기 때문에 MACD 의 추세선이 붕괴시 이에 대응하여 매매 하는 방법입니다 .

4) Divergence 를 이용한 매매

- 가격의 저점이 낮아지나 MACD 의 저점이 높아지는 경우 : 일반 상승 다이버전스 ( 하락세가 감소하여 나타나는 현상 )

- 가격의 저점이 높아지나 MACD 의 저점이 낮아지는 경우 : 히든 상승 다이버전스 ( 하락세는 여전하지만 실제 가격에는 반영되지 않은 현상 )

- 가격의 고점이 높아지나 MACD 의 고점이 낮아지는 경우 : 일반 하락 다이버전스 ( 상승세가 감소하여 나타나는 현상 )

- 가격의 고점이 낮아지나 MACD 의 고점이 높아지는 경우 : 히든 하락 다이버전스 ( 상승세는 여전하지만 실제 가격에는 반영되지 않은 현상 )

마지막으로 MACD 는 다른 기술적 보조지표에 비해서 성공률이 높고 인기가 있는 지표인 것은 분명합니다 . 하지만 MACD 지표도 이동평균선을 이용한 만큼 후행성 지표라는 것을 완전히 극복할 수 없기 때문에 급격한 상승이나 하락은 따라갈 수 없다는 단점이 있습니다 . 또한 횡보구간에는 골든 크로스와 데드 크로스의 출현 빈도가 많아지고 가격 상승이 둔화 됐음에도 하락세로 반전하지 않고 상승과 하락을 이어가며 양의 값을 유지하는 경우 등의 신뢰할 수 없는 신호가 많이 나오기 때문에 다른 것과 병행해서 매매에 참조 하여야 하겠습니다 .

MACD에 대해 이해하기

*이 게시글은 제가 공부하면서 정리한 내용들입니다.
부족한 부분이 있다는 점 미리 양해 부탁드립니다.

1. MACD란?

MACD는 Moving Average Convergence Divergence의 약자 "이동 평균 수렴 확산법 '
한마디로 이야기해서 이동평균선의 진화형이다.

288.png

[MACD 계산식]
MACD MACD의 계산 = EMA (단기) -EMA (중기)
*EMA = 지수 이동 평균선
(이 단기와 중기는 보통 12일 EMA와 26일 EMA를 사용한다. 물론 변경 가능한 매개 변수이다. 이 공식에서 이해해야 하는 것은 MACD는 두 개의 EMA의 괴리 (떨어져 상태)를 보여준다는 것이다.)
시그널 = MACD의 n 일 EMA
(보통 9 일 EMA를 사용한다. 이 9도 변경 가능한 매개 변수이다. 이 공식에서 이해해야 하는 것은 시그널은 단순히 MACD의 이동 MACD의 계산 평균이라는 것이다.)
히스토그램 = MACD - 시그널
(히스토그램은 MACD와 시그널의 괴리를 막대 그래프로 나타낸 것이다.)

일반적 견해
· MACD와 시그널의 골든 크로스 . 매수사인
· MACD와 시그널의 데드 크로스 . 매도사인

시그널이 어느 정도 내려간 후 보합 또는 상승세로 돌아 섰을 때 MACD가 시그널을 아래에서 위로 교차하는 것이 전형적인 골든 크로스이다.
시그널이 어느 정도 오른 후 보합 또는 하락으로 향했을 때 MACD가 시그널을 위에서 아래로 교차하는 것이 전형적인 데드 크로스이다.
이 것이 골든 크로스 데드 크로스의 기본형이다.

만약을 위해 보충하지만, 이외의 크로스를 골든 크로스 (데드 크로스)로 인정하지 않는다는 것은 아니다.
단, 신뢰성이 떨어진다는 것이다.

조금 진화된 매수,매도 사인

MACD선 & 시그널
MACD와 시그널이 골든 크로스 후 2 개의 선이 제로선을 웃돈다. . 매수사인 MACD의 계산
MACD와 시그널이 데드 크로스 후 2 개의 선이 제로선을 밑돈다. . 매도사인

히스토그램
감소하고 있던 히스토그램이 증가로 전환. . 매수사인
증가하고 있던 히스토그램이 감소로 전환. . 매도사인

MACD는 현재 MACD1으로 불리며 두 개의 지수이동평균선과 그 괴리를 나타내는 MACD선과 MACD의 트렌드를 알기 위해 MACD의 EMA를 붙인 것인 시그널 선이다.
MACD2는 히스토그램이 포함되어 있다. MACD2는 MACD의 개량판인 것이다.

트랜드계 지표들의 단점은 상승이 진행 된 후에야 상승추세를 알아낼 수 있고, 하락이 진행된 후에야 상승세가 종료되었음을 알 수 있다는 것이다.
속임수가 적고 골든크로스(또는 데드크로스)보다 빨리 트렌드의 변화를 알고자 하는 희망에서 태어난 것이 MACD인 것이다.

상승추세가 나중에 그것이 종료 하향추세로 바뀌는 전환점이 데드크로스이지만, 데드크로스는 단기와 중기 이동평균선의 간격이 좁아져서 데드크로스가 가깝다는 것을 알 수 있다.
이것이 MACD의 본질이다.

2. MACD의 본질

290.png

가격이 상승에서 돌아설 때 두 개의 이동 평균선은 기간이 짧은 EMA(이하 단기 EMA)가 빠르게 상승하고 기간이 긴 EMA(이하 장기 EMA)는 천천히 상승하는 성질이 있다. 따라서 하강에서 상승으로 가격이 변화하면 MACD는 서서히 상승한다. (단기 EMA- 장기 EMA)
반대로 가격이 상승에서 하강으로 돌아설 때 단기 EMA는 빠르게 하강하고, 장기 EMA는 천천히 하강하는 성질이 있다.
따라서 가격이 상승에서 하강으로 변화하면 MACD는 서서히 하강한다.

이윽고 단기 EMA는 장기 EMA 를 하방으로 크로스하고, MACD는 마이너스 측에서 하강해 간다.

이동 평균선에 대해서 복습을 하고 가자.
역할 : 가격의 움직임을 부드럽게 하여 트렌드를 알기 쉽게 한다.
단점 : 이동 평균선은 보온재 수 있으며, 사고 사인 판매 사인이 나오는 것이 늦어 쉽다.

이동 평균선의 움직임 지연을 수정 한 것이 MACD이다.

MACD의 본질은 가격의 움직임을 예측하는데 있다
MACD 천장 - 상승 트렌드에서 가격이 상승 힘을 약화 MACD는 천장을 친다.
MACD의 바닥 - 하향 추세에서 가격이 하향 힘을 약화 MACD는 바닥을 친다.

MACD의 기본적인 견해
MACD의 상승 ≒ 가격의 상승 경향
MACD의 하락 ≒ 가격의 하향 추세

조금 진화된 해석
· 가격이 상승하고 있는데 MACD가 하강을 시작하면 천장이 가까운 것으로 추정된다.
· 가격이 하락하고 있는데 MACD가 상승을 시작하면 바닥이 가까운 것으로 추정된다.

3. MACD와 MACD2란?

300.png

301.png

A. MACD와 MACD2의 아이디어는 동일하다.

MACD는 두 개의 이동평균선(EMA)의 간격 차이로 가격 동향을 예측하는 것이고, MACD2는 MACD와 시그널의 간격차이로 가격 동향을 예측하는 것이다.

302.png

B. MACD2가 예측하는 것

※ MACD와 시그널의 차이 (= 히스토그램)는 데드 크로스를 향해 점점 축소 해 나간다.

MACD의 상승력이 MAX 일 때 MACD와 시그널의 차이 인 히스토그램은 확대된다.
MACD의 하강 힘이 MAX 일 때 MACD와 시그널의 차이 인 히스토그램은 마이너스 방향으로 최대가 된다.

C. MACD의 0(제로)는 MACD와 시그널의 크로스를 의미한다.

MACD가 제로가되는 것은 두 개의 이동 평균선 (EMA)이 교차하는 곳에서 단기와 중기의 EMA 값이 동등하게되기 때문이다.
단기 EMA- 중기 EMA = 제로가 된다.
MACD가 제로라인 위로 올라가는 것은 두 개의 EMA가 골든크로스하는 것을 보여준다.
MACD가 제로라인 아래로 내려오는 것은 두 개의 EMA가 데드크로스하는 것을 보여준다.
히스토그램이 마이너스에서 제로 라인을 넘어 오는 것은 MACD와 시그널이 골든 크로스하는 것을 의미하고, 히스토그램이 플러스에서 제로 라인을 끼어 들어 오는 것이, MACD와 시그널이 데드 크로스하는 것을 의미한다.

[지표] MACD(Moving Average Convergence Divergence)

MACD는 약자에서 알 수 있듯이 이동평균을 사용하는 지표이다. 이동평균선은 이해하기 편하고 해석이 쉬워 많이 사용하지만, 매매신호가 너무 늦게 나타난다는 단점이 존재한다. MACD는 이러한 단점을 극복하기 위해 개발된 것으로, 산술이동평균이 아닌 지수이동평균을 사용한다.

MACD는 다음과 같이 세 가지 값을 이용해 계산되며, 지수이동평균을 구하는 방법과 MACD선, Signal선을 구하는 식은 아래와 같다.

  • MACD의 지수이동평균(보통 9일)
  • 주가 중기 지수이동평균(보통 12일)
  • 주가 장기 지수이동평균(보통 26일)

MACD = 12일 지수이동평균 - 26일 지수이동평균

Signal = MACD의 9일 지수이동평균

$MA_n : n $일 지수이동평균

$D_i : i $번째 날의 주가

$EP : $ Exponential Percentage로, $ EP = \frac$이다 .

첫 번째 날의 $MA$의 경우 $MA_$이 없으므로 Simple moving average로 구한다.

이렇게 구한 MACD는 두 지수이동평균선의 차이를 의미하는데, 이 MACD값이 최대 혹은 최소가 되는 순간(두 이평선 간의 차이가 극대화되는 순간)이 주가의 바닥이거나 꼭지라고 해석할 수 있다.

다만 실제 매매에 사용하기 위해선 어느 지점이 MACD의 최대 혹은 최소값인지를 알아야 하기 때문에 Signal을 사용한다. 매매타이밍은 MACD가 Signal을 상향돌파할 때가 매수 시그널이고, MACD가 Signal을 하향돌파할 때가 매도 시그널이다.

이러한 시그널과 함께 봐야할 게 MACD 곡선의 현재 값(음수인지 양수인지)인데, 만약 MACD가 양수라면 단기 지수이동평균이 장기 지수이동평균보다 높다, 즉, 현재 시장이 상승세에 있다는 뜻이며, 반대로 MACD가 음수라면 현재 시장이 하락세에 있다는 뜻이다.

MACD의 계산

이번에 소개해 드릴 것은, 가격의 이동평균을 기초로 한 MACD지표입니다.

이것은 1970년대 Gerald Appel에 의해 개발되었습니다.

중간에 이해가 안되시면, 아래 포스팅을 참조하시길 바랍니다.

이동평균(Moving Average)의 계산방법 및 의미

이전에 포스팅에서, RSI수치를 구할 때 이동평균(Moving average)를 이용한다고 하였는데요, 이번에는 이것에 대해 더 자세히 알아보려고 합니다. primestory.tistory.com/8 RSI(Relative Strength Index) 계산방..

보통 사용하는 MACD는 다음과 같습니다.

MACD(12, 26, 9)를 기준

MACD = (12일 EMA) - (26일 EMA)

MACD Signal = MACD에 대한 9일 EMA

여기서, EMA는 Exponentially weighted Moving Average(지수이동평균)입니다.

n일 EMA라는 뜻은 α = 1/n 이라는 뜻입니다.

옛날에는 주말같은 때에는 장이 쉬었기 때문에 12일은 2주, 26일은 한 달, 9일은 1주 반을 나타냅니다.

2) 의미 및 매매전략

12일 EMA는 단기이동평균을 나타내고, 26일은 장기이동평균을 나타냅니다.

이동평균계산식을 보시면 알겠지만, 기간이 길수록 현재의 값의 변화에 더 느리게 반응하고, 현재의 변화를 더 적게 반영하므로, 장기적인 의미를 갖습니다.

따라서, MACD는 단기이동평균과 장기이동평균의 차이 입니다.

이것은 단기적인 상승/하락의 수준이 장기적인것과 비교해서 어느정도 수준인지를 나타냅니다.

(이러한 차이는 줄어들기도 하며 다시 커지기도 합니다. 이 때, 차이가 줄어들어 결국 만나는 것을 MACD에서 C인 Convergence, 이후 다시 멀어지는 것을 D인 Divergence라고 합니다.)

MACD Signal은 이렇게 계산된 MACD를 바탕으로 다시한번 EMA를 구한 것 입니다.

아래는 비트코인의 MACD예시입니다.

MACD가 검정색, MACD Signal이 빨간색, 히스토그램은 (MACD - MACD Signal)입니다.

MACD Signal은 MACD를 이동평균 한 것이므로, MACD보다 더 느리게 움직이는 것을 볼 수 있습니다.

이러한 점을 통해, MACD가 MACD Signal선으로 떨어져서 만날 때 매도를, 올라가서 만날 때 매수를 하는 전략 을 사용합니다. 또한, 가격과 MACD의 움직임이 다른 것을 보고 Divergence를 판별 하여 매수/매도 하는 전략이 있습니다.

(이것을 보고 골든 크로스, 데드 크로스 이렇게 부르는 것 같습니다만..)

많은 분들이 이러한 전략을 사용하는 것 같은데. 사실 MACD만으로 매매 전략을 설정하는 것은 문제가 있습니다. 왜냐하면 MACD는 근본적으로 가격만으로 계산된 후행 지표(lagging indicator) 때문입니다. 의미적으로 어떠한 새로운 정보도 주지 않기 때문에, 사실상 차트만을 보는 것과 차이가 없습니다. 따라서, 이것만을 가지고 매매전략을 세우는 것은 좋지 않습니다. 가격의 추세(trend)를 보여주기 위한 지표로서 활용되는것이 적합합니다.

ad. 개인적으로는 MACD 지표는 제가 선호하지 않습니다. 왜냐하면 기간을 설정해야하는 것이 3군데나 있고, 지표를 의미적으로 해석하기가 뭔가 애매하기 때문입니다. 추세는 단순히 차트를 보거나 MA(moving average)를 설정하는 것으로 해결하는 편입니다.

MACD의 계산

Python으로 MACD 및 MACD Oscillator 구하기 편입니다.

MACD란 이동평균수렴확산지수 (Moving Average Convergence & Divergence)입니다.

Gerald Appel이 개발하였으며 이동평균선끼리의 차이를 통해 주가 흐름을 알아보는데 쓰이는 지표입니다.

Convergence은 모인다는 뜻이고 Divergence은 흩어진다는 뜻으로 단기/장기이동평균선이 멀어졌다가 다시 가까워지는 정도를 표시하는 지표입니다.

MACD, MACD Oscillator의 계산 방법으로부터 의미를 더 살펴 보겠습니다.

MACD : 12일 지수이동평균선 - 26일 지수이동평균선
MACD Signal = MACD의 9일 단순이동평균선
MACD Oscillator = MACD의 계산 MACD Signal 값을 막대로 표현한 보조지표

MACD란 12,26일을 기준으로 한 지수이동평균선의 차이입니다.

최근 12일간 평균주가가 26일간 평균주가를 상승돌파 하면 최근 흐름을 상승이라고 판단할 수 있습니다.

반대의 경우인 12일간 평균주가가 26일간 평균주가를 하락돌파한다면 최근 주가가 과거 대비 더 하락하고 있다고 판단할 수 있습니다. 이 차이에 따라 MACD 값은 음수가 될 수도 있고 양수가 될 수도 있습니다.

정리하면 MACD의 활용도, 의미는 이렇습니다.

(1) MACD가 증가하면 상승국면이라고 할 수 있습니다. 특히 0보다 작았다가 양수로 변할 때 추세가 전환됐다고 할 수 있습니다.

(2) MACD가 Signal을 상향돌파하면 매수, 하향돌파하면 매도 타이밍이라고 생각할 수 있습니다.
(상향돌파한다는 것은 최근 12일 주가가 상승흐름이 과거 26일 보다 빠르다는 것을 의미하기 때문입니다.
물론 주식 시장에 절대적이란 없어서 돌파했다가 바로 고꾸라질 수도 있습니다.)

이를 Python으로 계산하기 전에 생각해봐야 할 것이있습니다.

바로 지수이동평균인데요. MACD는 12,26일간의 지수이동평균을 기준으로 합니다.

이전 포스팅에서 사용한 이동평균선은 단순 이동평균선입니다. 단순이동평균이란 평균값을 구하는 대상을 모두 같은 가중치로 보는 것입니다.

예를 들어 1,2,3일의 종가로 이동평균선을 구합니다. 계산식은 이렇습니다.

여기서 4일 종가를 추가하면

이렇게 계산하면 됩니다. 구하는 대상의 가중치가 차이가 없이 계산하기 때문에 평균을 구하는 항목이 추가되면 분자, 분모에 하나씩 추가해주면 됩니다.

그러면 지수이동평균은 최근 추가된 데이터의 가중치를 높이는 방식입니다.

exponential moving average (EMA), exponentially weighted moving average (EWMA)지수 이동 평균, 지수가중이동평균, 가중이동평균
sn+1=αxn+(1−α)sn
xn: 최신 정보sn: 과거 종합 정보α: 윤활계수 ( 0sn+1=αxn+(1−α)αxn−1+(1−α)2αxn−2+⋯+(1−α)n+1s0
→ 과거의 정보일수록 가중치가 점점 작아짐

이에 대한 계산을 Python 코드를 통해 해보겠습니다.

위 코드에서 살펴볼 부분 이렇습니다.

(1) 지수이동평균을 구하기 위해 DataFrame의 ewm 함수를 사용했습니다

(2) ewm 함수 사용에 param으로 전달된 span은 기간입니다.

(3) ewm 함수 사용에 param으로 전달된 adjust은 default가 True지만 False와 비교하면 다른 의미를 가지고 있습니다.

default 설정인 adjust=True는 지수이동평균의 가중치 통해 초기값의 불균형을 조정해준다는 뜻이고

adjust=False은 그런 조정 없이 recursive하게 계산한다는 뜻이지만 이는

구하고자 하는 k번째 항이 무한하다는 설정이므로 MACD에서 사용하는 특정일(유한성)의 사용으로 다소 적절하지 않을 수도 있으나, 초기시점(beginning period)의 조정을 필요로 하지 않아서 adjust를 False라고 설정하였습니다.

(adjust=False는 항을 무한하다고 설정하여 y(t) 식을 간단히 하였기에 실제로 adjust=True와 비교하면 계산 속도가 더 빠르다는 것을 알 수 있습니다. 또한 계산한 값도 둘이 근소한 차이가 있습니다.)

출처 : https://pandas.pydata.org/pandas-docs/stable/user_guide/computation.html#exponentially-weighted-windows

같이 보시면 좋을 글

[공지] 쉽게 따라 만드는 파이썬 주식 자동매매 시스템 출간

2021년 10월 14일, 길벗 출판사에서 '쉽게 따라 만드는 파이썬 주식 자동매매 시스템'이 출간되었습니다. 기존 판매하던 전자책 '주식매매프로그램, 쉽게 따라 만드는 노하우와 소스를 드립니다.'


0 개 댓글

답장을 남겨주세요