(파이썬 자동매매) MACD(Moving Average Convergence Divergence)

반응형

MACD란?

  • MACD는 이동평균 수렴확산 지수(Moving Average Convergence Divergence)의 약자이다.
  • 1970년대 후반 제럴드 아펠(Gerald Appel)에 의해 개발되었다.
  • MACD는 가격 추세를 분석하는데 사용되는 기술 지표이다.
  • MACD는 장단기 이동평균선 간의 차이를 이용하여 매매신호를 포착는 기법이다.
  • MACD는 주가 추세의 강도, 방향, 모멘텀 및 지속 시간의 변화를 측정하기 위해 사용한다.

MACD 계산 공식

  • MACD: 12일 지수이동평균 - 26일 지수이동평균
  • 시그널(Signal): MACD 9일 지수이동평균
  • 오실레이터(Oscillator): MACD - Signal

MACD 매매 신호

  • 강세 신호: MACD 선이 시그널 위로 교차하면 자산 가격이 상승할 가능성이 높다.
  • 약세 신호: MACD 선이 시그널 아래로 교차하면 자산 가격이 하락할 가능성이 높다.

MACD 매수 전략

  • MACD가 양으로 증가하면 매수한다.
  • MACD가 0선을 상향돌파하면 매수한다.
  • MACD가 시그널을 골드크로스 하면 매수한다.

Python로 MACD 계산하기

MACD는 단기 지수 이동 평균(EMA)에서 장기 지수 이동 평균(EMA)을 빼서 계산한다.

먼저 바이낸스에서 비트코인 차트 데이터를 가져온다.

import requests
import pandas as pd
import matplotlib.pyplot as plt

# Define the API endpoint URL
url = "https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1d&limit=100"

# Send a GET request to the API endpoint and retrieve the data
response = requests.get(url)
data = response.json()

# Convert the data into a pandas DataFrame
df = pd.DataFrame(data, dtype="float", columns=["open time", "open", "high", "low", "close", "volume", "close time", "quote asset volume", "number of trades", "taker buy base asset volume", "taker buy quote asset volume", "ignore"])
df['date'] = pd.to_datetime(df['open time'], unit='ms')
df.set_index('date', inplace=True)

# Print the data
print(df.tail())

2021년도 부터 2022년도까지의 비트코인 종가를 가져온다.

btc = df.loc['2021':'2022', ['close']]
btc

그다음 12일간의 지수 이동평균과 26일간의 지수 이동평균을 계산한다.

btc["ema_short"] = btc["close"].ewm(12).mean() # 12일간의 지수 이동평균
btc["ema_long"] = btc["Cclose"].ewm(26).mean() # 26일간의 지수 이동평균

12일, 26일에 대한 지수이동평균과 종가를 차트로 그려보자.

btc[["close", "ema_short", "ema_long"]].plot(figsize=(15, 5))

MACD는 단기 EMA에서 장기 EMA를 빼서 계산한다.

btc["macd"] = btc["ema_short"] - btc["ema_long"]

2021년도 부터 2022년도까지의 비트코인 MACD를 차트로 그려보자.

btc["macd"].plot(figsize=(15, 5))
plt.axhline(0)

Python로 오실레이터(Oscillator) 계산하기

오실레이터는 MACD에서 Signal를 빼서 계산한다. Signal은 MACD 9일 지수 이동평균선이다.

btc["signal"] = btc["macd"].ewm(9).mean()
btc["oscillator"] = btc["macd"] - btc["signal"]

오실레이터 기울기가 가파르게 상승한다면 상승추세라고 볼 수 있다.

오실레이터를 바 차트로 그려보자.

plt.figure(figsize=(15, 5))
plt.bar(btc.index, btc['oscillator'])

반응형