검색결과 리스트
업비트분캔들구하기에 해당되는 글 1건
- 2020.12.03 [시스템트레이딩] 전략 시뮬레이션(7) - 과거 데이터(분봉) 가져오기 2
글
[시스템트레이딩] 전략 시뮬레이션(7) - 과거 데이터(분봉) 가져오기
전략 시뮬레이션(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
프로그램이 실행되고 나면 아래와 같은 형식으로 파일이 생성됩니다.
이후에는 파일 하나로 합치면 됩니다. 이 부분도 현재 작업 중이므로, 함께 소개하도록 하겠습니다.
시뮬레이션은 데이터를 만드는 과정을 잘 정의해놓아야 필요할 때 원하는 구간의 데이터를 쉽게 빼올 수 있습니다. 처음에는 간단하게 시작했는데, 이 부분에서 작업할 양이 많은 것 같습니다.
'시스템트레이딩' 카테고리의 다른 글
[시스템트레이딩] API를 이용한 자동매매(2) (10) | 2020.12.12 |
---|---|
[시스템트레이딩] API를 이용한 자동매매(1) (2) | 2020.12.11 |
[시스템트레이딩] 전략 시뮬레이션(6) - 리펙토링 (0) | 2020.11.26 |
[시스템트레이딩] 전략 시뮬레이션(5) - 추세구간, 이동평균선 추가하기 (2) | 2020.11.22 |
[시스템트레이딩] 전략 시뮬레이션(4) - 차트에 문자열 출력하기 (2) | 2020.11.21 |