당신의 백테스트가 실전에서 깨지는 이유

📌 원문: https://m.blog.naver.com/hyunsoo-is-cute/224127413372


많은 투자자는 과거 데이터를 뒤적입니다. 좋은 매매전략을 찾기 위해서죠. 그리고 과거에 수익이 났던 방식을 발견하면 백테스트를 해봅니다.

하지만 통계적으로 검증되었다는 그 전략들, 과학적으로 보이기까지 하는 전략이 왜 실전 투자에서는 백테스트의 결과를 전혀 따라가지 못하고 실패하는 걸까요?

오늘은 투자의 필수 도구인 백테스트에 대해서 이야기 해보겠습니다.

백테스트란 무엇인가?

백테스트는 특정 투자 전략이나 매매 규칙을 과거의 시장 데이터에 대입하여, 만약 그 당시에 이 방식대로 투자했다면 어떤 결과가 나왔을지 시뮬레이션해 보는 과정을 말합니다.

이 과정을 통해 투자자는 자신의 아이디어가 과거 시장에서 수익을 낼 수 있었는지, 그리고 얼마나 큰 손실 구간을 버텨야 했는지를 수치로 확인할 수 있습니다. 데이터에 기반한 투자를 하려는 사람들에게 백테스트는 선택이 아닌 필수적인 과정입니다.

백테스트의 한계: 쓰레기를 넣으면 쓰레기가 나온다 (GIGO)

백테스트의 가장 근본적인 문제는 우리가 얻을 수 있는 과거 데이터가 불완전하다는 데 있습니다.

일반 투자자가 흔히 접하는 무료 데이터는 수정 주가 처리가 제대로 되어 있지 않거나, 데이터가 누락된 경우가 허다합니다. 특히 배당이나 액면분할 정보가 잘못 반영된 데이터를 기반으로 백테스트를 돌리면 결과값은 완전히 왜곡됩니다. 쓰레기를 넣으면 쓰레기가 나온다는거죠.

만약 일간 데이터를 이용한 장기 투자가 아닌 분 단위, 초 단위의 단기 트레이딩 전략을 검증하려면 정교한 분봉 데이터가 필요합니다. 하지만 고품질의 과거 분봉 데이터는 매우 비싸거나 구하기 어렵습니다. 무료로 제공되는 분봉 데이터는 실제 체결 데이터와 차이가 커서 실전 투입 시 전혀 다른 결과를 초래합니다.

특히 미국 시장의 경우 주식이 단일 거래소가 아닌 수많은 거래소에서 동시에 매매됩니다. 우리가 보는 차트 데이터가 특정 거래소의 데이터만 반영한 것인지, 전체 시장의 통합된 데이터(SIP)인지에 따라 백테스트 결과는 판이하게 달라질 수 있습니다.

가격 데이터 외에 재무제표를 이용한 투자에도 문제가 있습니다. 퀀트 투자자들이 많이 활용하는 재무 데이터는 숫자로만 표현되지 않는 함정이 많습니다. 네이버 증권, 야후 파이낸스, 인베스팅 등 몇 몇 주식 관련 사이트에서 제공하는 재무제표를 비교해보세요. 비슷하지만 서로 조금씩 다른 것을 알게될 겁니다. 설령 숫자는 정확하더라도 벌금 같은 일회성 비용이나 자산 매각을 통한 일회성 수익이 포함된 데이터를 걸러내지 못하면, 해당 기업의 펀더멘털을 완전히 오해하게 됩니다. 이런 회계적 노이즈를 제거하지 않은 백테스트는 장부상의 숫자에만 속는 꼴이 됩니다.

백테스트의 한계: 기술적 함정

좋은 데이터를 얻었다고 해봅시다.

그 이후에도 백테스트에서 주의해야할 점은 많습니다.

전방 참조 편향 (Look-ahead Bias)

실제 투자 시점에는 알 수 없었던 미래의 데이터를 백테스트 계산에 미리 포함시키는 오류입니다. "오늘의 종가가 내일 시가보다 낮으면 매수한다"는 전략을 보죠. 오늘의 종가가 나오는 시점에는 내일 시가를 알 수 없습니다. 실제로는 불가능한 전략이지만 백테스트에서는 흔히 저지르는 오류입니다. "오늘 저가 대비 2% 오르면 사고, 오늘 고가 대비 2% 떨어지면 판다" 라는 전략은 어떨까요? 저가와 고가는 장이 마감된 후에 알 수 있습니다. 다운로드 받은 일간 데이터에서는 Open, High, Low, Close 숫자 4개로 나오지만 실제 매매로는 불가능한 전략이죠.

