트레이딩

[키움API] 전종목 일봉 데이터 수집시 얼마나 걸릴까?

성민석 2021. 10. 31. 12:01

안녕하세요 성민석입니다.

오늘은 키움API로 대한민국 KOSPI와 KOSDAQ에 상장된 과거 모든 일봉 데이터를 다운로드 받으려면 얼마나 걸릴지 알아보겠습니다.

결론적으로 말하자면 키움API를 사용하게 된다면 22시간이 필요(1개의 컴퓨터 경우)합니다. 정말 하루종일 받은 것 같습니다. 다음에도 이러한 시도를 하게 된다면 저는 하나의 DB 안에 두 개의 컴퓨터로 KOSPI와 KOSDAQ 종목을 각각 수집하게 만들 것 같습니다. 

 


 

먼저 일봉데이터를 사용하기 위해서 사용될 TR은 주식일봉차트조회요청(opt10081)입니다. 조금 더 구체적으로 알아보기 위해서 KOA StudioSA에서 알려주는 정보를 확인해보겠습니다.

 

/********************************************************************
/ /// ########## Open API 함수를 이용한 전문처리 C++용 샘플코드 예제입니다.

[ opt10081 : 주식일봉차트조회요청 ]
[ 주의 ] 데이터 건수를 지정할 수 업고, 데이터 유무에따라 한번에 최대 600개가 조회됩니다.

1. Open API 조회 함수 입력값을 설정합니다.
종목코드 = 전문 조회할 종목코드
SetInputValue("종목코드" , "입력값 1");
기준일자 = YYYYMMDD (20160101 연도4자리, 월 2자리, 일 2자리 형식)
SetInputValue("기준일자" , "입력값 2");
수정주가구분 = 0 or 1, 수신데이터 1:유상증자, 2:무상증자, 4:배당락, 8:액면분할, 16:액면병합, 32:기업합병, 64:감자, 256:권리락
SetInputValue("수정주가구분" , "입력값 3");

2. Open API 조회 함수를 호출해서 전문을 서버로 전송합니다.
CommRqData( "RQName" , "opt10081" , "0" , "화면번호");
/********************************************************************/

 

해당 TR요청은 1회 요청시 최대 600개가 조회됩니다. 그렇다면 하나의 종목에 대해서 모두 데이터를 가져오게 될 경우 얼마나 걸릴까요? 예를 들어, 삼성전자(005939)의 경우 1985년 1월 4일부터의 과거 일봉 데이터를 조회하기 위해선 대략 17번의 TR요청이 필요하게 됩니다. 키움 API  특성상, 3.6초마다 제한을 걸어줘야 끊김없이 사용할 수 있습니다. 이 두가지를 고려한다면 삼성전자는 17번 TR요청 X 3.6초 = 약 1분이 필요합니다. 그리고 위의 내용을 코드로 입력하면 아래 사진과 같습니다. 연속 데이터 요청할 경우, 잔여 데이터 여부를 확인해야해서 조금 귀찮게 조건문으로 처리를 하긴 해야합니다. 

 

 

종목당 대략 1분이라는 계산이 필요하다는 걸 알았습니다. 대한민국 KOSPI와 KOSDAQ에 상장되어 있는 모든 종목은 3,200개 정도 되므로 얼핏 계산해도 3,200분이라는 시간이 필요합니다. 이는 60분으로 나누게 된다면 53시간이라는 긴 시간이 필요합니다. 사실 제가 직접 다 받아보니 실제로는 절반도 안되는 시간이 걸립니다.

 

삼성전자의 경우 2021년 10월 31일 기준 9,736개의 데이터가 조회됩니다.

 

스무스하게 모든 데이터를 수집하진 못했습니다. 중간 중간에 제가 예상치 못한 이슈가 발생해서 데이터가 조금 중복되기도 하고 갑자기 끊기기도 했습니다. 한번 같이 알아보시죠.

 

1차 시도 - 새벽 업데이트를 생각 못함

1차 시도는 대략 318개를 다운받으면서 발생했습니다. 키움증권의 경우, 새벽 5시쯔음 강제로 모든 API를 로그아웃시켜버립니다. 그래서 5시간동안 KOSPI 318개 종목에 대해서 수집했습니다. KOSPI 초반의 종목들은 데이터가 많아서 그런지 조금 오래 걸렸습니다.

 

 

2차 시도 - 평일이랑 코드를 구분하지 못함

2차 시도에서도 제가 깜빡한 부분이 있었습니다. 제가 3시반만 되면 장마감으로 판단되어 프로그램이 종료되게 만들어둬서 종료되어 버렸습니다. 주말에 코드를 돌리지 않아서 생각하지 못했던 부분인데, 이 부분이 조금 당황스럽긴 했습니다. 이때 대략 8시간동안 1400개 종목을 수집하였습니다. 그리고 여기서 추가적으로 알 수 있었던 부분은 KOSPI 후반 종목들은 데이터가 적어서 생각보다 빠르게 수집이 가능했습니다. 

 

 

3차 시도 - 드디어 마무리

마지막 시도는 문제없이 남은 KOSDAQ 종목도 모두 수집할 수 있었습니다. 9시간 정도 걸렸네요. KOSDAQ도 동일하게 후반 종목들은 데이터가 적어서 그런지 빠르게 수집이 가능했습니다. 

 

 

결론

1차 시도 - 300개 (5시간)

2차 시도 - 1400개 (8시간)

3차 시도 - 1500개 (9시간)

 

 

최종적으로 대한민국 KOSPI와 KOSDAQ 과거 전종목 수집하게 된다면 대략 22시간 걸립니다. 혹시라도 저와 같은 시도를 해보실 분들은 꼭 코드를 새벽 6시에 시작하게 만드시는게 좋을 것 같습니다. 이제 저는 수집한 데이터를 기준으로 주말마다 업데이트를 할 예정입니다. 하루단위로 업데이트하는게 소모적인 것 같기 때문입니다. 또한 조만간 1분봉 데이터도 수집할 예정입니다.

 

개인적으로 저는 일봉 데이터 수집은 대신증권 API CpSysDib.StockChart를 활용하시거나 Yahoo Finance나 Finance DataReader와 같은 라이브러리 활용하여 웹크롤링을 적극 추천드립니다. 대신증권의 경우도 3시간이 안 걸리고, 훨씬 제공해주는 데이터가 풍부합니다. 특히 상장주식수, 시가총액, 외국인주문한도수량, 외국인주문가능수량, 외국인현보유수량, 외국인현보유비율, 기관순매수, 기관누적순매수와 같은 데이터도 한꺼번에 주기 때문에 보다 다양한 전략을 구사할 수 있습니다. (키움API는 별도의 TR요청을 또 보내야합니다. 그렇다는 말은 하루가 또 걸린다는...) 

 

 


마지막으로 같이 트레이딩하는 분들과 소통하고 싶습니다.

언제든지 트레이딩이나 인공지능과 관련된 내용을 함께 공유하고 토론하고 싶으시다면 아래의 오픈 카카오톡 링크로 연락주세요.
https://open.kakao.com/me/minsuksung

 

성민석님의 오픈프로필

안암에서 인공지능을 연구하고 있습니다

open.kakao.com

 

728x90
반응형