본문 바로가기
Python

파이썬을 이용하여 상승 가능성 있는 가상 화폐 알림 기능 구현

by 아짱이아빠 2021. 11. 6. 17:18
반응형

이번에는 파이썬 코드를 이용하여 upbit 거래소에 있는 전 가상 화폐 중 앞으로 상승이 예상되는 가상 화폐를 찾아 핸드폰으로 문자를 보내주는 기능에 대해 알아보겠다. 

 

이전 포스트에서 가상 화폐를 자동 매매하는 코드에 대해 알아봤는데 일정 기간 자동매매 코드를 돌려본 결과 수익을 낼 수 없었다.

그 이유는 여러 가지 있으나 그 중 한 가지는 PC에서 실행되고 있는 프로그램의 결과로 매수나 매도를 하려는 시점과 실제 거래소에서의 시점을 정확히 일치시키지 못하기 때문에 잘못된 매수와 매도를 하게 되고 이는 앞으로도 어떻게 고쳐볼 수 없을 것 같다.

그래서 결국 직접 보고 수동으로 매수와 매도를 해야한다는 생각을 했고 그러기 위해서는 일단 상승할 기미가 보이는 가상 화폐를 알아낼 필요가 있어서 이 프로그램을 만들어 보게 되었다.

가상 화폐의 자동매매에 대한 글은 아래의 링크에 있다.

 

 

SMA와 MACD 이용 Python 가상화폐 자동매매(1/2)

이번에는 Python을 이용한 가상화폐의 자동매매에 대해 알아본다. 최근 2개월간 자동매매 프로그램을 짜고 실제로 투자를 해보았으며 이를 통해 알게 된 것들을 포함하여 정리해보고자 한다. 처

superhky.tistory.com

 

 

SMA와 MACD 이용 Python 가상화폐 자동매매(2/2)-backtesting

지난번에 알아본 자동매매 프로그램을 backtesting 하는 방법과 그 결과에 대한 분석을 해보겠다. 먼저 backtesting 코드를 알아본 후 dp이다(ADA)와 이더리움클래식(ETC)에 대해 자동매매 프로그램의 누

superhky.tistory.com

 

기본적으로 코드는 upbit 거래소에서 데이터를 받아오는 부분을 제외하고 크게 두 부분으로 되어 있다.

하나는 상승이 예상되느냐 아니냐에 대한 기준을 설정하는 부분이고 다른 하나는 이 기준에 적합한 가상 화폐가 있으면 이를 메시지를 생성하여 핸드폰으로 보내주는 부분이다.

 

메시지를 보내는 부분은 Slack Bot을 이용하였다.

Slack은 일종의 메신저 툴이며 Slack에서 애플리케이션을 만들고 파이썬에서 이 Slack과 연결하여 메시지를 전달할 수 있도록 하는 것이다.

여기서는 이 Slack에 애플리케이션을 만들어 등록하는 방법에 대해서는 얘기하지 않겠다.

구글에서 “파이썬, Slack” 만 검색해도 Slack을 시작하는 방법에 대해 자세하게 설명한 글들이 많이 있으니 참고하면 되겠다.

 

아래의 코드는 프로그램에 필요한 라이브러리를 불러오고 upbit 거래소에 접속하기 위한 코드를 넣는 것과 Slack 접속을 위한 코드를 넣는 부분이다.

import time
import pyupbit
import requests

access = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
myToken = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

 

Slack에 애플리케이션을 설치하고 나면 접속을 위한 토큰값을 할당받게 되며 그 값을 넣으면 된다.

 

아래는 이 프로그램에서 핵심이 되는 부분이라고 할 수 있는 가상 화폐의 상승 예상 여부를 판단하는 부분이다.

여기에서는 MACD와 EMA, 그리고 SMA를 이용하여 상승 여부를 판단한다.

def rising_market(ticker) :
    df = pyupbit.get_ohlcv(ticker)
	new_df = df['close']

	MOV = df['close'].rolling(window=20, min_periods=1).mean()
 
    ShortEMA = df.close.ewm(span=12, adjust=False).mean()

    LongEMA = df.close.ewm(span=26, adjust=False).mean()

    MACD = ShortEMA-LongEMA

    Signal = MACD.ewm(span=9, adjust=False).mean()

    EMA = df['close'].ewm(span=100, adjust=False).mean()

    price = pyupbit.get_current_price(ticker)

    if (MACD[-1] > Signal[-1]) and (MACD[-1] > MACD[-2]) and (price > EMA[-1]) and (price > MOV[-1]) and (price > new_df[-2]):

        return True

 