재무제표를 보고 투자하는 경우도 마찬가지 입니다. 분기별 영업이익을 보고 영업이익이 전 분기 대비 높아진 순서로 상위 10 종목을 보유하는 전략이 있다고 해보죠. 백테스트를 할 때 우리는 12월 31일에 해당 기업의 4분기 매출과 영업이익을 알고 있는 것으로 간주하고 종목을 선정합니다. 하지만 실제로 기업의 실적 발표는 1~2개월 뒤에 나옵니다. 기업별로 공시 일자도 다릅니다. 상위 10종목을 선정하려면 모든 종목의 분기 실적 발표가 종료될 때까지 기다려야 합니다.

전방 참조 편향은 데이터 수집 단계에서도 발생합니다.

"나스닥100 지수에 포함된 종목들 중에서 2015년부터 2025년까지 과거 10년간 수익률이 좋았던 종목 10개를 고른다"는 전략을 보죠. 10년 전에는 지수에 있었지만 그사이에 망해서 사라진 기업들(상장폐지 종목)은 현재 데이터 리스트에 존재하지 않습니다. 결국 우리는 미래에 살아남을 종목이 무엇인지 이미 알고 있는 상태에서 과거로 돌아가 투자하는 셈입니다. 실패한 기업들을 아예 제외하고 테스트하므로 수익률이 압도적으로 높게 나옵니다.

시장 충격, 유동성 문제

백테스트는 나의 매매가 시장에 아무런 영향을 주지 않는다는 가정하에 진행됩니다.

그래서 백테스트에서는 "가장 유리한 가격"에 전량 체결된 것으로 나오지만, 실제로는 내가 사는 행위 자체가 가격을 밀어 올리고 내가 파는 행위가 가격을 떨어뜨리는 '시장 충격' 비용이 발생합니다. 거래량이 적은 종목, 시가총액이 낮은 종목, 소위 호가창이 얇은 종목이라면 내가 백테스트상에서 계획한 물량을 던지는 순간 주가는 폭락합니다.

데이터 마이닝과 사후 과잉 확신

다른 함정을 다 피했다고 해도 이 함정은 피할 수가 없습니다.

우리는 이미 어떤 산업이 성공했고 어떤 위기가 있었는지 알고 있습니다. 무의식적으로 "2008년에는 금융주를 피해야지"라는 전제를 깔고 전략을 짜게 될겁니다.

아무리 객관적으로 하려고 해도 '이미 알고 있는 역사'를 배제하고 당시의 불확실성 속에서 전략을 수립하는 것은 거의 불가능에 가깝습니다.

이미 결과가 나온 차트를 보고 전략을 만드는 것 자체가 일종의 부정행위가 될 수 있습니다.

그럼에도 백테스트가 필요한 이유

백테스트의 목적은 미래의 수익을 예상하기 보다는 최악의 시나리오를 미리 알기 위해서입니다. 내가 선택한 전략이 과거 금융위기나 폭락장에서 최대 몇 퍼센트까지 하락했는지(MDD)를 모른 채 실전에 임하면, 작은 변동성에도 공포를 느끼고 투자를 포기하게 됩니다.

개인적으로는 백테스트 후에 과거 차트를 돌려봅니다. 이때 주봉이나 월봉이 아니라 일봉으로 세팅하고 하루씩 천천히 재생하죠. 백테스트에서 보이는 -30%, 언더워터 16개월은 숫자로는 별거 아닌 것 같지만 실제 차트를 돌려보면 무게감이 느껴집니다. 백테스트는 시작점과 끝점의 결과에만 집중하지만, 실제 우리가 투자할 때는 그 중간 과정을 견뎌야 합니다. 백테스트에서도 MDD, 언더워터 기간, 표준편차와 같은 지표를 제공해주지만 그 고통의 '시간적 길이'를 표현하지는 못합니다. 6개월간 횡보하면서 계좌가 천천히 녹아내리고 그러는 동안 다른 종목이 상승하는 경험은 백테스트로는 알 수 없죠.

백테스트를 시작하기 전에

진짜 쓸모 있는 전략을 만들고 싶다면 백테스트를 더 가혹하게 다뤄야 합니다. 단순히 과거 데이터를 돌려보는 수준을 넘어, 데이터를 트레이닝 구간과 검증 구간으로 엄격히 분리하는 과정이 필수적입니다.

트레이닝 구간과 검증 구간의 분리

백테스트의 신뢰도를 확보하는 가장 표준적인 방법은 데이터를 두 개의 기간으로 나누는 것입니다. 2010년부터 2018년까지를 트레이닝 구간(In-Sample)으로 정해 전략의 가설을 세우고 최적의 변수를 찾아냈다면, 2019년부터 현재까지는 검증 구간(Out-of-Sample)으로 설정합니다.

검증 구간의 핵심은 전략이 단 한 번도 본 적 없는 데이터에 대입하는 것입니다. 만약 트레이닝 구간에서는 압도적인 수익률을 기록했으나 검증 구간에서 수익률이 급감하거나 손실이 발생한다면, 그 전략은 가치가 없습니다. 시장의 본질적인 원리를 찾아낸 것이 아니라 단순히 우연히 수익이 좋았던 거죠.

