본문 바로가기
개발

24시간 돌아가는 코인 시세 알림 봇 만들기 #1

by wafla 2024. 1. 2.

바이비트 API를 생성하고 코인 시세를 체크하는 코드를 짜봅시다 !

 

바이비트 계정이 이미 생성 됐다고 생각하고 시작하겠습니다.

 

1. API 키 발급

 

계정 아이콘에 마우스를 올리면 위와 같이 창이 나오는데 API를 클릭합니다.

 

Create New Key 버튼을 누릅니다.

 

System-generated API Keys를 누릅니다.

 

 

API key 이름을 정하고 Unified Trading을 체크하고 Submit을 눌러 API 키를 생성합니다. (API를 통해 입출금을 하고 싶으면 밑에 Asset도 체크하셔야 됩니다)

 

위와 같이 API Key와 API Secret 코드가 나오는데 API Secret 코드는 이 화면이 닫히면 다시는 보이지 않으므로 두 코드를 잘 저장해둡니다.

 

이제 API 키가 생성 됐습니다. API 키는 90일 동안 유효하므로 90일이 지나면 새로 생성해줘야 합니다.

 

2. 코드 작성

 

이제 코드를 작성해 봅시다 !

 

먼저 다음과 같은 파일을 만들고 아까 저장해둔 API 키와 Secret 코드를 붙여넣습니다.

 

다음으로 파이썬 파일을 생성합니다.

 

그리고 터미널을 열어 필요한 모듈들을 설치합니다.

 

pip install '모듈명' 으로 설치 하면 됩니다.

 

모듈명 : pybit, pandas, pandas_ta, numpy, python-telegram-bot

 

다음과 같이 모듈들을 import 해줍시다.

from pybit.unified_trading import HTTP
import pandas as pd
import pandas_ta as ta
import numpy as np
import datetime as dt
import time 
import json
import pytz

import telegram
import asyncio

with open('authcreds.json') as j:
    creds = json.load(j)

key = creds['KEY_NAME']['key']
secret = creds['KEY_NAME']['secret']
  
session = HTTP(api_key=key, api_secret=secret, testnet=False)

 

API Key와 Secret을 'authcreds.json' 이라는 파일에 저장해 뒀기 때문에 그 파일에서 API Key를 불러옵니다.

 

또 session = HTTP 에서 testnet이 있는데 True면 가상으로 매매가 진행되고 False면 진짜 돈으로 매매가 진행됩니다.

 

여기서는 매매는 하지 않고 단순히 코인 시세만 파악할 것이기 때문에 True로 고쳐도 상관 없습니다.

 

API가 잘 작동되는지 확인해 봅시다

response = session.get_kline(category='linear', 
                             symbol='BTCUSDT', 
                             interval='D').get('result')
print(response)

 

위의 코드를 추가하고 실행시켜 봅시다.

 

다음과 같이 데이터를 잘 가져오는 것을 확인할 수 있습니다.

 

위의 코드에서 interval='D'로 설정했기 때문에 일봉의 정보를 가져옵니다.

다른 시간별 데이터를 가져오고 싶다면 1, 3, 5, 15, 30, 60, 120, 240, 360, 720, D, M, W 중에서 골라쓰시면 됩니다.

 

 

제가 만들 알림 봇은 한국 기준 매일 오전 09시에 비트코인의 가격을 알려주는 봇입니다.

위의 알아보기 힘든 데이터들을 필요한 값만 보기 좋게 가져와 봅시다.

 

공식 API 문서를 보면 다음과 같은 정보가 반환된다고 적혀 있습니다.

 

이 정보들 중에서 list의 값들만 가져와 봅시다.

def get_market(response):
    data = response.get('list', None)
    if not data:
        return 
    
    data = pd.DataFrame(data,
                        columns =[
                            'timestamp',
                            'open',
                            'high',
                            'low',
                            'close',
                            'volume',
                            'turnover'
                            ],
                        )
    
    f = lambda x: dt.datetime.utcfromtimestamp(int(x)/1000)
    data.index = data.timestamp.apply(f)
    return data[::-1].apply(pd.to_numeric)
    
response = session.get_kline(category='linear', 
                             symbol='BTCUSDT', 
                             interval='D').get('result')

btc_market = get_market(response)
print(btc_market)

 

실행 결과 다음과 같이 보기 좋게 정리됐습니다.

 

 

매일 09시는 일봉이 바뀌는 시간입니다. 따라서 저 정보들 중에서도 가장 최근의 open 값이 필요합니다.

 

print(btc_market)을 다음과 같이 바꿔봅시다.

print(btc_market['open'][-1])

 

실행결과 다음과 같이 오늘의 시가가 잘 나옵니다.

24/01/02

 

이제 비트코인 일봉 시가를 구할 수 있게 됐습니다 !

 

남은 일은 저 값을 매일 09시마다 구해서 봇으로 가격을 알려주면 됩니다.

 

목차 - 

 

(0) 개요

https://wafla.tistory.com/4

(2) 텔레그램 봇 만들기

https://wafla.tistory.com/6

(3) 오라클 클라우드에서 서버 만들기

https://wafla.tistory.com/7

 

 

 

참고자료

 

파이썬을 이용한 비트코인 자동매매 :  https://wikidocs.net/157925

바이비트 API 공식 문서 : https://bybit-exchange.github.io/docs/v5/intro