Python finterstellar를 사용하여 MACD로 주식 매매 시그널 만들기

마지막 업데이트: 2022년 3월 17일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
MACD 예

MACD의 계산

먼저 핀터스텔라가 처음이라면 이전 글을 보고 와주세요.

MACD (Moving Average Convergence Divergence)

MACD 는 이동평균수렴확산지수라고 말하며, 대표적인 보조 지표 중 하나입니다.

MACD 를 계산할 때 MA (Moving Average)를 사용하여 주가 추이를 보면, 몇 일간의 누적 데이터가 필요하므로 실제 추이보다 늦어질 수 밖에 없습니다.

이를 해결하기 위해 최근의 데이터에 더 높은 가중치를 주고 계산한 EMA (Exponential Moving Average)를 사용합니다.

EMA 를 사용하여 MACD 의 보조 지표들을 계산할 수 있습니다.

수식을 보시면, MACD 는 12일 간의 단기 이동평균에서 26일 간의 장기 이동평균을 빼서 만듭니다.

따라서, 양수면 상승 추세, 음수면 하락 추세라는 것을 알 수 있죠.

MACD signal 은 9일간의 MACD 이동평균으로 MACD 의 후행적 특징을 개선하는 데 도움이 됩니다.

MACD OscillatorMACD 의 강도 및 변화 추이를 쉽게 확인하기 위해 만들어진 지표입니다.

투자전략으로는 MACD가 양수이면 매수, 음수이면 매도를 하는 전략MACD Oscillator가 양수면 매수, 음수면 매도하는 전략이 있습니다.

MACDMACD signal 을 상향 돌파하면 매수하고 하향 돌파하면 매도하라는 말과 같은 말입니다.

백테스팅

이번에는 테슬라의 주가로 한 번 테스트를 해보겠습니다.

MACD 역시 finterstellar 에서 제공이 됩니다.

기본 날짜는 위와 같고, 변경도 물론 가능합니다.

이해하기 쉬운 그래프가 보이네요.

이제, 2가지의 매매 전략을 각각 테스트 해보겠습니다.

먼저, MACD 를 사용한 전략입니다.

배웠던 대로 수익률도 계산해보도록 하겠습니다.

보라색 부분이 주식을 들고 있던 부분인데, 한 번의 손실이 있었지만 최종적으로 큰 이득을 얻은 모습을 볼 수 있네요.

다음으로 바로 MACD Oscillator 를 사용한 전략을 보겠습니다.

MACD 에 비해 상당히 빈번한 매매가 발생했네요.

대충보니 MACD 에 비해 낮은 수익을 얻은 것처럼 보이네요.

투자 성과분석

이제 각각의 성과를 눈으로 살펴보겠습니다.

MACD MACD Oscillator

그래프에서 본 것처럼 테슬라의 경우, 올해는 MACD 전략이 더 유효한 전략이었네요.

심지어 평균 수익률은 -임에도 벤치를 웃도는 수익률을 보입니다.

아마도 마지막에 매도를 하지 않고 들고 있어서겠죠. ^^

위험에 대한 방어는 두 전략모두 벤치보다 나은 모습을 보이고, 샤프 비율도 MACD 를 사용한 전략쪽이 좀 더 나은 모습을 보이네요.

맺음말

이번 포스팅에서는 finterstellar module을 사용하여 MACD 를 이용한 매매에 대해 살펴보았습니다.

이동 평균 수렴 및 발산 (MACD)

오늘은 이동 평균에서 파생된 다른 기술 지표인 이동 평균 수렴 및 발산 (MACD, moving average convergence/divergence) 에 대해서 알아보겠습니다 .

MACD는 가격이 특정 방향으로 추세를 보이고 있는 추세 시장에서 일반적으로 자주 사용되는 모멘텀 오실레이터입니다.

MACD를 사용하여 주식 가격 추세의 방향 또는 심각도의 변화를 식별합니다 .

MACD 는 주식 가격의 최근 Python finterstellar를 사용하여 MACD로 주식 매매 시그널 만들기 모멘텀이 기본 추세의 변화를 나타내는 시기를 찾는데 도움이 됩니다 .

