ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [비트코인] 가상화폐 자동투자 프로그램 개발하기(1) - 업비트 API
    프로젝트/가상화폐 자동투자 2021. 4. 17. 18:35
    반응형

    작년 코로나19 가 세계를 덮친지 1년만에 KOSPI 지수가 3000 을 넘어서면서 일어난 재테크 열풍으로 요즘 남녀노소 누구나 주식 및 가상화폐 투자에 뛰어들고 있다. 이러한 상황 속에서 주변 사람들, 심지어 대학교 새내기들조차 투자에 빠져 밤을 새고 수업을 가지 못하는 상황을 주변에서 종종 보면서 이들이 직접 밤새 투자에 참여하지 않아도 자동으로 투자를 진행하여 주며 현재 상황을 메신저를 통해 알려주는 프로그램을 만들어 이들에게 일상 생활을 돌려주자는 생각을 하였다. 이런 이유로 이번에 진행할 사이드 프로젝트는 가상화폐 자동투자 프로그램이다.

     

    주식 vs 가상화폐

    주식이 아닌 가상화폐를 대상으로 정한 이유는 아래와 같다.

    • 주식은 장의 운영 시간이 정해져 있는 반면 가상화폐는 365일 24시간 쉬지 않고 운영된다. 이는 직접 투자에 시간을 소비하지 않아도 되는 자동매매의 장점을 극대화 시킬 수 있다.
    • 주식은 상장 기업의 수가 너무 많아서 종목 선정에 따라 수익률이 천차만별로 달라질 수 있다. 반면에 가상화폐는 모든 코인시장을 대표하는 '비트코인' 이라는 가상화폐가 존재하기 때문에 이 '비트코인'을 대상으로 자동매매를 진행한다.
    • 현시점에서 일반적으로 주식 시장보다 가상화폐 시장의 변동성이 크다. 기본적으로 '단기 트레이딩' 방식을 따르는 자동매매 특성상 변동성이 클수록 수익률의 극대화가 가능하다.
    • 가상화폐 거래소의 API 사용이 주식 시장의 API 보다 난이도와 용이성 측면에서 더 좋다고 판단하였다.
    • 가장 중요한 이유로, 자동매매 특성상 잦은 거래가 따르는데 주식 시장은 매 거래마다 (거래세 0.15% + 수수료 0.015% = 0.165%, 2021년 키움증권 기준) 씩 차감되지만 가상화폐 거래의 경우 2021 년까지는 세금이 없기 때문에 (수수료 0.05%, 2021년 업비트 기준) 만 차감된다. 

     

    업비트 API 사용하기

    Open API Key 발급

    개발은 국내 가상화폐 거래소인 '업비트' 에서 제공하는 API 를 사용하여 진행한다. 업비트 가입 및 계좌 연결은 이미 되어 있다고 생각하고, Open API 키를 발급받기 위해 '업비트 로그인' -> '고객센터' -> 'Open API 안내' -> 'Open API 사용하기' 순으로 진행한다.

    Open API 사용하기를 클릭하여 들어오면 아래와 같은 창이 나온다.

    보안을 위해 입출금 기능을 제외하고 '자산조회', '주문조회', '주문하기' 기능만 체크하고 '특정IP에서만 실행' 에 프로그램을 돌릴 PC 의 IP 를 넣어준다(현재 PC의 IP 는 구글 검색창에 'what is my IP' 을 검색하면 쉽게 알 수 있다).  그 후 'Open API key 발급받기' 를 클릭하면 Access key, Secret Key 를 발급하여 주는데 이 두 개의 key 를 잘 저장해두도록 한다.

     

    API 사용 (pyupbit)

    업비트에서 제공하는 Open API 목록은 '업비트 개발자 센터(https://docs.upbit.com)' 에 자세히 나와있으니 시간이 있으면 개인적으로 둘러보고, 여기서는 pyupbit 라는 업비트 API 사용을 간편하게 도와주는 오픈소스 소프트웨어를 사용한다. 이름에서 알 수 있듯이 '파이썬' 기반의 오픈소스이기 때문에 최신 버전의 python3 를 미리 설치해주어야 한다(파이썬 설치는 각자 진행하도록 하자).

     

    pyupbit 를 설치

    $ pip install pyupbit
    

    pyjwt 모듈 설치

    $ pip install pyjwt
    

     

    설치가 끝났으면 pyupbit 모듈을 import 하여 사용할 수 있다. 자세한 사용법은 pyupbit(github.com/sharebook-kr/pyupbit) 사이트를 참조하자.

     

    반응형

    투자 전략(알고리즘)

    가상화폐의 차트는 기본적으로 물결모양을 이룬다고 가정하고 아이디어는 아래와 같다.

    이 기본모형에서 하락차트에서 최저점을 찍고 반등하는 변곡점은 아래처럼 양봉이 차트를 돌파하고 올라간 순간으로 이 지점을 '상승신호' 로 보고 매수를 진행한다.

    반대로 상승차트에서 음봉이 차트를 돌파하고 내려오는 순간을 '하락신호' 로 보고 매도를 진행한다.

    이 방법은 코드의 동작만을 보여주기 위한 매우 기본적인 아이디어로 실제 구현해보면 매우 많은 거래로 인해 수수료로 투자금이 모두 사라지는 것을 볼 수 있을 것이다.,, 구현은 아래와 같다!

    import pyupbit
    import math
    import time
    
    upbit = pyupbit.Upbit(`Access Key`, `Secret Key`)	# 자신의 key 값으로 변경
    
    # 차트에서 최근 count 개의 평균값을 반환
    def get_average(coin, count, interval) :		
        df = pyupbit.get_ohlcv(coin, count = count, interval = interval)
        avg = sum(df.close) / count
        return avg
    
    # 시장가로 모두 매도
    def sell_market_all(coin) :
        balance = upbit.get_balance(coin)
        if balance > 0 :
            upbit.sell_market_order(coin, balance)
    
    # 시장가로 모두 매수
    def buy_market_all(coin) :
        balance = math.floor(upbit.get_balance("KRW")) - 50
        if balance >= 5000 :
            upbit.buy_market_order(coin, balance)
    
    
    if __name__ == '__main__': 
        try:
            coin = "KRW-BTC"
            count = 5
            interval = "minute15"
    
            while True :
                cur_price = pyupbit.get_current_price(coin)			# 현재가
                dest_price = get_average(coin, count, interval)		# 목표가
                
                # 현재가가 목표가보다 낮아지면 매도
                if cur_price < dest_price :
                	sell_market_all(coin)
                	time.sleep(1)
                
                # 현재가가 목표가보다 높아지면 매수
                else :
                	buy_market_all(coin)
                	time.sleep(1)
                time.sleep(1)
    
        except Exception as ex:
            sys.exit(0)

     

     

    다음 포스트에서는 제대로 된 투자 전략을 대입하여 알고리즘만들고 과거 데이터들을 대입하여 수익률을 검증해 볼 예정이다. 기다려주세요!

     

    반응형
Designed by Tistory.