본문 바로가기

바이낸스 가입방법
  • 코인 잡기술 블로그
기술/지표 알림

MACD 알림 설정하는 방법

by 금붕맨 2023. 4. 13.
반응형

 

MACD 알림

 

MACD 알림 설정

 

MACD란?

MACD란 Moving Average Convergence Divergence의 약자로 해석하자만 이동평균의 수렴과 확산이라는 뜻입니다. 수렴과 확산은 장기이동평균선과 단기이동평균선의 간격을 말하는 것입니다. (보통 장기는 26일 단기는 12일의 기간으로 설정되어 있습니다.) 이것을 통하여 추세의 힘과 방향성, 그리고 시간을 측정한다고 합니다. 이동평균선의 골든크로스처럼 이 간격이 교차되는 지점이 중요한 의미를 갖고 있는 것 같습니다.

 

MACD 바이낸스

바이낸스 비트코인 차트에서 MACD를 설정하는 모습입니다. 3개의 간격을 설정하고 DEA, DIF, MACD를 나타낼 수 있습니다. SAVE를 눌러주고 차트를 보면 다음과 같이 확인하실 수 있습니다.

 

MACD 바이낸스

두 개의 라인이 각각 DEA와 DIF이며 캔들(히스토그램)로 나타내어진 것이 MACD입니다. DEA와 DIF의 수치를 보시면 현재 비트코인 시세가 30000달러인 것을 생각하면 단순하게 장기이동평균과 단기이동평균의 차이가 아니란 것을 알 수 있습니다. 다음 목차에서 DEA, DIF, MACD가 각각 무엇인지 알아보고 계산법을 찾아보겠습니다.

 

 

계산 공식

 

DIF = 단기지수이동평균 - 장기지수이동평균

(MACD)

 

DEA = DIF의 9일 지수이동평균

(시그널)

 

MACD = DIF - DEA

(오실레이터)

 

 

DIF의 값은 12일의 지수이동평균값에서 26일의 지수이동평균값을 뺀 값입니다. 장기와 단기의 이동평균의 간격이니까 정의로만 보자면 이것이 MACD입니다. 대충 Difference의 약자로 보면 되겠네요.

 

DEA의 값은 앞서 구한 DIF를 다시 한번 9일 지수이동평균을 낸 값입니다. 용어로는 MACD에서 파생된 지표로 이 값을 Signal이라고 합니다. 저의 추측이지만 DIF Exponential Moving Average를 뜻하는 것 같습니다.

 

마지막으로 바이낸스에서 MACD로 나타낸 것은 사실 MACD가 아닌 오실레이터라는 값으로 DIF에서 DEA를 뺀 값입니다. 바이낸스에서 왜 이렇게 헷갈리게 표기했는지는 잘 모르겠네요. 오실레이터도 MACD가 만들어지고 나중에 추가된 지표며 일반적으로 시세의 추세와 오실레이터의 추세가 반대일 경우 변곡이 일어날 수 있다는 관점이 있는 것 같습니다. 처음에 MACD(DIF)에서 시작하여 보완돼서 만들어진 지표인 만큼 이 오실레이터 값을 중점적으로 보면 된다고 생각합니다.

 

 

MACD 함수 만들기

import binance as bn
import pandas as pd

def macd(symbol, interval, long, short,signal):
    
    EMA = bn.ema(symbol, interval, long, short)
    long1 = EMA[str(long)]
    short1 = EMA[str(short)]
    
    DIF = short1 - long1
    DEA = DIF.ewm(span=signal).mean()
    OSC = DIF - DEA

    MACD = pd.concat([DEA, DIF, OSC], axis=1)
    MACD.columns = ['DEA', 'DIF', 'OSC']
    return MACD
    
print(macd("BTC","1d",26,12,9))

'DEA', 'DIF', 'OSC' 세 개의 열인 데이터프레임형태로 MACD를 반환하였습니다. macd() 함수의 매개변수로 (심벌, 인터벌, 장기지수이동평균의 설정기간, 단기지수이동평균의 설정기간, 시그널을 구할 때 지수이동평균의 설정기간)을 넣어주시면 됩니다. 그러므로 macd("BTC", "1d", 26, 12, 9) 식으로 사용하시면 됩니다.

 

저번 EMA, WMA를 구하는 포스트에서 만들어둔 ema() 함수를 불러와서 쉽게 지수이동평균을 낼 수 있었습니다.

 