ticker로 받은 upbit 거래소의 각 가상 화폐의 close 정보를 바탕으로 20일 SMA와 MACD, 100일 EMA를 계산한다.

상승이 예상된다는 판단의 조건은 마지막에 있는 if 문에서 정의한다.

먼저 MACD가 Signal선보다 위쪽에 있으며 MACD 값은 하향이 아닌 상승을 하고 있어야 한다.

또한 동시에 현재 가상 화폐의 가격은 100일 EMA선보다 위쪽에 있어야 하고 20일 이동평균보다도 높아야 한다.

끝으로 현재의 가상 화계 가격은 이전의 가격보다 높아야 한다.

이 모든 조건이 동시에 만족하는 가상 화폐가 있으면 True가 된다.

조건을 좀더 쉽게 설명하면 아래와 같다.

상승 예상 조건
(상승 예상 조건)

 

참고로, MACD 보조 지표에 대한 설명은 아래의 글에 있다.

 

 

Python을 이용한 주식 및 가상화폐 분석 - MACD & Fibonacci 전략

이전 글에서 Fibonacci Retracement Level을 통해 주식 시세나 가상화폐 시세 분석을 하는 것에 대해 알아봤다. 그리고 그 이전에는 MFI와 OBV와 같은 보조 지표 분석을 통해 매수와 매도 시점을 알아내는

superhky.tistory.com

 

여기서는 좀 복잡하게 여러 개의 보조 지표를 사용하여 만들었지만 단순하게 EMA만을 가지고 판단을 해도 되고 각자 취향에 맞게 만들 수 있다. 

 

반응형

 

다음은 Slack 메시지를 연결하는 부분이다.

있는 그대로 사용하면 되며 상세한 설명은 잘 모르기 때문에 넘어가도록 하겠다.

def post_message(token, channel, text):
    response = requests.post("https://slack.com/api/chat.postMessage",
        headers={"Authorization": "Bearer "+token},
        data={"channel": channel,"text": text}

 

여기까지 되었다면 이제 로그인을 하고 실제 실행시키는 부분이다.

먼저 아래의 코드로 프로그램 실행을 시키고 시작되면 program start가 출력된다.

upbit = pyupbit.Upbit(access, secret)
print("program start")

 

다음의  while 문으로 프로그램이 동작된다.

while True:
    try :
        tickers = pyupbit.get_tickers(fiat="KRW")

        for ticker in tickers:
            is_bull = rising_market(ticker)
            if is_bull:
                print(ticker, "상승 예상")
                post_message(myToken,"#trading", ticker)

        time.sleep(900)

    except Exception as e:

        print(e)
        time.sleep(1)

 

upbit 거래소에서 원화로 거래되는 모든 가상 화폐를 가져와서 tickers에 저장한다.

그리고 for 문 안에서 가상 화폐 하나씩 rising_market의 함수를 수행하며 함수 내의 조건에 부합하면 즉, 앞에서 얘기했던 MACD와 SMA, EMA, 현재가 조건이 모두 만족하면 if 문에 의해 해당 가상 화폐명과 “상승 예상”이 출력되고 Slack을 통해 메시지가 전달된다. 

 

실행 결과는 아래와 같다.

상승 예상 가상 화폐 프로그램 실행 결과
(상승 예상 가상 화폐 프로그램 실행 결과)

위의 그림에서 오른쪽에 있는 것이 핸드폰으로 오는 Slack 메시지이다.

 

 

여기까지 상승이 예상되는 가상 화폐를 메시지로 보내는 프로그램에 대해 알아봤다.

매일 오전 9시에 자동으로 프로그램을 실행 시켜 메시지로 그날 상승 예상되는 가상 화폐를 받아 보고 실제 투자에 참고로 활용할 수 있을 것 같다.

 

다만 여기서 얘기한 상승 예상을 판단하는 방법은 개인적으로 만들어 본 것이므로 혹시라도 투자에 실제 적용하는 일은 없도록 해야겠다. 

 

반응형

댓글