필요성

백테스트를 위해 과거 주가정보를 확보하는 것은 무척 중요합니다. 과거 주가정보를 충분히 가지고 있어야 실제 주식시장과 유사하게 상황을 재현해 자신의 투자전략이 충분한 성과를 내는지, 백테스트 엔진은 오작동 없이 작동하는지를 확인할 수 있기 때문입니다.

국내시장의 경우, 매 거래 체결시 생성되는 가장 자세한 틱 데이터를 무료로 확보하는게 그리 어렵지는 않습니다. 틱 데이터는 가장 자세한 데이터라서 코스닥/코스피 2,500여 종목에서 매일 약 천만건 이상의 데이터가 생성되며, 이를 활용하면 보다 정밀하게 시장을 재현할 수 있습니다.

반면, 미국시장의 경우 별도의 비용을 지불하지 않는 한 야후/구글 파이낸스 등을 통해 일자별 데이터를 확보할 수 있습니다. 일자별 데이터에는 흔히 OHLCV라 불리는 시가/고가/저가/종가/거래량 정도의 데이터가 포함되는데, 일자별 데이터로는 단순한 수준의 백테스트만 가능하기 때문에 틱 데이터까지는 바라지 않지만 분 단위 데이터를 확보하고 싶었습니다.

다운로드

결론적으로, 폴란드의 stooq.com에서 5분 단위 데이터를 무료로 제공하고 있었습니다. 미국시장에 상장된 주식과 ETF의 최근 2달간 주가정보를 종목코드별로 모아서 ZIP 파일로 제공합니다. 아래 예시 화면의 우측 상단에 187 MB로 표시된 부분에 상응하는 링크를 누르면 받을 수 있습니다.

다운로드가 끝나면 약 만여개의 txt 파일을 확인할 수 있습니다.

아래는 ionq.us.txt 파일에 들어있는 IONQ의 데이터를 일부 발췌한 것입니다. 해당 종목에 대한 여러날에 걸친 주가정보가 시간순으로 저장되어 있는 형태입니다.

<TICKER>,<PER>,<DATE>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>,<OPENINT>
IONQ.US,5,20211201,153000,24.19,24.5,24.1,24.24,243939,0
IONQ.US,5,20211201,153500,24.2742,24.2809,23.77,23.924,186360,0
IONQ.US,5,20211201,154000,23.85,23.97,23.6,23.7318,87117,0
IONQ.US,5,20211201,154500,23.69,23.97,23.6,23.68,72511,0

일자별 저장

과거 SQLite, MySQL, InfluxDB 등을 사용해 주가정보를 저장하곤 했으나, 결국 속도와 용량, 백업 편의성 측면에서 파일시스템이 우수하다는 결론에 이르렀습니다. 다만, 파일시스템을 활용할 경우 파일생성 기준을 종목별로 할 것인지, 일자별로 할 것인지 고민이 필요합니다.

저는 일자별로 저장하는 것을 선호합니다. 백테스트의 변수로 투자 기간과 모니터링 종목을 달리 지정한다 했을때, 제가 개발중인 투자전략의 특성상 다수의 종목을 동시에 모니터링하기 때문에 종목을 필터링하기 보다는 기간의 필터링이 더 빈번하기 때문입니다. 따라서, 글 하단에 첨부된 코드를 작성해 아래와 같이 일자별로 데이터를 저장했습니다.

아래는 2021-12-01.txt 파일에 저장된 데이터를 발췌한 것입니다. IONQ 외에도 같은 시각에 거래된 다른 종목들이 모여있는 것을 확인할 수 있습니다. stooq.com의 원본 데이터에 폴란드 현지시각으로 되어 있는 것을, 미국 동부시각 기준으로 환산해 표시하고 있습니다.

IONQ	24.24	243939	09:30
IP		46.01	64067	09:30
IPG		33.69	53294	09:30
IPI		42.93	1471	09:30

마치며

국내시장 주가정보는 100% 자동으로 취득하게끔 해놓은 반면, 미국시장은 아쉽게도 위와 같이 압축파일을 직접 받아와야 하는 수고로움이 있습니다. 그러나, 구글/야후 파이낸스 등을 통해 일자별 OHLCV 정도에 만족해야 했던 것에 비해 앞으로는 더욱 해상도 높은 데이터를 취득할 수 있게 되어 백테스트에 큰 도움이 될 것으로 기대됩니다.

Info

인터넷에 주가정보가 공개되어 있더라도 제가 개인적으로 취득한 것을 임의로 배포할 수는 없습니다. 따라서 자료요청은 정중히 사양합니다.

소스코드