ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬으로 바이낸스에서 데이터 크롤링하기
    기타/가상화폐 2021. 7. 11. 10:57
    반응형

    CCXT(CryptoCurrency eXchange Trading) 라이브러리를 이용하면 코인거래소에서 가격을 불러올 수 있다.

    바이낸스뿐만 아니라 FTX나 고팍스, 빗썸 등도 지원하는데 코드 한 줄 바꾸는 것만으로 서로다른 거래소의 가격을 불러올 수 있어서 매우 편리한 방법이다.

     

    나는 주로 USDT시장의 가격을 불러와서 백테스팅하고, 봇을 만들고 

    이 글을 보고있을 사람들도 대부분 그게 목적일테니 

    1. 바이낸스에 상장된 티커들을 불러와서 

    2. 그 중 USDT시장 데이터만 뽑아내서 

    3. 가격을 조회하는 방법 

    에 대해 알아보자

     

    설치와 기본 준비

    !pip install ccxt #ccxt 라이브러리 설치 
    import ccxt #라이브러리 임포트 
    exchange = ccxt.binance() #바이낸스 객체 생성

    ccxt를 설치하고 임포트한 뒤에 바이낸스 클래스를 이용해서 exchange 객체를 생성하는 것으로 준비는 끝난다 

    만약 다른 거래소를 이용하고 싶다면 ccxt.거래소이름() 로 바꿔주면 된다 

    티커 불러오기 

    exchange.fetch_tickers() #티커의 각종 정보를 딕셔너리로 불러옴 
    ticker = list(exchange.fetch_tickers().keys()) #딕셔너리의 key값만 뽑아내서 리스트로 만들기

    티커는 fetch_tickers()로 불러올 수 있다. 그런데 이 메소드를 그대로 실행하면 아래와 같이 나온다 

    각 티커의 모든 정보가 딕셔너리 형태로 반환된다

    1500개가 넘는 시장의 정보가 쏟아져 나오기 때문에 무서워진다 

    그러나 딕셔너리의 key가 티커로 되어있기 때문에, 딕셔너리의 key만 뽑아내면 바이낸스의 모든 종목을 구할 수 있다  

    USDT시장 데이터만 가져오기 

    딕셔너리에서 티커만 뽑아내더라도 그 수는 1500개가 넘는다

    한 코인에 대해 여러 시장이 존재하기 때문이다. 이더리움이라면 스테이블코인 시장만 해도 ETH/USDT, ETH/USDC, ETH/DAI 등이 존재한다 

    정규식을 이용하면 이 중에서도 내가 원하는 것만 뽑아낼 수 있다

     

    바이낸스의 종목코드는 ETH/USDT와 같이 이루어져 있으므로,

    정규식으로 'USDT로 끝나는 티커'만 뽑아오면 된다 

    USDT_ticker = [] 
    import re 
    p = re.compile(r'\w+[/]USDT')
    for i in ticker:
        if p.match(i) and 'UP' not in i and 'DOWN' not in i: #레버리지토큰 필터링을 위함
            USDT_ticker.append(i)

    가격 조회하기 

    fetch_ohlcv('티커','타임프레임',...)으로 조회할 수 있다 

    그런데 문제가 있다

    1. 값이 리스트로 반환되고

    2. 시간이 타임스탬프로 나오고 

    3. 리스트로 반환되기 때문에 컬럼의 값이 없다

    따라서 이것에 대한 처리도 필요하다

     

    이를 한번에 처리해주는 함수를 만든다면 아래와 같다 

    def get_df_binance(ticker,time_interval):
        data = exchange.fetch_ohlcv(ticker,time_interval) #값이 리스트로 반환된다 
        df = pd.DataFrame(data) #데이터프레임으로 만든다 
        df.columns = (['Date','Open','High','Low','Close','Volume']) #컬럼 지정 
        def parse_dates(ts):
            return datetime.datetime.fromtimestamp(ts/1000.0) #타임스탬프를 시간형식으로 전환 
        df['Date'] = df['Date'].apply(parse_dates) #Date컬럼에 적용 
        return df #데이터프레임 반환

    이제 모든 준비가 끝났다

    모든 USDT시장 중에서 내가 원하는 조건을 만족하는 종목을 찾아내고 싶다면 

    아래와 같이 쓸 수 있을 것이다 

    for i in USDT_ticker:
        df = get_df_binance(i,'1d')
        def 대충내가원하는조건(i,df):
        	'''
            조건 만족하면 티커 반환 
            '''
        	return i
        print(대충내가원하는조건(i,df))

     

    반응형

    댓글

Designed by Tistory.