투자 데이터의 종류 — 백테스트와 자동 투자에 필요한 것

자동 투자와 백테스트에 어떤 투자 데이터가 필요한가 — 가격·배당·상장폐지 등 연료가 되는 데이터의 종류와 품질이 왜 중요한지 정리했다.

이 글은 특정 종목이나 매매 시점을 추천하는 글이 아닙니다. 투자 전략을 자동화할 때 필요한 데이터의 종류와, 그것을 가져오며 겪은 경험을 정리한 글입니다.

전략을 자동화하려면, 결국 데이터다

규칙 기반으로 움직이는 투자 시스템을 만들려면, 그 시스템이 판단할 재료가 있어야 한다. 사람이 뉴스를 보고 차트를 보며 판단하듯, 자동 시스템도 무언가를 ‘보고’ 판단한다. 그 ‘보는 대상’이 바로 데이터다. 데이터가 없으면 아무리 좋은 전략도 한 발짝도 못 움직인다. 데이터는 자동 투자 시스템의 연료인 셈이다.

그런데 막상 시작하려고 보니, “그래서 대체 어떤 데이터가 필요하고, 그걸 어디서 어떻게 가져오지?”부터 막막했다. 오늘은 그 이야기를 해보려 한다.

어떤 데이터가 필요한가

투자 판단에 쓰이는 데이터는 크게 세 종류로 나눌 수 있다. 표로 정리하면 이렇다.

데이터 종류무엇인가예시
시세 데이터가격이 어떻게 움직였는지주가, 거래량
재무 데이터기업의 살림살이가 어떤지매출, 이익, 부채
거시 데이터경제 전체의 환경이 어떤지금리, 환율, 물가

📌 시세 · 재무 · 거시 데이터 시세 데이터는 “가격이 얼마였나”에 대한 것이고, 재무 데이터는 “그 기업이 돈을 잘 버는가”에 대한 것이다. 거시 데이터는 개별 기업을 넘어 “경제 전체가 지금 어떤 상황인가”를 보여준다. 어떤 전략을 쓰느냐에 따라 이 중 필요한 데이터가 달라진다.

내 전략이 무엇을 보고 판단하느냐에 따라, 이 중에서 필요한 데이터가 정해진다. 예를 들어 가격 흐름만 보는 전략이라면 시세 데이터면 충분하지만, 시장 국면(레짐)까지 따지려면 금리 같은 거시 데이터도 필요해진다.

API — 데이터를 가져오는 통로

그럼 이 데이터는 어떻게 손에 넣을까. 일일이 손으로 옮겨 적을 수는 없으니, 프로그램이 알아서 받아오게 해야 한다. 이때 쓰는 것이 API다.

📌 API란? 프로그램끼리 데이터를 주고받는 ‘통로’다. 내 시스템이 데이터 제공처에 “이 종목의 지난 1년 주가를 줘”라고 요청하면, 그쪽에서 데이터를 정해진 형식으로 보내준다. 사람이 웹사이트를 눈으로 보는 대신, 프로그램이 데이터를 직접 받아오는 방법이라고 보면 된다.

전체 흐름을 그림으로 보면 이렇다.

투자 전략을 정하고 필요한 데이터를 API로 수집한 뒤 확인·검증해 시스템에 투입하는 다섯 단계 데이터 흐름 다이어그램

먼저 내 전략이 무엇을 보고 판단할지 정하고(①), 그에 따라 필요한 데이터를 추리고(②), API로 데이터 제공처에 요청해서 받아온다(③). 그리고 받은 데이터가 정말 내가 원하던 것인지 확인하고(④), 문제없으면 시스템에 넣어 돌린다(⑤). 말로만 들으면 순서가 깔끔해 보인다. 그런데 실제로 해보니, 저 ④번 ‘확인·검증’ 단계가 가장 큰 벽이었다.

그런데, 막상 해보면 여기서 막힌다

