한국투자증권 API, 3분봉, 5분봉, 10분봉… 원하는 분봉 자유롭게 만드는 방법

한국투자증권 API, 3분봉, 5분봉, 10분봉… 원하는 분봉 자유롭게 만드는 방법

한국투자증권 API는 주식 자동매매를 위해 유용한 기능을 제공합니다. 리눅스 환경에서도 사용할 수 있어서, 내 컴퓨터가 아닌 아마존 서버를 활용할 수도 있습니다. 그런데 안타깝게도 한국투자증권 API는 당일에 한해 1분봉 데이터만 제공하며, 그것도 30개씩만 가져올 수 있습니다. 지난 포스팅에 이어 이번에는 1분봉 데이터로 다른 종류의 분봉 OHLCV 데이터를 만드는 방법에 대해 알아보겠습니다. 파이썬 판다스 패키지가 얼마나 유용한지 확인해보시기 바랍니다.

 

 


글의 순서

한국투자증권 API로 1분봉 데이터 가져오기
1분봉으로 다양한 분봉 OHLCV 데이터 만들기
파이썬 코드 : 1분봉 OHLCV 데이터로 3분봉, 5분봉, 10분봉… 원하는 분봉 데이터 만들기


한국투자증권 API로 1분봉 데이터 가져오기

한국투자증권 API는 일, 주, 월의 캔들을 가져올 수 있습니다. 그러나 분봉 데이터의 경우 당일(오늘)만 가능합니다. 그것도 1분봉만 가능하며, 한번에 30건만 조회할 수 있습니다. 그러니까 시간을 입력하면, 그 시간 기준으로 30분 전의 데이터부터 가져옵니다. 따라서 오늘 전체 시간인 09:00~15:30의 데이터를 가져오려면 15:30부터 30분씩 줄여가며 09:00시까지 거슬러 올라가야 합니다. 지난 포스팅, 한국투자증권 API로 1분봉 OHLCV 데이터 가져오기 실습코드의 decrease_time 함수에서 이를 구현하였습니다.


1분봉으로 3분봉, 5분봉, 10분봉… 원하는 분봉 OHLCV 데이터 만들기

1분봉으로 3분봉, 5분봉, 15분봉 등 다양한 분봉을 만드는 원리는 간단합니다. 1분봉 데이터를 묶어서 Open, High, Low, Close, Volume 데이터를 재계산하기만 하면 되니 말입니다. 파이썬의 경우, 판다스 패키지의 resample 함수를 사용하면 간단하게 해결됩니다. 예를 들어, resample(‘3T’)을 사용한다면, 3분 단위로 데이터를 그룹화하며, OHLCV 값을 다시 계산합니다.

resample_ohlcv(df, freq) 함수

1분봉 데이터를 가져온 후 이를 3분봉, 5분봉, 60분봉 등 다른 분봉 데이터로 바꾸는데 핵심적인 역할을 하는 함수가 resample_ohlcv(df, freq) 함수입니다. 이 함수는 1분 단위로 이미 모아둔 OHLCV 데이터(df)를 원하는 시간 간격(freq)으로 묶어서 새로운 OHLCV를 만들어주는 역할을 합니다.

resample() 함수의 freq 인자는 Pandas 내부에서 미리 정의해둔 시간 간격 문자열을 사용합니다. 이를 “오프셋(alias)”이라고 부르는데, 예를 들어 아래와 같은 문자열들이 있습니다.
▶T 또는 min : 분(minute)
▶H : 시간(hour)
▶D : 일(day)
▶W : 주(week)
▶M : 달(month)
▶Y 또는 A : 연(year)
▶1H, 5T 같은 식으로 숫자 + 단위 조합도 가능
‘5T’는 “5분 간격”, ‘1H’는 “1시간 간격” 등처럼 Pandas가 인식하는 형식대로 지정해주면 됩니다. 만약 더 복잡한 패턴이 필요하다면 Pandas의 DateOffset 객체를 직접 만들어서 사용할 수도 있어요. 즉, 기본적으로 freq=’3T’처럼 쓰면 3분 단위로 데이터가 묶이고, ’60T’나 ‘1H’처럼 쓰면 1시간 단위로 묶이는 식으로 동작합니다. 이런 문자열들은 Pandas가 미리 인식하도록 만들어놓은 것이라서 직접 함수를 구현할 필요 없이 편리하게 사용할 수 있습니다.


파이썬 코드 : 1분봉 OHLCV 데이터로 3분봉, 5분봉, 10분봉… 원하는 분봉 데이터 만들기