투자자가 포지션 진입 , 추가 또는 종료 할 시기를 결정하는 데 도움이 될 수 있습니다 .

이동 평균 수렴 및 발산 (MACD)은 단 기간 EMA (12 일 지수 이동 평균 ) 에서 장 기간 Python finterstellar를 사용하여 MACD로 주식 매매 시그널 만들기 EMA(26 일 지수 이동 평균 ) 를 뺀 계산 값입니다.

MACD = 12일 EMA - 26일 EMA

두 개의 이동 평균을 보면 단 기간 EMA 는 장 기간 EMA 가 좁혀지거나 멀어지는 것을 볼 수 있습니다 . 따라서 두 이동 평균의 차는 0 의 값을 기준으로 위아래로 오르락내리락하게 됩니다 .

MACD 예

12 일 EMA 가 26일 EMA 위에 있으면 MACD 가 양수

12 일 EMA 가 26일 EMA 아래에 있으면 MACD 가 음수

MACD 분석 구성 요소

  • MACD
  • 신호선 (9 일 EMA)
  • 히스토그램 (MACD 라인과 신호선 의 차이) : 크로스 오버가 발생할 수 있는 시기를 보여줌

MACD 가 신호선 위에 있으면 히스토그램은 MACD 의 기준선 위에 있습니다 .

MACD 가 신호선 아래에 있으면 히스토그램은 MACD 의 기준선 아래에 있습니다 .

MACD 의 히스토그램을 사용하여 강세 또는 약세 모멘텀이 높은 시기를 식별합니다 .

MACD 기본적인 사용 방법

  • 일반적으로 매수 , 매도 신호를 생성하여 투자 종목의 과매수 ( 잠재적으로 비싸짐 ) 또는 과매도 ( 잠재적으로 저렴함 ) 를 결정하는 데 사용됩니다 .
  • Python finterstellar를 사용하여 MACD로 주식 매매 시그널 만들기
  • MACD 가 신호선 위로 상승하면 강세 신호로 매수 시기
  • MACD 가 신호선 아래로 떨어지면 약세 신호로 매도 시기

MACD 는 후행 지표입니다 . 결국 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를 활용한 매매기법 확인 및 적용
  • 매매기법 별 시뮬레이션 및 Python finterstellar를 사용하여 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)처리 합니다.Python finterstellar를 사용하여 MACD로 주식 매매 시그널 만들기

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

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

3. EMA적용 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) 이하 데드크로스가 있었습니다.

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

MACD 보조 지표 보는 방법으로 매수 매도 타이밍 잡기

MACD는 이동평균 수렴확산 지수 (moving average convergence divergence)의 약자로 1970년대 후반에 제럴드 아펠(Gerald Appel)이 만든 주가의 기술적 분석에 사용되는 지표이다.[1] MACD는 주가 추세의 강도, 방향, 모멘텀 및 지속 시간의 변화를 나타내도록 설계되었다.

MACD는 과거의 가격 데이터(대부분 증가)로부터 계산된 세 가지 시계열의 모음이다. 이러한 세 가지 시계열은 MACD 고유의 “신호”, “평균”, “확산”이다. MACD는 장기 지수이동평균과 단기 지수이동평균 간의 차이이다. 평균은 MACD 자체의 지수이동평균이다.

2, MACD 매수 매도 하는 법

MACD 선과 시그널선의 움직임, 그리고 0선을 기준으로 상단 혹은 하단에 위치하는지에 대해 유심히 관찰하시면 되겠습니다!

MACD

MACD

기본적으로 MACD 0선 상향돌파 할때 산다. 0선 하향돌파 할때 판다.

0 돌파에서 샀는데 MACD 선은 지속적으로 플러스 값을 가지고 있으면 상승국면에 있기 때문에 지속적으로 포지션을 유지하는 것이 좋다.

MACD는 추세선이기 때문에 주가의 추세선과 같이 보는 것이 좋다. 주가의 추세선에서 하향 돌파가 예상되면 MACD 선을 같이 참고하여 매도 시점을 찾는 것이 좋다.

MACD1

MACD1


0 개 댓글

답장을 남겨주세요