본문 바로가기

Little Investment/Study investing

주식 MACD에 대해 알아보기

반응형

주식 MACD에 대해 알아보기

이번 포스트에서는 주식 투자에서 중요한 도구로 사용할 수 있는 기술적 지표 중 하나인 MACD에 대해서 알아보고자 한다.
MACD는 단기적과 장기적 가격 트렌드를 비교해서 매수 또는 매도의 적절한 시점을 알 수 있게 도와주는 보조지표이다.
MACD가 무엇인지 조금 더 디테일하게 알아보고, 어떻게 계산되는지 알아보자.
그리고 Python을 통해 MACD를 계산하고 차트를 생성하는 방법도 함께 알아보자.

목차

MACD란?

MACD(Moving Average Convergence Divergence)는 장기적인 트렌드에 대한 통찰력을 제공하는 기술적 지표이다.
영문 이름 그대로 장기, 단기 이동평균선(MA)간의 수렴(C)발산(D)을 이용한 지표이다.
MACD는 장기적이며 단기적인 이동 평균의 차이를 보여주며 신호로 나타낸 것이다.
이 차이는 MACD 선으로 그려지며, MACD 선의 이동 평균(일반적으로 9일 이동 평균)은 신호 선으로 그려진다.

MACD는 1970년대에 제럴드 아펠(Gerald Appel)이 개발하였다.
그 당시 아펠은 자신이 경영하는 투자 회사에서 주식을 분석하고 예측하는 데 필요한 도구를 찾고 있었다.
아펠이 이 지표를 개발한 주요 이유는 시장의 변동성을 줄이고, 투자 결정을 보다 명확하게 하기 위함이었다.

아펠은 단기와 장기 이동평균의 차이를 측정하여 시장의 트렌드를 파악하려고 했다.
이 때문에 '이동 평균 수렴 확산(MACD)'이라는 이름이 붙었는데, 이는 단기 이동평균과 장기 이동평균이 수렴하거나 확산하는 추세를 나타내기 때문이다.

MACD는 그 이후로 금융 시장에서 매우 인기 있는 지표가 되었다고 한다.
트레이더와 투자자들은 MACD를 사용하여 트렌드의 방향성을 확인하고, 가능한 매수 또는 매도의 시점을 예측한다.
또한 MACD는 시장의 과열 여부나 뒤따를 수 있는 반전의 가능성을 예측하는 데에도 사용된다.


영웅문 MACD

MACD 구성 요소 및 계산

MACD의 구성 요소

  • MACD Line
  • Signal
  • MACD 오실레이터(히스토그램)

✔ MACD Line

MACD는 단기 지수 이동평균(EMA, Exponential Moving Average)에서 장기 지수 이동평균뺀 값이다.
일반적으로, 단기 EMA는 12일을, 장기 EMA는 26일을 사용한다.

\( \text{MACD Line} = \text{12일 EMA}-\text{26일 EMA} \)

여기서 EMA(지수 이동평균)이란 최근 데이터에 더 많은 가중치를 주는 이동 평균 방식이다.
일반적인 이동 평균(MA)가 모든 데이터에 동일한 가중치를 부여하는 반면, EMA는 최근 데이터에 더 큰 가중치를 부여하여 최근 트렌드에 더 잘 반응하도록 설계되어 있다.
EMA의 계산 방식은 다소 복잡할 수 있으나, 많은 차트 도구와 금융 소프트웨어에서는 자동으로 계산해준다.
Python의 Pandas에서도 ewm 메서드를 사용하면 간단하게 계산 가능하다.


✔ Signal

Signal은 MACD 선의 지수 이동평균을 나타낸다.
일반적으로 9일 이동평균이 사용된다.

\( \text{Signal} = \text{MACD Line의 9일 EMA} \)


✔ MACD 오실레이터(히스토그램)

