<퀀트를 위한 주식 데이터 수집(2007년~2018년/01/10 데이터)>


이번 방학동안 "변동성 돌파 전략"에 대해 분석하려고 한다. 그래서 일주일을 거쳐 고생해 주식 데이터를 수집했다. 2007년 1월 1일부터 2018년 1월 10일까지 상장된 모든 주식의 일봉 데이터(시가, 고가, 저가, 종가, 거래량)과 2007년 3분기부터 2017년 3분기까지 분기별 시총/PER/PBR/PSR 데이터를 모았다. (ETF, 최근 상장 주식, 우선주, '~스팩/~호' 주는 제외했다.)

일봉 데이터는 키움 증권 OPEN API를 이용했다. 수집하는 데 하루 이상이 걸렸다. 노트북이 안 좋을 뿐만 아니라 네트워크 환경도 안 좋고 수집 과정에서 몇몇 변수가 있어 다시 처음부터 수집하는 경우가 다반사였다. 또한 키움 증권 API를 연속적으로 많이 사용하면 키움 증권 서버에서 서버 요청을 막는 경우도 있어 수작업이 추가로 요구됐다.

분기별 시총/PER/PBR/PSR 데이터는 퀀트킹 카페에서 데이터를 얻었다. 


수집한 모든 데이터는 MySQL에 저장했다. 프로그래밍으로 데이터를 접근하는 데 엑셀보다 MySQL이 편리하기에 MySQL에 저장했다. 물론 MySQL에 있는 데이터들은 파이썬 API를 사용하면 쉽게 엑셀 파일로 만들 수 있다.




 

수집한 데이터의 DB 정보는 위와 같다. "kosdaq_market"은 코스닥 상장 종목들의 일봉 데이터가 저장되있다. "kospi_market"은 코스피 상장 종목들의 일봉 데이터가 있다. pbr과 psr, per 테이블은 이름과 같이 모든 종목들의 분기별 지표가 들어있다. "tmvalue" 테이블은 분기별 시가 총액 데이터가 있다. "kospi"와 "kosdaq" 테이블은 코스피와 코스닥 지수 일봉 데이터가 있다.


추가로 "kospi_profit_X"와 "kosdaq_profit_X" 테이블이 있다. "변동성 돌파 전략"을 이용했을 때 각 종목들의 수익률을 저장한다. "변동성 돌파 전략"을 모른다면 이전 포스트를 참조하면 되겠다. "변동성 돌파 전략"은 (전날 고가 - 전날 저가)에 특정 변수를 곱한다. 해당 변수가 매수 시점을 결정한다. 따라서 특정 변수 설정이 중요하다. 설정 방법은 이전 X기간동안 최대 수익률을 낸 변수로 결정했다. 이 변수는 테이블에서 Scope 이름으로 저장된다. 

각 종목을 특정 개월 단위로 나눈다. 쪼갠 개월에서 특정 개월의 Scope 값은 이전 개월의 최대 수익 Socpe값으로 한다. 예를 들어보자. "kospi_profit_X" 테이블에서 X는 기간을 나타낸다. 아래 "kospi_profit_3" 테이블의 일부 데이터를 살펴보자. 코드 "000020"인 주식은 2007년 10월부터 12월까지 Scope가 1.1일 때 수익률이 가장 높았다. 따라서 2008년 1월부터 3월까지는 Scope 값을 1.1로 해서 매수/매도했고 이에 대한 수익률을 저장했다. 2008년 4월부터 2008년 6월까지의 Scope값이 0.2인 걸로 보아 실제 2008년 1월부터 3월까지 수익률은 Scope 값이 0.2일 때 최대였다는 걸 알 수 있다. 이 처럼 각 기간동안의 과거 데이터를 토대로 Scope 값을 결정해 수익률을 저장한 것이 "kospi_profit_X", "kosdaq_profit_X" 테이블이다.




"kospi_profit_X"와 "kosdaq_profit_X" 데이터는 워낙 계산할 양이 엄청 많아 총 데이터를 구하는 데 3~4일 정도 걸렸다. 데이터를 구하는 소스 코드와 이에 대한 설명은 아래 URL을 통해 확인할 수 있다.


<파이썬을 이용한 주식 변동성 돌파 전략 분석을 위한 최적화 변수 계산(1)>

<파이썬을 이용한 주식 변동성 돌파 전략 분석을 위한 최적화 변수 계산(2)>


다시 수집한 데이터들의 테이블을 보면 "kospi_profit_Xc", "kosdaq_profit_Xc" 가 있다.(뒤에 c가 붙어있다.) 이 테이블들은 모든 기간의 Scope를 동일하게 줬다. 'kospi_profit_1c"는 모든 종목들을 Scope 값으로 1을 적용한 수익률 데이터를 저장한다. "kosdaq_profit_05c"는 모든 종목들의 Scope 값이 0.5이다. 이 데이터를 계산하는 코드는 포스트에 개재하지 않을 예정이다. "kospi_profit_X" 데이터를 구하는 코드만 이해하면 이는 금방 구할 수 있다. 



몇 일동안 수집한 위 데이터를 가지고 이번 방학동안 "변동성 돌파 전략"에 대해 분석할 것이다. 분석하는 데는 MySQL, Python, 키움 Open API+를 이용한다. 분석한 내용은 차차 포스팅할 예정이다.  

혹시 수집한 데이터가 필요하다면 아래 받을 메일 주소와 함께 댓글 달아주세요 


* 메일로 받은 주식 데이터 mysql에 로드하는 방법이 궁금하다면 이 문장을 클릭해주세요

+ Recent posts