솔직히 처음엔 API로 데이터를 어디서 어떻게 가져오는지부터가 막막했다. 그런데 데이터 제공처를 찾은 뒤에도 문제는 계속됐다.

가장 답답했던 건, 그 API가 정확히 어떤 데이터를 주는지 미리 알기가 어렵다는 점이었다. 제공처의 설명 문서를 아무리 꼼꼼히 읽어도, “이 통로로 요청하면 대체 어떤 정보들이 딸려 오는지”가 명확하게 안 나오는 경우가 많았다. 결국 직접 한 번 호출해서 받아봐야 무엇이 오는지 알 수 있었다.

여기에 혼란을 더한 게 하나 더 있었다. 같은 데이터 제공처라도, 무료로 쓸 때와 돈을 내고 쓸 때 주는 데이터가 달랐다. 무료로는 일부만 찔끔 열어주고, 더 많은 데이터나 더 긴 기간의 자료는 유료로만 받을 수 있는 식이다. 게다가 고를 수 있는 옵션이 어찌나 많은지, 각 옵션이 정확히 무엇을 뜻하고 무엇을 주는지 파악하는 것부터가 일이었다. 이름만 봐서는 도무지 감이 안 잡혀서, 이것 역시 하나하나 눌러보고 받아봐야 겨우 이해되곤 했다.

더 힘든 건 그다음이었다. 어렵게 데이터를 받아냈는데, 그 안에 내가 진짜 원하는 항목이 들어 있는지 아닌지를 가려내기가 또 만만치 않았다. 받은 데이터가 잔뜩 쌓여 있어도, 그중 내 전략에 꼭 필요한 그 하나가 있는지 없는지, 있다면 어느 것인지를 일일이 확인하고 검증하는 일은 생각보다 훨씬 품이 많이 들었다. “문서를 봐도 모르고, 받아봐도 헷갈린다”는 게 초보 시절 내가 이 단계에서 느낀 솔직한 심정이었다.

실제로 내가 쓰고 있는 데이터

설명만 하면 뜬구름 같으니, 지금 이 블로그의 백테스트가 실제로 쓰고 있는 데이터를 그대로 펼쳐 보이겠다. 캐시에 쌓인 파일이 14개인데, 앞에서 나눈 세 종류 중 시세와 거시 두 종류만 들어 있다. 재무 데이터는 아직 한 줄도 없다. 지금 다루는 전략들이 개별 기업이 아니라 자산군을 다루기 때문이다.

종류무엇언제부터쓰는 곳
시세미국 S&P500 인덱스펀드1980년미국주식 자리
시세미국 장기국채 / 종합채권 / 단기국채1986·1986·1991년대피처와 현금 자리
시세선진국주식 인덱스펀드1999년분산 상대
시세금 선물2000년인플레이션 대비 자리
시세실제 ETF (S&P500·나스닥100 등)1993~2013년상품 비교용
거시원/달러 환율1981년원화로 다시 채점할 때
거시미국 소비자물가1947년생활비를 물가에 연동할 때

여기서 이 글의 핵심이 하나 드러난다. 내가 쓰고 싶은 기간이 아니라, 데이터가 있는 기간이 시험 범위를 정한다. 나는 2000년 닷컴 버블부터 보고 싶었는데, 정작 시작점을 정한 건 맨 아래에서 두 번째 줄인 금이었다. 금 시세가 2000년 8월부터라, 금이 들어간 전략은 그 이전을 볼 수가 없다. 1990년대를 넣고 싶어도 재료가 없어서 못 넣는다.

막상 가져와 보니 겪은 일들

앞에서 ‘④ 확인·검증이 가장 큰 벽이었다’고 썼는데, 그 뒤로 실제로 부딪힌 것들을 적어둔다. 하나같이 문서에는 안 나와 있던 것들이다.