오실레이터 또는 히스토그램은 MACD Line과 Signal의 차이를 막대 그래프 형식으로 표시한다.
MACD 선이 신호 선 위로 올라갈 때 막대는 양수가 되고, MACD 선이 신호 선 아래로 내려갈 때 막대는 음수가 된다.

\( \text{MACD Oscillator} = \text{MACD Line} - \text{Signal} \)


MACD 구성 요소

MACD 보조 지표 추가/설정하기

여기서는 키움증권의 HTS/MTS (영웅문) 기준으로만 설명하겠다.

✔ 영웅문 HTS에서 MACD 추가

영웅문 HTS MACD 추가


  1. 키움종합차트 좌측 상단에 메뉴항목검색에서 MACD를 검색한다.
  2. 검색된 항목 중에서 MACD를 더블 클릭하면 MACD가 차트에 추가된다.

추가된 MACD 차트를 더블 클릭하면 설정창을 확인할 수 있다.

이 설정창에서는 지표조건설정 및 라인의 두께/색상 등을 설정할 수 있다.

short가 단기 이동평균의 일수, long이 장기 이동평균의 일수, signal은 MACD의 이동평균의 일수 이다.

영웅문 HTS MACD 설정


✔ 영웅문 MTS에서 MACD 추가

영웅문 MTS MACD 추가

  1. 차트 메뉴에서 우측에 톱니모양의 설정을 선택한다.
  2. 지표 설정에서 지표명 입력칸에 MACD를 검색한다.
  3. 검색 결과에서 MACD를 클릭한다.
  4. 보조지표 MACD 좌측에 ✔ 모양을 클릭하면 차트에 MACD가 추가된다.

MACD를 추가할 때 우측의 톱니 모양(설정)을 선택하면 MTS에서의 MACD를 설정하는 화면을 확인할 수 있다.

설정 방법은 HTS와 동일하다.


영웅문 MTS MACD 설정

MACD 매매 기법

✔ 골든크로스/데드크로스

MACD Line / Signal 매매 기법


MACD Line이 Signal을 넘어서면 그것은 주식을 매수하거나 매도하는 신호로 간주될 수 있다.
MACD 선이 위로 올라가면(골든크로스) 매수 신호로, 아래로 내려가면(데드크로스) 매도 신호로 해석한다.


✔ MACD 오실레이터 활용

MACD 오실레이터 활용


MACD의 오실레이터가 음봉의 길이가 짧아질 때 매수하고, 양봉의 길이가 짧아질 때 매도하는 방법이 있다.

또한 오실레이터가 양수일 때는 상승 추세, 음수일 때는 하락 추세로 해석할 수 있으므로 가급적이면 음수가 될 때는 매수는 자제해야한다.

MACD의 한계

MACD는 강력한 트렌드 추적 지표이지만, 모든 기술적 분석 도구와 마찬가지로 완벽하지 않다.

MACD 사용시 주의점

  • 지연(Lagging) 발생
    MACD는 이동평균 기반의 지표로, 과거의 데이터를 기반으로 계산된다.
    그러므로, MACD는 주가 변화에 지연이 생기는 특성이 있다.
    이는 트렌드가 이미 시작된 후에야 신호가 발생하며, 이로 인해 투자자는 이익을 놓칠 수 있다.
  • 가격 발산(Divergence)의 해석
    MACD에서의 가격 발산은 잠재적인 트렌드 전환의 신호일 수 있다.
    하지만 이러한 발산이 항상 트렌드 전환을 의미하지는 않는다.
    때때로, 가격은 계속해서 상승하거나 하락할 수 있으며, 이 경우 투자자는 잘못된 매매 결정을 내릴 수 있다.
  • 추세가 없는 시장에서의 제한된 효과
    MACD는 추세 추적 지표로, 강한 트렌드가 있는 시장에서 가장 잘 작동한다.
    반면, 가격이 방향성 없이 움직이는 범위 거래 시장에서는 MACD 신호가 신뢰성이 낮을 수 있다.
  • 과매수/과매도 구간 판단 불가
    MACD는 추세를 파악하는데 유용하지만, 과매수나 과매도 구간을 정확하게 판단하는데는 제한적이다.
    이는 투자자가 시장이 과열되었을 때를 알아채는데 어려움을 겪을 수 있음을 의미한다.
