(python) 업비트에서 평균 거래량 대비 5분 거래량 비율 알아내기

2019-09-03

업비트에서 일주일 평균 거래량 대비 최근 5분 거래량에 대한 비율을 받아오는 예제 코드를 만들어보겠습니다.

언어는 python을 이용할 것이고, upbitpy를 이용할 것입니다.

1. upbitpy 설치

먼저 upbitpy 를 설치합니다. (PC에 python이 설치되어있지 않다면 python 먼저 설치)

pip3 install upbitpy

2. Timer function

일정 간격으로 분봉을 가져오기 위해 System time기준으로 sleep하는 timer function을 만듭니다.

def wait(min):
    now = datetime.datetime.now()
    remain_second = 60 - now.second
    remain_second += 60 * (min - (now.minute % min + 1))
    time.sleep(remain_second)

3. 요청 제한에 대한 sleep function

candle 정보를 연속적으로 요청하면 요청 제한에 걸리게 됩니다.

요청 전 요청제한이 걸려있는지 확인하고 제한에 걸렸으면 1초 sleep하는 function을 추가합니다.

# candle 요청 회수 제한이 걸리면 1초 sleep
def check_remaining_candles_req(upbit):
    ret = upbit.get_remaining_req()
    if ret is None:
        return
    if 'candles' not in ret.keys():
        return
    if int(ret['candles']['sec']) == 0:
        logging.debug('>>> sleep 1 seconds')
        time.sleep(1)

4. 7일 거래량을 받아와 dict에 저장

candles_7d = dict()
# 7일간 거래량
for m in krw_markets:
    candles_7d[m] = upbit.get_weeks_candles(m, count=1)[0]

5. 5분봉 가져와서 거래량 비율 확인

 while True:
    logging.info('평균 거래량 대비 {}분 거래량 비율========================'.format(INTERVAL_MIN))
    for m in krw_markets:
        vol = upbit.get_minutes_candles(1, m, count=1)[0]['candle_acc_trade_volume']
        vol_7d = candles_7d[m]['candle_acc_trade_volume']
        vol_7d_avg = (((vol_7d/7.0)/24.0)/60.0)*INTERVAL_MIN
        vol_ratio = format((vol/vol_7d_avg)*100.0, '.2f')
        logging.info('[{}] {}% (거래량:{}, 평균:{})'.format(
            m, vol_ratio, format(vol, '.2f'), format(vol_7d_avg, '.2f')))
        check_remaining_candles_req(upbit)
    wait(INTERVAL_MIN)

6. 결과

$ python samples/get_volume_ratio.py
python get_volume_ratio.py
INFO:root:평균 거래량 대비 5분 거래량 비율========================
INFO:root:[KRW-BTC] 346.73% (거래량:8.64, 평균:2.49)
INFO:root:[KRW-DASH] 855.35% (거래량:0.98, 평균:0.11)
INFO:root:[KRW-ETH] 254.56% (거래량:66.96, 평균:26.30)
INFO:root:[KRW-NEO] 1503.90% (거래량:49.81, 평균:3.31)
INFO:root:[KRW-MTL] 271.95% (거래량:1925.36, 평균:707.98)
INFO:root:[KRW-LTC] 1725.82% (거래량:83.01, 평균:4.81)
INFO:root:[KRW-STRAT] 3114.94% (거래량:3772.03, 평균:121.09)
INFO:root:[KRW-XRP] 289.79% (거래량:46409.92, 평균:16015.26)
INFO:root:[KRW-ETC] 2.92% (거래량:2.64, 평균:90.43)
INFO:root:[KRW-OMG] 1580.84% (거래량:483.52, 평균:30.59)
INFO:root:[KRW-SNT] 96.49% (거래량:4475.73, 평균:4638.37)
INFO:root:[KRW-WAVES] 30.65% (거래량:7.80, 평균:25.45)
INFO:root:[KRW-PIVX] 28.07% (거래량:664.07, 평균:2365.36)
INFO:root:[KRW-XEM] 5.54% (거래량:31.62, 평균:571.11)
INFO:root:[KRW-ZEC] 49.58% (거래량:0.24, 평균:0.48)
INFO:root:[KRW-XMR] 798.76% (거래량:1.79, 평균:0.22)
INFO:root:[KRW-QTUM] 396.41% (거래량:650.83, 평균:164.18)
INFO:root:[KRW-GNT] 133.84% (거래량:3962.70, 평균:2960.76)
INFO:root:[KRW-LSK] 742.19% (거래량:30.83, 평균:4.15)
INFO:root:[KRW-STEEM] 2839.37% (거래량:5000.00, 평균:176.10)
INFO:root:[KRW-XLM] 123.55% (거래량:2358.00, 평균:1908.52)
INFO:root:[KRW-ARDR] 90.69% (거래량:805.46, 평균:888.13)
INFO:root:[KRW-KMD] 92.75% (거래량:50.00, 평균:53.91)
INFO:root:[KRW-ARK] 172.78% (거래량:39.06, 평균:22.61)
...

Code

전체 코드는 upbitpy/samples/get_volume_ratio.py에서 확인하실 수 있습니다.