지수이동평균(EMA) 가중이동평균(WMA) 계산

지수이동평균(EMA) 가중이동평균(WMA) 계산 이동평균의 종류 지수이동평균(EMA) 가중이동평균(WMA) 전체코드 결과물 이동평균의 종류 바이낸스 차트에서 지표설정을 누르면 나오는 모습입니다. 맨

goldfishman.tistory.com

 

비트코인 1일 봉의 MACD를 비교해 보도록 하겠습니다.

            DEA          DIF         OSC
0      0.000000     0.000000    0.000000
1      0.482496     0.868494    0.385997
2      0.125590    -0.388356   -0.513946
3      2.564557     7.325423    4.760865
4      6.698892    16.462537    9.763645
..          ...          ...         ...
995  953.555645   785.302239 -168.253406
996  935.071805   861.136443  -73.935362
997  939.188493   955.655247   16.466754
998  950.130990   993.900974   43.769985
999  965.521414  1027.083114   61.561700

실행 결과입니다. 현재 변동 중인 999행은 비교하기 부적절하므로 998행의 값을 실제 바이낸스 차트와 비교해 보도록 하겠습니다.

 

MACD

모두 알맞게 일치하였습니다.

 

 

전략에 따른  알림 조건 설정하기

제가 생각해 본 전략은 다음과 같습니다.

(1) 26일 EMA가 하락하고 있을 때

(2) OSC가 음수에서 양수로 전환할 때

 

이 두 조건을 만족하는 코인이 있으면 텔레그램으로 해당 심벌과 "MACD 상승전환"이라는 알림이 오도록 만들어 보겠습니다. 

 

import binance as bn
import threading

tickers = bn.tickers("all")

def run():
    for i in tickers:
        EMA = bn.ema(i,"1d",26)['26']
        MACD = bn.macd(i,"1d",26,12,9)['OSC']

        EMA997 = EMA.iloc[-3]
        EMA998 = EMA.iloc[-2]

        MACD997 = MACD.iloc[-3]
        MACD998 = MACD.iloc[-2]

        if EMA997 > EMA998 and MACD997 < 0 and MACD998 >0:
            bn.tel_text(i + " MACD상승전환")
        else:
            pass

    threading.Timer(86400, run).start()

run()

1일 봉 기준이니 threading.Timer() 함수로 86400초마다 알림이 실행되도록 설정하였습니다. bn.tickers와 bn.tel_text는 이전 글을 참고해 주시길 바랍니다.

 

[python]코인 알림 봇 만들기 : 모듈, 함수로 정리 정돈하기

마지막 정리 정돈 이번엔 편의성을 위해 자주 사용하는 코드들을 함수정의로 정리하는 작업을 가지도록 하겠습니다. 티커(심벌) 리스트 HTTP요청 ~ 데이터프레임 텔레그램 메시지 전체코드 모듈

goldfishman.tistory.com

 

 

결과물

실행을 하게 되면 다음과 같이 텔레그램 메시지가 전송됩니다.

MACD 텔레그램

SYN이라는 코인과 PERP라는 코인 단 2개만이 조건에 부합하여 알림이 왔네요. 이제 바이낸스로 들어가서 실제 차트와 비교해 보겠습니다.

 

PERP

PERP의 차트입니다. 26일 EMA가 미묘하게 하락하고 있으며, MACD의 오실레이터값이 빨간색에서 녹색으로 전환되었습니다. 알림 조건이 적절하게 적용되었습니다.

 

그런데 작은 문제점도 하나 발견하였습니다.

SYN

제가 만든 ema함수는 첫 번째 종가부터 계산을 하여 지수이동평균을 계산하지만 바이낸스는 그렇지 않고, 26일 이후부터 지수이동평균의 값을 계산해 주었습니다. 계산 기간을 어떻게 볼 것인지에 대한 관점차이로, 제 함숫값과 바이낸스의 값 모두 EMA라 말할 수 있다고 생각합니다. 이러한 이유로 상장 후 적당한 기간이 지나면 제가 계산한 값과 바이낸스에서 보여주는 값이 일치하게 되지만 상장된 지 얼마 지나지 않는다면 지금과 같이 값이 조금씩 일치하지 않습니다. 이 점 유의해주시길 바랍니다.

반응형

댓글