Python으로 MACD 계산 및 차트 생성

마지막으로 Python으로 MACD를 계산하고 차트를 생성하는 코드를 공유하고자 한다.
여기서는 pandas 라이브러리의 ewm 메서드와 차트를 생성하기 위한 matplotlib를 사용할 것이다.
ewm 메서드와 각 코드의 설명은 아래 포스트에서 확인 가능하다.



샘플 데이터


import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('../TEST.csv')
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')

# 단기(12일) 지수 이동평균
df['close'].ewm(span=12, adjust=False).mean()

# 단기(12일) 지수 이동평균
short_ema = df['close'].ewm(span=12, adjust=False).mean()

# 장기(26일) 지수 이동평균
long_ema = df['close'].ewm(span=26, adjust=False).mean()

# MACD Line
macd_line = short_ema - long_ema
df['MACD'] = macd_line


# Signal
# MACD로 9일 지수 이동평균 계산
df['Signal'] = df['MACD'].ewm(span=9, adjust=False).mean()


# MACD 오실레이터(히스토그램)
df['Oscillator'] = df['MACD'] - df['Signal']


# NaN 값 채우기
df.fillna(method='ffill', inplace=True)

# figure, subplot 생성
fig, axes = plt.subplots(nrows=3, ncols=1, figsize=(12, 8), dpi=80, sharex=True)

# 종가 차트 생성
axes[0].plot(df['close'].values, label='close')
axes[0].set_title('close')

# MACD와 시그널 라인 차트 생성
axes[1].plot(df['MACD'].values, color='darkorange', label='MACD')
    # > MACD는 좀 어두운 오렌지색으로 설정
axes[1].plot(df['Signal'].values, color='purple', label='Signal')
    # > 시그널은 보라색으로 설정
axes[1].set_title('MACD and Signal')

# MACD 오실레이터의 값이 양수/음수에 따라 색을 빨간색 또는 파란색 계열로 설정 및 차트 생성
oscillator_values = df['Oscillator'].values
colors = ['#FF7F7F' if value >= 0 else '#7FA0FF' for value in oscillator_values]
axes[2].bar(range(len(df)), oscillator_values, color=colors, label='Oscillator')
axes[2].set_title('MACD Oscillator')

# 각 하위 plot에 범례 추가
for ax in axes:
    ax.legend()

plt.tight_layout()
plt.show()

위 코드로 생성된 데이터 및 차트는 아래와 같다.
종가(close)로 MACD를 계산하고 종가선 차트와 MACD Line, Signal, MACD 오실레이터를 차트로 생성했다.


Python으로 MACD 구현

MACD는 주식 시장의 거래 결정에 있어 중요한 도구로서의 역할을 한다.
이는 단순한 수치보다는 시장의 흐름을 이해하는 데 큰 도움을 주는 지표이다.
그러나 투자자는 MACD가 제공하는 정보를 과신하지 않아야 한다.
모든 기술적 지표와 마찬가지로, MACD는 완벽하게 시장의 모든 움직임을 예측하거나 보장하는 도구가 아니다.

가장 중요한 점은, MACD는 다른 투자 도구와 함께 사용될 때 가장 효과적이라는 것이다.

마지막으로, 모든 투자는 리스크를 수반한다.
MACD와 같은 도구를 사용함으로써 그 리스크를 일부 관리하거나 최소화할 수는 있지만, 완전히 제거할 수는 없다.
투자 결정은 항상 철저한 분석과 신중함을 필요로 하며, 가능한 모든 정보를 고려해야 한다는 것을 명심해야한다.

커피 한 잔으로
저를 응원해주세요!
반응형

loading