파이썬 프로그래밍

파이썬 업비트 비트코인 자동매매 – 매수 매도 자동화

코니코니 2022. 10. 1. 03:00
반응형

파이썬 업비트 비트코인 자동매매 – 매수 매도 자동화


먼저 업비트는 API가 있기 때문에 어렵지 않게 프로그래밍을 할 수 있습니다. 하지만 투자에 대한 지식이 없으면 프로그램을 만든다고 해서 수익을 낼 수 있는 것은 아닙니다. 저같은 경우에도 API를 사용하여 여러 다양한 기능을 추가한 자동화 프로그램을 완성시켰지만 수익을 내는 것이 쉽지는 않았습니다. 아무래도 투자에 대한 지식이 부족하여 알고리즘을 구성하는데 문제가 있었던 거겠죠.

자동화 프로그램은 24시간 업비트의 모든 차트를 모니터링 하면서 나만의 투자 방식으로 매수, 매도를 하는 것이기 때문에 결과적으로 자동화 없이 투자를 했을 때 승률이 좋다면 그 방식 그대로 자동화에 대입을 하면 됩니다. 그러나 투자의 경험이나 지식이 부족하다면 자동화를 만든다고 절대! 수익이 나오지 않습니다.

https://docs.upbit.com/
먼저 위 링크에 있는 업비트 개발자 센터에서 API 사용법을 확인할 수 있습니다. API를 사용하기 전에 먼저 고유 KEY를 발급 받아야 합니다.

Key 발급 페이지
일반 업비트 공식 페이지에서 로그인 후 마이페이지에 있는 API 발급 페이지에 들어가 access_key와 secret_key를 받으면 됩니다.

개발자 센터에 API의 사용법이 친절하게 나와있습니다. 매수와 매도의 코드 구성은 거의 비슷합니다. 몇줄만으로 어렵지 않게 매수, 매도를 시도할 수 있습니다. 그리고 위와 조금 다른 방식으로 코드를 짜도 호출을 하는데 문제가 없었기 때문에 살짝 코드를 고쳐봤습니다.

import jwt
import uuid
import hashlib
from urllib.parse import urlencode
import requests
 
 
def Buy(market, price):
    query = {
        'market': market,
        'side': 'bid',
        'price': price,
        'ord_type': 'price',
    }
    query_string = urlencode(query).encode()
 
    m = hashlib.sha512()
    m.update(query_string)
    query_hash = m.hexdigest()
 
    payload = {
        'access_key': 엑세스키 넣기,
        'nonce': str(uuid.uuid4()),
        'query_hash': query_hash,
        'query_hash_alg': 'SHA512',
    }
 
    jwt_token = jwt.encode(payload, 시크릿키 넣기)
    authorize_token = 'Bearer {}'.format(jwt_token)
    headers = {"Authorization": authorize_token}
 
    res = requests.post("https://api.upbit.com/v1/orders", params=query, headers=headers)
    print(res.json())

먼저 매수할 때 사용되는 함수입니다. 사용법은 Buy("KRW-BAT", 10000) 이렇게 입력을 해주면 되는데요 파라미터의 첫번째는 코인명, 두번째는 구매할 가격입니다. 원화로 적어주면 됩니다.

그리고 기존에 발급을 받았던 엑세스키와 시크릿키를 위에 적어둔 칸에 넣어주면 되겠죠?

정상적으로 매수가 된다면 아래와 같은 형식의 출력을 볼 수 있습니다.

{'uuid': '61616152-e003-4378-b111-5c52cca1fe9c', 'side': 'bid', 'ord_type': 'price', 'price': '10000.0', 'state': 'wait', 'market': 'KRW-BAT', 'created_at': '2021-09-05T20:04:09+09:00', 'volume': None, 'remaining_volume': None, 'reserved_fee': '5.0', 'remaining_fee': '5.0', 'paid_fee': '0.0', 'locked': '10005.0', 'executed_volume': '0.0', 'trades_count': 0}

key에 대한 의미는 업비트 개발자 센터에서 참고하시면 됩니다. 테스트로 KRW-BAT 코인을 10000원 구매를 했고 업비트 어플이 있는 경우 매수 알림이 뜨는 것을 볼 수 있습니다.

매도의 경우에는 매수와 조금 다르게 코인명과 구매금액이 아닌 코인 개수를 입력해야 합니다.

def Sell(market, volume):
    query = {
        'market': market,
        'side': 'ask',
        'volume': volume,
        'ord_type': 'market',
    }
    query_string = urlencode(query).encode()
 
    m = hashlib.sha512()
    m.update(query_string)
    query_hash = m.hexdigest()
 
    payload = {
        'access_key': 엑세스키 넣기,
        'nonce': str(uuid.uuid4()),
        'query_hash': query_hash,
        'query_hash_alg': 'SHA512',
    }
 
    jwt_token = jwt.encode(payload, 시크릿키 넣기)
    authorize_token = 'Bearer {}'.format(jwt_token)
    headers = {"Authorization": authorize_token}
 
    res = requests.post("https://api.upbit.com/v1/orders", params=query, headers=headers)
    print(res.json())

Sell("KRW-BAT", 2.1518495) 이런 식으로 넣어주면 된다는 것인데 여기서 두번째 파라미터인 코인 개수는 매수된 코인을 보고 적어주면 됩니다. 코인마다 구매금액은 동일하더라도 코인 하나하나의 가격은 다르기 때문에 같은 1만원이더라도 보유한 코인의 개수는 다르겠죠.

추가적으로 파이썬 업비트 라이브러리를 설치하면 좀 더 편리하게 자동매매가 가능합니다. 라이브러리 명칭은 pyupbit 입니다. cmd 창에서 pip install pyupbit 명령어로 설치가 가능합니다.

import pyupbit
 
upbit = pyupbit.Upbit(엑세스키 넣기, 시크릿키 넣기)
upbit_test = upbit.get_balances()
print(upbit_test)
 
 
[결과]
[{'currency': 'KRW', 'balance': '10893.41229834', 'locked': '0.0', 'avg_buy_price': '0', 'avg_buy_price_modified': True, 'unit_currency': 'KRW'}

임포트 후 API 사용할 때와 동일하게 엑세스키, 시크릿키를 넣어주고 get_balances()함수로 잔고를 불러올 수 있습니다. 결과는 두가지만 보면 됩니다. currency에 있는 코인명, 그리고 balance에 있는 코인 개수를 확인하면 됩니다. 매수를 하고 매수된 코인의 개수를 쉽게 알기 위해서 위 함수를 호출하고 매도할 때 넣어주면 되겠죠.

지속적으로 코인 차트를 분석하고 데이터 대조작업을 하면서 매수, 매도 타이밍을 잡으면 간단한 자동매매 프로그램이 완성됩니다. 다음 글에서는 코인의 차트 흐름을 가져와 대조하는 방법에 대해서 알아보도록 하겠습니다.

반응형