겪은 일무슨 뜻이었나
잘 쓰던 국내 시세 라이브러리가 어느 날 죽음거래소가 로그인 방식으로 바꾸면서 인증 없이 못 받게 됐다. 공식 통로로 갈아타야 했다.
열쇠를 발급받았는데도 ‘권한 없음’열쇠 발급과 그 열쇠로 특정 자료를 볼 권한은 별개였다. 자료마다 따로 신청해 승인을 받아야 했다.
원하는 지수를 아무도 공개하지 않음배당까지 포함한 지수는 유료라, 가격 지수에 배당과 보수를 더해 직접 만들어 쓰고 다른 지수로 오차를 검산했다.
환율이 2003년부터만 있음무료로 쉽게 받는 곳은 기간이 짧았다. 닷컴 버블이 통째로 빠져서, 1981년까지 있는 다른 출처로 갈아탔다.
같은 상품인데 이름이 바뀜운용사가 브랜드를 바꾸면 이름으로 찾던 게 끊긴다. 이름 대신 종목 코드로 이어 붙여야 했다.

이 목록을 보면 알 수 있듯, 데이터 작업의 대부분은 가져오는 일이 아니라 ‘이게 정말 내가 생각한 그 숫자인가’를 확인하는 일이었다. 그리고 이런 건 어느 문서에도 안 적혀 있어서, 대개는 결과가 이상하게 나온 뒤에야 거꾸로 찾아내게 된다.

그래서 지금은 규칙을 하나 두고 있다. 새 데이터를 붙이면 이미 결과를 알고 있는 것으로 먼저 검산한다. 예를 들어 지수를 직접 합성했을 때는, 같은 방법을 정답을 아는 다른 지수에 적용해 오차가 거의 0인지부터 확인한다. 이 습관 하나가 잘못된 데이터로 몇 주를 날리는 일을 여러 번 막아줬다.

그래서 배운 것

이 과정을 겪으며 얻은 결론은 단순하다. 데이터는 머리로 이해하기 전에, 일단 직접 받아보고 눈으로 확인해야 한다는 것이다. 문서만 읽고 “이 데이터면 되겠지” 하고 넘어가면 나중에 반드시 발목이 잡힌다. 작게라도 한 번 호출해서, 무엇이 오는지, 내가 원하는 게 그 안에 있는지를 눈으로 직접 확인하는 습관 — 이게 데이터를 다루는 첫걸음이었다. 돌아보면 당연한 말 같지만, 처음엔 이 당연한 걸 몰라서 한참을 헤맸다.

정리하며

자동 투자 시스템의 연료는 데이터다. 크게 시세·재무·거시 세 종류가 있고, 이걸 API라는 통로로 받아온다. 다만 API 문서만 봐서는 무엇이 오는지 알기 어려워서, 직접 호출해 받아보고 원하는 데이터가 있는지 눈으로 확인하는 과정이 꼭 필요하다.

이렇게 데이터를 손에 넣은 다음에는, 그 지저분한 데이터를 어떻게 정리하고 다듬어 전략에 넣을지가 또 하나의 숙제로 남는다. 그 이야기는 나도 아직 씨름하는 중이라, 좀 더 정리가 되면 그때 나눠보고 싶다.


※ 이 글은 개인의 학습 과정을 공유하기 위한 것으로, 투자 권유나 자문이 아닙니다. 모든 투자의 판단과 책임은 투자자 본인에게 있습니다.

steadydawn
steadydawn

감이 아니라 데이터와 규칙으로 투자에 접근해보려는 사람입니다. 투자 전문가는 아니고 배우는 쪽에 가깝습니다. 그래서 시중에 알려진 공개 전략을 직접 코드로 백테스트해보고, 나온 숫자를 좋든 나쁘든 그대로 기록합니다. 특히 결과가 좋게 나올수록 한 번 더 의심하려 합니다. 이 블로그가 돌아가는 서버도 직접 구축해 운영하고 있어, 투자 이야기와 함께 서버·개발 이야기도 남깁니다.

기사 : 49

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다