2023. 2. 23. 10:00ㆍ자동매매/업비트
MACD란, Moving Average Convergence & Divergence의 약자로, 한국어로 번역하면 이동평균수렴·확산지수라고 한다. 기본적으로 장단기 이동평균선간의 차이를 이용하여 매매신호를 포착하려는 기법으로, 장기 이동평균선과 단기 이동평균선이 멀어지게 되면(Divergence) 언젠가는 다시 가까워져서(Convergence) 어느 시점에 서로 교차하게 되는 성질을 이용한 것이다.
MACD는 기본적으로 단기 이동평균선에는 12일 지수이동평균을 사용하고, 장기 이동평균선에는 26일 지수이동평균선을 이용하므로, 앞에서 스터디한 이동평균선을 구하는 코드를 이용해서 쉽게 만들어낼 수 있는 지표 중 하나이며, MACD의 기본 공식은 아래와 같다. (이동평균 관련 코드는 블로그 하단 링크 참고)
1) MACD = 12일 지수이동평균 - 26일 지수이동평균
2) Signal = MACD의 9일 지수이동평균
3) Oscillator = MACD - Signal
위의 기봉공식을 이용해서 시간에 따라 그래프를 그리면, 아래와 같이 코인 거래소 어플이나 증권사 어플의 차트에서 볼 수 있는 MACD 그래프로 나타낼 수 있다.
MACD 값을 구해서 위의 그래프처럼 구현하면 좋겠지만, 우리는 자동매매용 코딩이 목적이므로 상황에 따라서 24시간 동안, 초 단위로 시세를 파악하고 매수/매도 등을 판단해야 하기 때문에 위와 같은 그래프 구현은 한정된 컴퓨터 자원을 낭비하게 되므로 과감하게 생략하기로 하고 아래의 코드와 같이 MACD 지표로 알 수 있는 값(MACD, Signal, Oscillator등)을 구분해서 잘 정리할 수만 있으면 된다.
import pyupbit
import pandas as pd
import requests
# Upbit 로그인 시작
access = "액세스 코드 입력"
secret = "시크릿코드 입력"
upbit = pyupbit.Upbit(access, secret)
# MACD 값 구하기
querystring = {"market":'KRW-BTC',"count":"100"}
response = requests.request("GET", url, params=querystring)
data = response.json()
df = pd.DataFrame(data)
df = df.iloc[::-1]
df = df['trade_price']
exp12 = df.ewm(span=12, adjust=False).mean()
exp26 = df.ewm(span=26, adjust=False).mean()
macd = exp12 - exp26 # MACD = 12일 지수이동평균 - 26일 지수이동평균
signal = macd.ewm(span=9, adjust=False).mean() # Signal = MACD의 9일 지수이동평균
oscillator = macd - signal # Oscillator = MACD - Signal
print("[ KRW-BTC ]")
print("- exp12 : ", exp12[0])
print("- exp26 : ", exp26[0])
print("- MACD : ", macd[0])
print("- Signal : ", signal[0])
print("- Oscillator : ", oscillator[0])
|
https://skydance.tistory.com/36
https://skydance.tistory.com/37
https://skydance.tistory.com/38
'자동매매 > 업비트' 카테고리의 다른 글
[파이썬] 업비트 티커 리스트 - 크롤링 (0) | 2023.05.17 |
---|---|
[파이썬] 업비트 지표 구하기 - RSI(상대강도지수) (2) | 2023.03.06 |
[파이썬] 업비트 지표 구하기 - 가중이동평균(WMA) (0) | 2023.01.15 |
[파이썬] 업비트 지표 구하기 - 지수이동평균(EMA) (0) | 2023.01.14 |
[파이썬] 업비트 지표 구하기 - 단순이동평균(SMA) (0) | 2023.01.13 |