본문 바로가기

암호화폐/암포화폐자동매매

CCXT 라이브러리로 바이낸스에서 OHCLV 데이터 엑셀 저장하기

CCXT 모듈 바이낸스 OHLCV PANDAS DATAFRAME 엑셀 저장하기

import ccxt
import pandas as pd
import datetime
import time
import pprint

# 1. timestamp로 변환
def to_mstimestamp(str):
    str = datetime.datetime.strptime(str, "%Y-%m-%d %H:%M:%S")
    str = datetime.datetime.timestamp(str)
    str = int(str) * 1000
    return str
    
# 2. 바이낸스 선물(future) 객체 생성
binance_usdm = ccxt.binanceusdm({
    'apiKey' : 'APIKEY',
    'secret' : 'SECRET'
})

# 3. OHLCV 가져오기 (
start_date = to_mstimestamp('2021-01-01 00:00:00')
end_date  = to_mstimestamp('2021-12-31 23:59:59')
ohlcv = binance_usdm.fetch_ohlcv('BTC/USDT', timeframe='1d', since=start_date, limit=1000, parmas={'endTime':end_date})

# 4. DataFrame 생성
trading_df = pd.DataFrame(ohlcv, columns=['datetime', 'open', 'high', 'low', 'close', 'volume'])

# 5. 'datetime'컬럼 변환
trading_df['datetime'] = pd.to_datetime(trading_df['datetime'], unit='ms') + datetime.timedelta(hours=9)

# 6. 'datetime' 인덱스 설정
trading_df.set_index('datetime', inplace=True)

# 7. 엑셀저장
trading_df.to_excel('trading_df.xlsx')

1. 시간을 Timestamp로 변환하는 함수

 ① 대분의 가상화폐 거래소는 마이크로초단위를 사용한다.  10자리 Timestamp에 3자리가 추가된다.  그래서 Timestmap에 "X 1000"을 해야 한다.

 

2. 바이낸스 선물 객체 생성

 ① 현물일 경우 아래 사용

binance = ccxt.binance({'apiKey' : 'APIKEY', 'secret' : 'SECRET'})

3. OHLCV 가져오기

 ① 함수 : fetch_ohlcv(symbol, timeframe='1m', since=undefined, limit=undefined, params={endTime}) 

 ② 인수 :

   ⓐ symbol(필수) : 가져올 종목 ex)BTC/USDT, ADA/USDT

   ⓑ timeframe(필수) : (interval) 기간 ex)1m, 3m, 5m, 10m, 30m, 1h, 4h, 1d, 1w, 1m

   ⓒ since : (startTime) 시작시간. timestamp로 전달한다.

   ⓓ limit : 가져올 기간. 바이낸스(default 500, max 1000)

   ⓔ params : 

      endTime : 종료시간.  바이낸스의 경우 limit 최대값 1000기간 내에서만 설정가능

 

5. 'datetime' 컬럼 변환

 ① 마이크로초(ms)로 저장된 'datetime'을 변환한다.

 ② 저장된 datetime은 UTC를 사용함으로 한국시간으로 변환환다 (UTC + 9시간)

 


ccxt 바이낸스 모듈에서 OHLCV를 저장할 때 주의할 사항

바이낸스(대부분의 거래소)는 ms timestamp와 UTC타임을 사용한다