변수 수정의 유혹과 p-hacking의 위험성

테스트 결과가 좋지 않을 때 많은 투자자가 저지르는 치명적인 실수는 변수를 조금씩 바꿔가며 다시 테스트를 돌리는 행위입니다. 이동평균선 수치를 20일에서 21일로, 다시 22일로 바꿔가며 수익률이 높게 나올 때까지 반복하는 것을 통계학에서는 p-hacking 또는 데이터 마이닝 편향이라고 부릅니다.

이것은 전략을 개선하는 것이 아니라 과거 차트에 수치를 억지로 끼워 맞추는 사후 조작에 불과합니다. 수천 번 변수를 바꾸다 보면 어떤 데이터에서도 우연히 수익이 나는 기적의 수치가 하나쯤은 반드시 발견됩니다. 하지만 이렇게 발견된 수치는 미래 시장에서 작동할 확률이 거의 제로에 가깝습니다.

그렇다고 변수를 바꿔가면서 테스트하지 말라는 이야기는 아닙니다. 진짜 강한 전략은 수치를 조금 바꿔도 결과가 비슷하게 유지되는 매개변수 안정성이 확인되어야 합니다.

단순함의 미학: 오컴의 면도날

전략에 조건과 필터가 늘어날수록 과거 수익률 그래프는 예뻐지지만 실전에서의 파괴력은 약해집니다. 특정 보조지표가 몇 이하이고 거래량이 어떻고 하는 식의 복잡한 조건은 과거 데이터의 특이점을 잡아내는 데는 탁월할지 모르나, 미래의 시장은 과거와 똑같은 특이점을 반복하지 않습니다. 변수가 3개 이상 들어가는 복잡한 전략은 과최적화되었을 가능성이 매우 높으며, 단순하고 범용적인 규칙일수록 미래 시장에서 살아남을 확률이 높습니다.

데이터 수집과 처리의 한계

위에서 이야기 했던 것 처럼 우리가 얻을 수 있는 데이터 자체가 가진 한계도 인정해야 합니다. 일반 투자자가 접근하는 무료 데이터는 수정 주가 처리가 불분명하거나 배당, 액면분할 정보가 오염된 경우가 많습니다. 또한 단기 트레이딩을 위한 정교한 분봉 데이터는 구하기 어렵거나 비싸며, 미국 시장처럼 거래소가 여러 곳인 경우 통합되지 않은 데이터는 실제 체결가와 큰 차이를 보입니다.

재무제표 데이터 역시 함정이 많습니다. 일회성 매각 수익이나 비용 처리가 포함된 숫자를 그대로 백테스트에 넣으면 기업의 실제 펀더멘털을 완전히 왜곡하게 됩니다. 이런 회계적 노이즈와 데이터 오염을 걸러내지 못한 백테스트는 결국 장부상의 숫자에 속아 파산으로 가는 매뉴얼을 만드는 것과 같습니다.

결국 우리가 선택할 수 있는 길은 두 가지뿐입니다.

첫 번째는 비용을 지불하고 검증된 유료 데이터를 구매하는 것입니다. 데이터의 오염으로 인해 실전에서 겪게 될 막대한 손실에 비하면 유료 데이터 구독료는 오히려 가장 저렴한 비용일 수 있습니다.

두 번째는 무료 데이터의 한계를 인정하고, 그 안에서도 왜곡이 적은 단순하고 굵직한 전략을 세우는 것입니다. 1분 1초를 다투는 미세한 트레이딩은 데이터의 작은 오염에도 결과가 뒤집히지만, 일봉이나 주봉을 기준으로 하는 장기적인 추세 추종 전략은 상대적으로 데이터 노이즈의 영향에서 자유롭습니다.

결론

스웨덴의 수학자 안드레예스 둥켈스는 통계로 거짓말하기는 쉬워도, 통계 없이 진실을 말하기는 어렵다고 말했습니다. 이 말은 투자에서 백테스트에도 통용되는 말이라고 생각합니다.

백테스트는 분명 불완전한 도구이며, 우리가 손에 넣는 데이터는 지저분하기 짝이 없습니다. 마음만 먹으면 p-hacking을 이용해서 남을, 또는 스스로를 속이는 것은 너무나 쉬운 일입니다.

하지만 백테스트가 불완전 하다고 해서 이 백테스트마저 버리는 순간, 투자는 근거 없는 낙관이나 막연한 공포에 의존하는 도박이 되어버립니다.

우리는 백테스트를 맹신해서도 안 되지만, 동시에 백테스트라는 최소한의 근거 없이 투자에 나서서는 안됩니다. 백테스트는 당신의 무모함을 제어하고 시장의 냉혹한 진실에 다가가게 해주는 최소한의 안전장치입니다.

그럼 당신의 성공적인 투자를 기원합니다.