본문 바로가기

바이낸스 가입방법
  • 코인 잡기술 블로그
기술/코인 알림 봇 만들기 (기초)

[python]코인 알림 봇 만들기(5.5편) : 더미 티커(심벌) 걸러내기

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

더미 티커(심벌) 걸러내기

 

문제 확인

 

[python]코인 알림 만들기(5편) : ticker(심벌) 가져오기

파이썬으로 거래소에 상장된 ticker(심벌) 가져오기 API 이용하기 바이낸스에 상장된 현물 티커(심벌) 가져오기 바이낸스에 상장된 선물 티커(심벌) 가져오기 업비트에 상장된 원화 티커(심벌) 가

goldfishman.tistory.com

 

 

 

[python]코인 알림 만들기(7편) : 모든 코인 데이터 가져오기

모든 알트코인의 차트 데이터 조회 바이낸스 API 티커 리스트 for반복문 time.sleep() 전체 코드 바이낸스 API (1) 차트의 캔들정보인 Kline데이터를 요청하는 것에 대한 바이낸스 API 문서 주소입니다. Bi

goldfishman.tistory.com

5편에서 티커(심벌)들을 가져와 리스트로 정리해 두었고 7편에서 조건식을 만들어 결과를 실행해 보았는데 BCC, MFT, XZC 같은 상장되어있지 않는 코인들이 있다는 것을 확인했습니다. 이런 더미 티커 데이터들이 더 있을 수 있기 때문에 티커리스트에 대한 조치가 필요했습니다.

 

 

Dataframe

import requests
import pandas as pd

url = "https://www.binance.com/api/v3/uiKlines?limit=1000&symbol=BCCUSDT&interval=1d"
headers = {"User-Agent": "본인의 유저에이전트"}
res = requests.get(url, headers=headers)
res.raise_for_status()

value = res.json()
df = pd.DataFrame(value)
df.columns = ['time', 'open', 'high', 'low', 'close', 'volume', '6', 'volume_asset', '8', '9', '10', '11']

df = df[['time', 'volume_asset', 'close']]

print(df)

우선 BCC 코인의 1일 봉 차트 데이터가 어떤지 확인해 줍니다. column은 필요해 보이는 time, volume_asset, close들만 지정해 주었습니다. 그러고 나서 BTC와 비교해 보도록 하겠습니다.

BCC코인

time이 오래전에 멈추어 있고, 캔들은 371개 밖에 되지 않고, 마지막 캔들의 거래량이 0인 것으로 보아 상장폐지된 듯합니다.

 

 

timestamp

데이터프레임에서 time열에 숫자 timestamp라고 하며 1970년 1월 1일부터 지난 초수(sec)입니다. 비트코인의 현재로부터 1000일 전의 timestamp가 1594166400000인데 BCC의 가장 최근 캔들은 1542672000000으로 상장폐지된 지 약 4~5년은 된 것 같습니다. 차트 같은 경우 시간이 상당히 중요해서 그런지 밀리세컨드까지 나타내어 주었네요.

from datetime import datetime

last_time_BTC = 1680480000000
last_time_BCC = 1542672000000

last_datetime_BTC = datetime.fromtimestamp(last_time_BTC / 1000)
last_datetime_BCC = datetime.fromtimestamp(last_time_BCC / 1000)

print(last_datetime_BTC, last_datetime_BCC)
2023-04-03 09:00:00 2018-11-20 09:00:00

timestamp를 datetime.fromtimestamp()를 이용하여 변환해 주었더니 BCC코인의 상장폐지된 날짜가 2018년 11월 20일이란 것을 알 수 있습니다.

 

 

전체코드

import requests
import pandas as pd

tickers = ['BTCUSDT', 'ETHUSDT', ··· , 'OAXUSDT', 'RDNTUSDT']
dummy_tickers = []

for i in tickers:
    try:
        url = "https://www.binance.com/api/v3/uiKlines?limit=1000&symbol=" + i + "&interval=5m"
        headers = {"User-Agent": "본인의 유저에이전트"}
        res = requests.get(url, headers=headers)
        res.raise_for_status()
    
        value = res.json()
        df = pd.DataFrame(value)
        df.columns = ['time', 'open', 'high', 'low', 'close', 'volume', '6', 'volume_asset', '8', '9', '10', '11']
    
        df_time = df['time']        
        last_time = df_time.iloc[-1]
    
        if last_time < 1680480000000:
            dummy_tickers.append(i)

    except Exception as e:
        print(i + "  " + str(e))

print(dummy_tickers)

정말 간단한 방법으로, 가장 최근 캔들의 timestamp가 현재날짜보다 이전이면 실행하도록 조건식을 만들면 됩니다.

 

 

결과

더보기
더보기

['BCCUSDT', 'VENUSDT', 'PAXUSDT', 'BCHABCUSDT', 'BCHSVUSDT', 'BTTUSDT', 'USDSUSDT', 'NANOUSDT', 'MITHUSDT', 'USDSBUSDT', 'GTOUSDT', 'ERDUSDT', 'NPXSUSDT', 'MFTUSDT', 'STORMUSDT', 'CVCUSDT', 'BEAMUSDT', 'HCUSDT', 'MCOUSDT', 'FTTUSDT', 'BULLUSDT', 'BEARUSDT', 'ETHBULLUSDT', 'ETHBEARUSDT', 'TCTUSDT', 'EOSBULLUSDT', 'EOSBEARUSDT', 'XRPBULLUSDT', 'XRPBEARUSDT', 'STRATUSDT', 'AIONUSDT', 'BNBBULLUSDT', 'BNBBEARUSDT', 'XZCUSDT', 'GXSUSDT', 'LENDUSDT', 'REPUSDT', 'BKRWUSDT', 'DAIUSDT', 'XTZUPUSDT', 'XTZDOWNUSDT', 'SRMUSDT', 'BZRXUSDT', 'EOSUPUSDT', 'EOSDOWNUSDT', 'TRXUPUSDT', 'TRXDOWNUSDT', 'DOTUPUSDT', 'DOTDOWNUSDT', 'LTCUPUSDT', 'LTCDOWNUSDT', 'NBSUSDT', 'HNTUSDT', 'UNIUPUSDT', 'UNIDOWNUSDT', 'SXPUPUSDT', 'SXPDOWNUSDT', 'FILUPUSDT', 'FILDOWNUSDT', 'YFIUPUSDT', 'YFIDOWNUSDT', 'BCHUPUSDT', 'BCHDOWNUSDT', 'DNTUSDT', 'AAVEUPUSDT', 'AAVEDOWNUSDT', 'SUSDUSDT', 'SUSHIUPUSDT', 'SUSHIDOWNUSDT', 'XLMUPUSDT', 'XLMDOWNUSDT', 'BTCSTUSDT', 'RAMPUSDT', 'EPSUSDT', '1INCHUPUSDT', '1INCHDOWNUSDT', 'BTGUSDT', 'MIRUSDT', 'NUUSDT', 'TORNUSDT', 'KEEPUSDT', 'TRIBEUSDT', 'POLYUSDT', 'RGTUSDT', 'ANYUSDT', 'USTUSDT', 'ANCUSDT']

생각보다 많네요.

 

new_tickers = list(set(tickers) - set(dummy_tickers))

차집합을 구하여 새로운 티커리스트를 완성했습니다. 차집합을 구할 때 위와 같은 방식으로 하게 되면 리스트의 순서들이 뒤죽박죽이 되지만 저는 딱히 상관이 없어서 그대로 진행하였습니다. 리스트의 순서가 중요하신 분은 다른 방법으로 차집합을 구하면 될 것 같네요.

반응형

댓글