본문 바로가기
프로그래밍

python, 주식(보조지표) - MACD 구하기

by 청청개구리 2022. 7. 17.
728x90

 

 

MACD

Moving Average Convergence & Divergence

'이동 평균 수렴 확산'.... 의미가 팍팍 오지는 않지만 ㅎㅎ

 

많이 등장하는 주요 지표 중 하나라고 한다.

상세는 아래에서 확인.

https://namu.wiki/w/MACD

 

MACD - 나무위키

MACD : 12일 지수이동평균 - 26일 지수이동평균 시그널 : MACD의 9일 지수이동평균 오실레이터 : MACD값 - 시그널값 MACD가 양으로 증가하면 매수한다.MACD가 시그널을 골드크로스하면 매수한다.MACD가 0선

namu.wiki

 이 외에 블로그 들에 워낙 많이들 설명하고 있다.

어떤 방법으로 매매에 사용하는지 노하우를 보이는 블로그 들도 많고...

 

계산해보자.

코드설명

65행 : 데이터를 읽고

69-71행 : MACD에 사용되는 기간값의 상수 설정(전형적인 설정값)

72행 : fast(12일)에 대한 ema(지수이동평균)을 구한다.

           df중 '종가'라는 열을 가지고 구하는데, 지수가중 값을 설정하고서(ewm(), 평활계수는 fastN을 사용하고,

          계산을 위한최소기간은 fastN-1로 설정), 평균(mean()) 을 구하라.

73행 : slowN에 대한 ema 구한다.

74행 : MACD 계산

75행 : 위에서 구한 MACD를 가지고 signalN에 대한 ema 계산

76행 : MACD OSC를 계산

위키독스의 코드를 참고 많이했음.

ewm()의 상세설명은 아래 참조.

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.ewm.html

 

pandas.DataFrame.ewm — pandas 1.4.3 documentation

When ignore_na=False (default), weights are based on absolute positions. For example, the weights of \(x_0\) and \(x_2\) used in calculating the final weighted average of [\(x_0\), None, \(x_2\)] are \((1-\alpha)^2\) and \(1\) if adjust=True, and \((1-\alp

pandas.pydata.org

 

그리하여 계산 결과는,

비슷한 기간의 HTS화면,

거의 비슷한 모양이 나오는거 보니, 계산은 잘 되었나 보다.

이걸로 계산방법은 확인 된거 같은데...

 

 

잠깐, 지수이동평균 EMA는 정체가 뭘까...

 

 

일반적인 이동평균은 일정기간의 단순평균, 그에 비해 EMA는 지수가중이동평균 ? 그런 표현이 나온다.

과거보다 최근의 값이 더 많은 비중을 갖도록 계산되는 방법 이라고함.

아래를 살펴보면 이동평균 이름가진 여러가지 설명을 확인 가능하다.

https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%8F%99%ED%8F%89%EA%B7%A0

 

이동평균 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

단순이동평균, 누적이동평균, 가중이동평균, 지수이동평균, 이동평균회귀모형 등이 나오는데,

왜 MACD는 지수이동평균을 써야 했던 걸까,,,,

급수,,, 재귀적,,, 알파,,, 음,,, 공부하자,,, 

N_SMA 자리에 들어가는 것이 아마 코드상의 fastN, slowN 일 것으로 보인다.

그럼, EMA(지수이동평균)대신 SMA(단순이동평균)를 사용해서 MACD를 계산하면 어떻게 될까?

 

72,73,75 행이 수정되었음.

 

결과는?

EMA로 계산했던 것과 비슷한듯 아닌듯,,, 잘 안 보이니,

위에 보았던 결과와 같이 표시해보자.

EMA(위), SMA(아래) 

역시 다르긴 하다. SMA를 사용한 것이 진폭이 크고, 그런 만큼 피크가 많이 생기는 느낌이다.

이게 어떤 의미를 갖는 것일까? 

 

728x90