MACD의 계산

마지막 업데이트: 2022년 5월 25일 | 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(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 가 Signal 선을 상향 돌파하면 , MACD 가 9 일동안의 평균보다 높게 형성되었다는 뜻이므로 상승추세로 파악하고 매수합니다 .

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

2) Oscillator 의 전환과 초과매수 (Overbought) / 초과매도 (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 지표도 이동평균선을 이용한 만큼 후행성 지표라는 것을 완전히 극복할 수 없기 때문에 급격한 상승이나 하락은 따라갈 수 없다는 단점이 있습니다 . 또한 횡보구간에는 골든 크로스와 데드 크로스의 출현 빈도가 많아지고 가격 상승이 둔화 됐음에도 하락세로 반전하지 않고 상승과 하락을 이어가며 양의 값을 유지하는 경우 등의 신뢰할 수 없는 신호가 많이 나오기 때문에 다른 것과 병행해서 매매에 참조 하여야 하겠습니다 .

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 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일, 길벗 출판사에서 '쉽게 따라 만드는 파이썬 주식 자동매매 시스템'이 출간되었습니다. 기존 판매하던 전자책 '주식매매프로그램, 쉽게 따라 만드는 노하우와 소스를 드립니다.'

#3. MACD

MACD 는 이동평균수렴발산(Mean Average Convergence Divergence)의 약자로, 단기 이동평균선과 장기 이동평균선이 서로 가까워지거나(수렴) 멀어지는(발산) 원리를 이용하여 만들어졌다.주가 흐름의 추세를 MACD의 계산 확인하고 추세의 강도와 지속성을 파악하는데 활용되는 대표적인 추세추종형 보조지표이다.

2. 산출법

MACD는 단기(12일) 이동평균에서 장기(26일) 이동평균을 차감 하는 방식으로 계산되는데, 최근의 주가 변화를 더 강조하는 지수이동평균이 이동평균으로 사용된다. 서로 다른 길이를 가진 두 이동평균을 비교함으로써, MACD는 주가 추세의 변동을 측정 한다.

단기 이동평균선이 장기 이동평균선 위에 있다면 양수값을, 단기 이동평균선이 장기 이동평균선 아래에 있다면 음수값을 갖게 되며, MACD가 기준선(0)에서 멀어질수록 두 이동평균선의 거리가 서로 멀어지고 있음을 나타낸다 .

MACD 표시기 설명

MACD 표시기 설명

이동 평균 수렴 다이버전스 (MACD)는 트레이더가 기술적 분석 (TA)을 위해 널리 사용하는 오실레이터 유형 지표입니다 . MACD는 주식, 암호 화폐 또는 기타 거래 가능한 자산 의 모멘텀을 결정하기 위해 이동 평균 을 사용하는 추세 추종 도구입니다 .

1970 년대 후반 Gerald Appel이 개발 한 Moving Average Convergence Divergence 지표는 이미 발생한 가격 이벤트를 추적하므로 후행 지표 범주에 속합니다 (과거 가격 조치 또는 데이터를 MACD의 계산 기반으로 신호를 제공함). MACD는 시장 모멘텀과 가능한 가격 추세를 측정하는 데 유용 할 수 있으며 많은 거래자들이 잠재적 인 진입 및 종료 지점을 파악하는 데 활용합니다.

MACD의 MACD의 계산 메커니즘에 뛰어 들기 전에 이동 평균 의 개념을 이해하는 것이 중요합니다 . 이동 평균 (MA)은 미리 정의 된 기간 동안 이전 데이터의 평균 값을 나타내는 단순한 선입니다. 금융 시장의 맥락에서 이동 평균은 기술 분석 (TA)에서 가장 인기있는 지표 중 하나이며 단순 이동 평균 (SMA)과 지수 이동 평균 (EMA)의 두 가지 유형으로 나눌 수 있습니다. SMA는 모든 데이터 입력에 동일하게 가중치를 부여하지만 EMA는 가장 최근 데이터 값 (최신 가격 포인트)에 더 많은 중요성을 할당합니다.

MACD의 작동 원리

MACD 지표는 두 개의 지수 이동 평균 (EMA)을 빼서 메인 라인 (MACD 라인)을 생성 한 다음 신호 라인을 나타내는 다른 EMA를 계산하는 데 사용됩니다.

또한 두 라인 간의 차이를 기반으로 계산되는 MACD 히스토그램이 있습니다. 히스토그램은 다른 두 선과 함께 제로 선이라고도하는 중심선 위와 아래로 변동합니다.

따라서 MACD 표시기는 0 선을 중심으로 움직이는 세 가지 요소로 구성됩니다.

MACD 라인 (1) : 상승 또는 하락 모멘텀 (시장 추세)을 결정하는 데 도움이됩니다. 두 개의 지수 이동 평균 (EMA)을 빼서 계산합니다.

신호 라인 (2) : MACD 라인의 EMA (보통 9주기 EMA). 신호 라인과 MACD 라인의 결합 분석은 잠재적 반전 또는 진입 및 출구 지점을 파악하는 데 도움이 될 수 있습니다.

히스토그램 (3) : MACD 라인과 신호 라인의 발산 및 수렴을 그래픽으로 표현한 것입니다. 즉, 히스토그램은 두 선의 차이를 기반으로 계산됩니다.

MACD 표시기 설명

MACD 라인

일반적으로 지수 이동 평균은 자산의 종가에 따라 측정되며 두 EMA를 계산하는 데 사용되는 기간은 일반적으로 12 개 기간 (빠름) 및 26 개 기간 (느림)으로 설정됩니다. 기간은 다른 방식 (분, 시간, 일, 주, 월)으로 구성 할 MACD의 계산 수 있지만이 문서에서는 일일 설정에 중점을 둡니다. 그럼에도 불구하고 MACD 지표는 다양한 거래 전략을 수용하도록 맞춤화 할 수 있습니다.

표준 시간 범위를 가정하면 MACD 라인 자체는 12 일 EMA에서 26 일 EMA를 빼서 계산됩니다.

앞서 언급했듯이 MACD 라인은 0 선 위와 아래로 진동하며, 이것이 중앙선 크로스 오버를 알리는 신호로, 12 일 및 26 일 MACD의 계산 EMA가 상대 위치를 변경할 때 거래자들에게 알립니다.

기본적으로 신호 라인은 메인 라인의 9 일 EMA에서 계산되므로 이전 움직임에 대한 추가 정보를 제공합니다.

항상 정확하지는 않지만 MACD 선과 MACD의 계산 신호선이 교차 할 때 이러한 이벤트는 일반적으로 추세 반전 신호로 간주되며, 특히 MACD 차트의 끝 (0 선보다 훨씬 위 또는 아래)에서 발생합니다.

MACD 히스토그램

히스토그램은 MACD 라인과 신호 라인의 상대적인 움직임을 시각적으로 기록한 것입니다. 다른 것에서 하나를 빼서 간단히 계산됩니다.

그러나 세 번째 움직이는 선을 추가하는 대신 히스토그램이 막대 그래프로 만들어져 시각적으로 읽고 해석하기가 더 쉽습니다. 히스토그램 막대는 자산의 거래량과 관련이 없습니다.

MACD 설정

설명했듯이 MACD의 기본 설정은 12, 26 및 9 기간 EMA를 기반으로합니다. 따라서 MACD (12, 26, 9)입니다. 그러나 MACD의 계산 일부 기술 분석가와 차트 전문가는보다 민감한 지표를 생성하기 위해 기간을 변경합니다. 예를 들어 MACD (5, 35, 5)는 주간 또는 월간 차트와 같은 더 긴 기간과 함께 전통적인 금융 시장에서 자주 사용되는 것입니다.

암호 화폐 시장의 높은 변동성으로 인해 MACD 지표의 민감도를 높이는 것은 더 많은 허위 신호와 오해의 소지가있는 정보를 초래할 수 있기 때문에 위험 할 수 있습니다.

MACD 차트 읽는 방법

이름에서 알 수 있듯이 Moving Average Convergence Divergence 지표는 이동 평균 간의 관계를 추적하며 두 라인 간의 상관 관계는 수렴 또는 발산으로 설명 될 수 있습니다. 선이 서로를 향해 중력을 끌 때 수렴하고 멀어 질 때 발산합니다.

여전히 MACD 지표의 관련 신호는 MACD 라인이 중심선 위 또는 MACD의 계산 아래 (중심선 교차) 또는 신호선 위 또는 아래 (신호선 교차)를 교차 할 때 발생하는 소위 교차와 관련이 있습니다.

중심선과 신호선 교차는 여러 번 발생할 수 있으며, 특히 암호 화폐와 같은 휘발성 자산과 관련하여 많은 거짓 및 까다로운 신호를 생성 할 수 있습니다. 따라서 MACD 지표에만 의존해서는 안됩니다.

중심선 크로스 오버

중심선 교차는 MACD 선이 양수 또는 음수 영역에서 이동할 때 발생합니다. 중심선 위로 교차 할 때 양의 MACD 값은 12 일 EMA가 26 일보다 크다는 것을 나타냅니다. 반대로 MACD 선이 중앙선 아래를 지나면 마이너스 MACD가 표시되며 이는 26 일 평균이 12 일보다 높다는 것을 의미합니다. 다시 말해, MACD 라인이 양수이면 상승 모멘텀이 더 강하고, 음수이면 하락 모멘텀이 더 강함을 의미 할 수 있습니다.

신호선 크로스 오버

MACD 선이 신호선 위로 교차하면 트레이더는 종종이를 잠재적 인 구매 기회 (진입 지점)로 해석합니다. 반면에 MACD 선이 신호선 아래를 지나갈 때 트레이더는이를 매도 기회 (출구 지점)로 간주하는 경향이 있습니다.

신호 교차가 도움이 될 수 있지만 항상 신뢰할 수있는 것은 아닙니다. 또한 위험을 최소화하는 방법으로 차트에서 발생하는 위치를 고려할 가치가 있습니다. 예를 들어, 크로스 오버가 매수를 요구하지만 MACD 라인 지표가 중앙선 (음수) 아래에 있으면 시장 상황은 여전히 ​​약세로 간주 될 수 있습니다. 반대로 신호 라인 크로스 오버가 잠재적 인 판매 포인트를 나타내지 만 MACD 라인 지표가 양수 (0 선 위)이면 시장 상황은 여전히 ​​강세일 가능성이 높습니다. 이러한 시나리오에서 매도 신호를 따르면 더 큰 추세를 고려할 때 더 많은 위험이 발생할 수 있습니다.

MACD 및 가격 차이

중심선 및 신호선 교차와 함께 MACD 차트는 MACD 차트와 자산 가격 행동 간의 차이를 통해 통찰력을 제공 할 수도 있습니다.

예를 들어, 암호 화폐의 가격 행동이 더 높게 상승하고 MACD가 더 낮은 고점을 생성하면 하락 다이버전스가 발생하여 가격 상승에도 불구하고 상승 모멘텀 (구매 압력)이 예전만큼 강하지 않음을 나타냅니다. . 하락 다이버전스는 가격 반전에 선행하는 경향이 있기 때문에 일반적으로 판매 기회로 해석됩니다.

반대로 MACD 라인이 자산 가격의 MACD의 계산 두 개의 하강하는 저점과 일치하는 두 개의 상승하는 저점을 형성하는 경우 이는 강세 다이버전스로 간주되어 가격 하락에도 불구하고 구매 압력이 더 강하다는 것을 의미합니다. 강세 다이버전스는 가격 반전에 선행하는 경향이 있으며, 잠재적으로 단기 바닥 (하향 추세에서 상승 추세로)을 의미합니다.

마무리 생각

그것이 올 때 기술적 분석 , 이동 평균 수렴 발산 발진기은 가장 유용한 도구 중 하나입니다. 상대적으로 사용하기 쉬울뿐만 아니라 시장 동향과 시장 모멘텀을 파악하는 데 매우 효과적이기 때문입니다.

그러나 대부분의 TA 지표와 마찬가지로 MACD는 항상 정확하지는 않으며 특히 휘발성 자산과 MACD의 계산 관련하여 또는 약세 또는 횡보 가격 조치와 관련하여 수많은 거짓 및 오도 신호를 제공 할 수 있습니다. 결과적으로 많은 거래자들은 위험을 줄이고 신호를 추가로 확인하기 위해 RSI 지표 와 같은 다른 지표와 함께 MACD를 사용 합니다.

[AT] 21. MACD 지표에 대한 구현 및 매매시점 예측 (5)

블로그 이미지

지난 시간을 되돌아 보면, SMA (Simple Moving Average)를 통해서 MACD와 그 관련된 지표를 구해서 무엇인가를 해보았습니다. 그래서 얻은 1차 결론은.

삼성전자로 적용한 결과는 아래의 조건일때, 생각하지않고 단순 투자를 할 경우 SMA상황에서 가장 큰 수익을 얻을 수 있습니다.

(4) 조건 : MACD가 0선 아래서 MACD Signal과 GC(Golden Cross)하고, 매수는 종가, 매도는 종가

하지만 증권사에서 제공하는 HTS에 나오는 지표와는 다소 다른 값을 표출하고 있음을 확인했습니다. 그 이유는 MACD를 도출하는데 사용하는 값이 SMA가 아니고 EMA (Exponential Moving Average)라는 다른 가중평균식을 사용하기 때문입니다.

증권사들이 EMA를 사용하는 이유는 다 있습니다. 왜 그럴까요?? 이제 알아보도록 하겠습니다.

  • MACD에 대한 정의 및 구현
  • 구현된 결과에 대한 정합성 확인
  • MACD를 활용한 매매기법 확인 및 적용
  • 매매기법 별 시뮬레이션 및 실험실
  • 향상된 이동평균산정 법칙 적용 및 실험실

이동평균값을 구하는 방법은 여러가지가 있지만, 여기에서는 모든 것을 알아보지는 않을 것 입니다. 가장 일반적인 SMA는 이미 알아보았고, MACD에서 사용하는 EMA만 추가로 알아보겠습니다.

1. EMA (Exponential Moving Average)

EMA는 단순히 용어로만 풀어보면, 지수이동평균 입니다. 뭔가 기본 이동평균에서 지수값을 추가인자로 해서 뭔가를 하는 느낌이네요.

사실 지수이동평균을 사용하는 목적은, 최근에 적재되는 데이터에 대해서는 그 영향력을 크게하고, 과거의 오래된 데이터에 대해서는 그 영향력은 낮게하기 위함입니다. 사실 주가에 영향을 미치는 요인은 최근의 벌어지는 사건을 반영하는 데이터 일테고. 이미 오래전에 주가 데이터는 영향이 미비하다고 볼 수 있습니다. 그렇다면, 이를 가능하게 하는 것이 바로 가중변수(Weight Multiplier) 입니다.

기존에 SMA는 원하는 기간만큼의 데이터를 다 더하고. 그 결과를 기간으로 나누는 방식으로 아주 간단했으며, 모든 기간에 동일한 가중치를 가지게 됩니다. 하지만 EMA는 가중변수를 통해서 최근의 데이터에 더 가중치를 주는 방식을 사용합니다.

그렇다면 단도직입적으로 구하는 방식을 알아보겠습니다.

(1) 가중변수 구하기 = 2 / (1 + n) 여기서 n은 원하는 기간

(2) EMA 계산 = (금일종가 x 가중변수) + (전일 EMA x (1 - 가중변수))

음청 간단하죠?? 실제로 구현도 음청 간단합니다. 따로 sample로 계산하지 않고 기존에 SMA을 통해서 구한 MACD와 HTS의 데이터값과 백테스팅(Back Testing)을 통해서 확인했던 결과에 같이 비교해 보겠습니다.

2. EMA 구현

주의할 점은 가장 첫 데이터는 EMA를 따로 계산하지 않고, 첫날 종가를 첫 EMA로 합니다. 그리고 그 이후부터 EMA를 구할때 전일 EMA를 활용합니다.

몇줄 안됩니다. 그리고 나름 MA이기 때문에 계산에 사용되었지만, 필요없는 데이터는 NaN(Not a Number)처리 합니다.

그럼. EMA를 적용한 MA12, MA26을 구해서 DataFrame에 넣어 보겠습니다.

너무너무 궁금하지만. HTS를 통해서 다운받은 데이터는 12일 이동평균선, 26일 이동평균선을 SMA방식을 통해서 구현한 값만 존재합니다. 결국 MACD는 그 두 값의 차이이기 때문에. 이후 MACD 지표값을 산출 해보고 비교해 보겠습니다.

3. EMA적용 MACD의 계산 MACD 지표 구하기

MACD를 구할때는 기존에 함수(Function)을 그대로 이용하면 됩니다.

따라서, 별도 언급없이 해당 함수를 통해서 DataFrame안에 넣어줍니다.

이번에는 MACD Signal을 구해보겠습니다. 아참. MACD Signal은 그냥 단순히 9일 이동평균선을 구하듯이 하면 안되고, 이 역시 EMA방식으로 구현해야 합니다. 하지만 우리는 걱정할 것이 없죠. 왜냐하면 EMA를 구하는 함수를 이미 만들었기 때문에. 그냥 호출해서 사용하면 됩니다.

[MACD Signal 구하기]

이제 두근두근. 한번 결과를 HTS의 데이터와 비교해 볼까요??

[Ayotera Trader]

아주 정확히 일치 했음을 확인했습니다. 그렇다면 이제는 마지막 관문인 Cross 포인트를 찾아내서 결과를 DB에 저장해 보도록 하겠습니다.

4. MACD와 MACD Signal의 Cross 구현

SMA로 구현했을때, 우린 모든것을 구현해 놨습니다. 따라서 이것도 그냥 함수를 불러다가 사용하면 됩니다~!!

지금까지 SMA를 통해서 구현한 MACD 매매를 위한 모든 값들을 DB에 저장하였습니다.

5. 구현 검증

그렇다면, 실제로 구현한 값과. HTS를 통해서 보여지는 MACD와 MACD Signal그래프가 동일한지 확인해 보겠습니다.

[종목코드 : 005930, 종목명 : 삼성전자]

측정기간 : 2020년 11월 12일 기준으로 업무일 기준 60일 전까지의 Data

[Ayotera Trader]

보시다시피 9월8일에는 GC(Golden Cross) 이하 골든크로스가 있었고, 11월9일에 역시 골든크로스가 있었습니다. 반대로 9월 23일과 10월 23일에는 DC(Dead Cross) 이하 데드크로스가 있었습니다.

아주 일치하네요. 그럼 잘 개발되어 적용 된 것 같습니다. 그럼 다음에는 전에 해본 시뮬레이션을 통해서 과연 더 나은 이익률을 보여준지 한번 보겠습니다.


0 개 댓글

답장을 남겨주세요