실습코드에 1분봉 데이터를 가져온 후 이를 3분봉, 5분봉 등으로 변환시킬 수 있는 방법을 나타내었습니다. 실습코드에서 time_end라는 변수에 시간을 입력하면, 그 시간부터 시간을 거꾸로 거슬러 올라가서 30개의 데이터를 받아옵니다. 한번에 30개만 받을 수 있으므로, 09:00부터 15:30까지의 데이터를 모두 받기 위해서는 time_end라는 변수를 자동으로 30분씩 당겨서 입력하게 하면 됩니다. decrease_time() 함수가 이를 담당해줍니다.

1분봉 데이터를 가져온 후 이를 3분봉, 5분봉, 60분봉 등 다른 분봉 데이터로 바꾸는데 핵심적인 역할을 하는 함수가 resample_ohlcv(df, freq) 함수입니다. 이 함수는 1분 단위로 이미 모아둔 OHLCV 데이터(df)를 원하는 시간 간격(freq)으로 묶어서 새로운 OHLCV를 만들어주는 역할을 합니다. 만약 resample_ohlcv() 함수의 파리미터 freq를 freq=’3T’와 같은 방식으로 넘겨주면 1분봉 데이터를 3분봉으로 파이썬 판다스 패키지가 바꿔줍니다.

1분봉을 3분봉으로 바꿔주는 핵심함수인 resample_ohlcv(df, freq)의 작동 절차를 정리하면 아래와 같습니다.

step1) df.set_index(‘DateTime’)
DataFrame의 DateTime 열을 인덱스로 설정해줍니다.
resample() 메서드를 사용하려면 DateTime 타입의 열을 인덱스로 지정해야하기 때문입니다.

step2) df.resample(freq).agg({…})
여기서 freq는 ‘3T'(3분), ‘5T'(5분), ’10T'(10분), ’60T'(60분)처럼 Pandas가 이해할 수 있는 시간주기를 의미합니다.
resample(‘3T’)면 3분 간격으로 데이터를 묶어주고, resample(’60T’)면 60분 간격(1시간)으로 묶어줍니다.

.agg({…}) 부분에서는 어떤 식으로 묶을지(집계) 방법을 정해줍니다.
▶Open(시가) : 구간 시작값 (첫 번째 값)
▶High(고가) : 구간 내 최고값
▶Low(저가) : 구간 내 최저값
▶Close(종가) : 구간 마지막값 (마지막 값)
▶Volume(거래량) : 구간 합계

step3) resampled.dropna(how=’any’)
묶으면서 생긴 결측치(NaN)를 제거합니다. 데이터가 없는 구간이 있다면 dropna를 이용하여 NaN을 제거할 수 있습니다.
필요에 따라 dropna() 대신에 다른 방법으로 결측치를 처리할 수도 있습니다.

step4) resampled.reset_index()
인덱스로 사용했던 DateTime을 다시 컬럼으로 만들어주기 위해 reset_index()를 사용합니다.

step1) ~ 4)의 절차를 통해 이 함수가 반환하는 값은 freq 단위로 묶인 새로운 OHLCV DataFrame입니다.






마치며 …

한국투자증권 API를 사용하면 제한된 형태의 1분봉 데이터만 제공받을 수 있어 여러모로 아쉽습니다. 하지만 파이썬 판다스 패키지의 resample() 함수를 적절히 활용하면, 1분봉 데이터로부터 3분봉이나 5분봉, 60분봉 등 원하는 분봉 데이터를 손쉽게 생성할 수 있습니다.

이번 포스팅을 통해 1분봉 데이터 수집 방법과 다양한 분봉 변환 프로세스를 익히셨길 바랍니다. 이러한 아이디어를 확장해 백테스팅, 모델 검증, 실시간 자동매매 등 더 폭넓은 영역에서 활용해 보시기 바랍니다.

 

 

함께 참고하면 좋은 글
한국투자증권 API로 1분봉 OHLCV 데이터 가져오기
한국투자증권 REST API로 시계열 데이터를 가져오는 파이썬 코드
한국투자증권 API로 주가를 가져오는 파이썬 프로그래밍
한국투자증권 API 신청 방법
RESTful API : 웹 애플리케이션 개발자를 위한 기초부터 실전까지
파이썬 데이터 분석을 위한 API 이해, REST API, WebSocket API


참고자료

한국투자증권 파이썬 API 문서

Leave a Comment