전략 시뮬레이션(1) 편에서 upbit 일봉 데이터를 가져오는 부분에 대하여 설명을 하였습니다. 일봉은 최대 400개만 가져올 수 있기 때문에 아주 간단하게 코딩을 했었는데요. 

이번에는 분봉 및 tick 데이터를 가져오는 방법에 대하여 설명하도록 하겠습니다.

 

분봉과 틱은 아래 형식을 사용하면 됩니다.

  • 분봉 :   1, 3, 5, 10, 30, 60분 봉을 가져올 수 있습니다. 아래 형식에서 minutes 뒤에 원하는 분 정보를 넣으면 됩니다.
crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-BTC&count=10

 

  • 틱봉 : 틱봉을 가져오는 url입니다. 틱봉은 접속 주소도 틀리고 인자들도 조금 틀립니다. 특히 코드명 방식도 틀리니 참고하시기 바랍니다.
api.upbit.com/v1/trades/ticks?market=KRW-JST&count=500

 

우선 분봉은 숫자 상 제한이 없는 것 같기도 합니다. 1분 봉을 받아보니 한참을 받더군요.

문제는 분봉도 한번에 받을 수 있는 수량은 500개로 제한된다는 것입니다. 계속 이어 받기 위해서는 to 필드에 적절한 값을 넣어서 데이터를 받는 함수를 계속 호출하여야 합니다.

형식은 아래와 같습니다.

https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-BTC&count=10&to=2019-09-01 00:00:00

 

to 값은 앞에서 받은 데이터 중 가장 마지막 데이터의 'candleDateTime' 값을 사용하면 됩니다.

 

그리고 받는 중간에 연결이 끊어질 수 있으므로 500개씩 받은 데이터를 파일에 계속 써 나가는게 좋을 것 같습니다. 방식은 코인이름과 일자 그리고 일련번호를 쭉 붙여나가는 방식이면 될 것 같습니다. 우선 간단하게 관련 코드만 소개해드리고, tick 데이터를 모두 받는 코드가 정리되면 함께 github에 올리겠습니다. 

 

# ago : tick인 경우에만 사용
#       오늘 기준으로 며칠 전 : 예 오늘:0, 어제:1
def get_data_continue(candle, coin, ty='day', interval=1, count=10, frm=None, to=None, ago=0) :  
    end = False
    cnt = 1
    while(end == False) :
        t = int(time.time())
        if candle : 
            ret = get_candle_history(coin, ty, interval, count, to)

        if ret != None :
            if len(ret) < 2 : # no more data
                return

            # 마지막에서 두 번째 시간을 to로 사용함. 
            # to를 포함하지 않는 시간까지 자료가 넘어옴. 
            # 이전에 검색한 to까지 자료가 부족할 수 있음
            # 차후에 merge할 때 to 시간이 겹칠 수 있으므로 빼는 부분 추가하여야 함
            info = ret[-2]  

            # candle과 tick 정보가 다름.
            # dt, to용 값을 구함
            if candle :
                dt = info['candleDateTime'].split('+')
                to = dt[0].replace('T', ' ')
                day = to.split(' ')[0]
                
            if frm != None : # from보다 이전 데이터인지 확인
                info = ret[-1] # 마지막 데이터 
                if candle :
                    if info['candleDateTime'] < frm : 
                        ret = remove_data(ret, frm, 'candleDateTime')
                        end = True
                    
            # cnt 번호를 추가하여 파일이름 생성
            fname = coin+'_' + ty + '_' + str(interval) + '_' + format(cnt, '03d') + '_' + day + '.csv'
            cnt += 1
            save_to_file_csv(fname, ret)
            print ('save ', fname)

            if ty == 'day' : # day는 400개만 받을 수 있다.ㅣ
                end = True
            else :  # 분 봉은 계속 받을 수 있다.
                time.sleep(1)

        else :
            end = True

 

프로그램이 실행되고 나면 아래와 같은 형식으로 파일이 생성됩니다.

 

 

 

이후에는 파일 하나로 합치면 됩니다. 이 부분도 현재 작업 중이므로, 함께 소개하도록 하겠습니다.

 

시뮬레이션은 데이터를 만드는 과정을 잘 정의해놓아야 필요할 때 원하는 구간의 데이터를 쉽게 빼올 수 있습니다. 처음에는 간단하게 시작했는데, 이 부분에서 작업할 양이 많은 것 같습니다.

 

 

 

 

 

반응형

설정

트랙백

댓글