[개발] KRX API로 과거 데이터 받기

in #sct-kr2 years ago

제가 요즘 관심이 있는 분야는 옵션인데요. back test를 위하여 과거 데이터를 모으고 있습니다.

우선 필요한 데이터는 kospi200 데이터입니다. 만기일 기준으로 월 별 kospi200 변화를 보고 싶은데요.

ebest api에서는 과거 분 데이터까지 얻을 수 있지만 기간이 제한적입니다.

그래서 과거 데이터를 얻을 수 있는 방법을 찾아 보았습니다.

우선 naver.

아래 사이트로 가보시면 과거 kospi200 데이터를 볼 수 있습니다. 다만 2006.01.03일 까지 가능하고 종가 정보만 얻을 수 있습니다. 이 정도만 있어도 기본적인 back test를 위한 자료는 확보할 수 있습니다.

https://finance.naver.com/sise/sise_index.naver?code=KPI200

좀 더 찾아보니 한국거래소에서도 과거 kospi200 데이터를 검색할 수 있더군요. 여기에서는 시고저종 정보 뿐아니라 아주 먼 옛날 정보까지 검색이 가능합니다. 빙고!!

일일이 손으로 저장을 하다 보니 아무래도 API가 있을 것 같아서 검색을 해보니 역시나 API를 지원합니다.

krx api를 사용하기 쉽게 만든 wrapper api가 있을 것 같아서 github를 검색해보니 역시나 있습니다.

https://github.com/sharebook-kr/pykrx

github에는 없는 게 없으니 항상 github에서 찾아보는 습관을 들여야 합니다.

pykrx를 다운 받아서 돌려보았습니다. 잘 동작합니다.

pykrx를 이용하여 kospi200 과거 데이터를 받아보겠습니다.

data = stock.get_index_ohlcv_by_date("20220103", "20220110", "1101") # kospi200 은 안됨

업종 정보를 얻을 수 있는 함수는 get_index_ohlcv_by_date() 입니다. kospi200의 업종 코드는 101입니다.

그리고 pykrx에서는 코스피와 코스닥을 구분하기 위하여 앞에 1(코스피), 2(코스닥)를 추가합니다. 그래서 1101을 넣으면 kospi200 과거 정보가 나와야 합니다.

image.png

그런데 동작하지 않습니다. 1027, 1111 모두 동작하는 하필 제가 필요로 하는 101만 동작하지 않습니다.
이 무슨 운명의 장난인지..
잠시 휴식을 취한 후 다시 한번 생각을 해 보았습니다. 왜 하필 kospi200만 안될까?
코드를 다시 보니 kospi200만 일관성이 없습니다. 027 이후 101 이후 111 뭔가 이상하죠..
그래서 혹시나 해서 028을 넣어보았더니.. 빙고!!! 잘 동작합니다.

data = stock.get_index_ohlcv_by_date("20220103", "20220110", "1028") # kospi200 028임

역시 뭔가 잘 안될 때는 될 때까지 하는 것 보다는 잠시 휴식을 하고 전체를 다시 살펴보는 것이 문제 해결에 도움이 되는 듯 합니다.

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.30
TRX 0.32
JST 0.051
BTC 100199.09
ETH 4013.22
SBD 4.01