백테스트에서 모든 캔들의 타임스탬프가 정확해도 미래 정보를 사용하게 될 수 있습니다. 전략이 오늘 살아남은 자산만 대상으로 여러 해의 과거를 테스트하면서, 어떤 시장이 계속 유동성을 유지하고 상장 상태로 남아 거래할 가치가 있을지 이미 알고 있었던 것처럼 다루면 이런 일이 생깁니다.
유니버스 구성은 전략의 일부입니다. 실거래 시스템이 각 의사결정 시점에 거래 가능한 자산만 선택할 수 있었다면, 백테스트도 같은 경계를 지켜야 합니다. 흔히 쓰이는 지름길 3가지가 이 경계를 무너뜨립니다.
실수 1: 오늘의 목록으로 전체 과거를 백테스팅하기
오늘 시가총액이 가장 큰 암호화폐 무기한 계약 시장 50개를 선별한 뒤, 2021년부터 백테스트한다고 가정해 보겠습니다. 이 목록에는 사라졌거나 유동성을 잃었거나 상장 폐지된 계약이 빠져 있습니다. 또한 그보다 앞선 시점에 아직 존재하지 않았을 수도 있는 시장을 과거 날짜에 포함하게 됩니다.
문제는 쉽게 눈에 띄지 않습니다. 실패한 자산이 표본에서 사라져 전략이 더 안정적으로 보입니다. 예를 들어 모멘텀 규칙은 오늘의 시장 50곳에서는 훌륭해 보일 수 있지만, 당시 기준으로 테스트했다면 이후 폭락하거나 거래소에서 상장 폐지된 종목에 반복해서 비중을 배분했을 수 있습니다. 결과를 알고 선택한 포트폴리오를 테스트한 셈입니다.
편입 여부를 날짜별 기록으로 관리하세요. 자산마다 편입 가능해진 시점, 더 이상 편입할 수 없게 된 시점과 그 이유를 추적합니다. 리밸런싱할 때는 해당 시점에 이용 가능했던 정보만으로 규칙을 적용합니다. 시장은 실제 상장 이후, 필요한 초기 데이터 축적 기간이 끝난 뒤에 편입해야 합니다. 상장 폐지 시 최종 포지션을 어떻게 청산하거나 정산할지 정해야 합니다. 해당 데이터 행을 삭제하는 것은 청산 규칙이 아닙니다.
실수 2: 의사결정 이후 측정된 통계로 순위를 매기기
과거 유니버스도 편입 규칙에 미래까지 포함하는 구간을 사용하면 정보가 새어 나올 수 있습니다. “매달 유동성이 가장 높은 주식 20개를 거래한다”는 합리적으로 들리지만, 전략이 거래하려는 한 달 전체를 기준으로 유동성을 순위화한다면 문제가 됩니다.
매월 첫 거래일에 리밸런싱한다고 가정해 보겠습니다. 해당 월의 평균 거래대금으로 순위를 매기면, 첫날에 편입 자격이 있었는지 판단하는 데 다음 3주를 몰래 사용하게 됩니다. 흔히 용량이 이례적으로 좋아 보이는 결과로 문제가 드러납니다. 전략이 진입 시점에는 알 수 없었는데도, 그달 후반에 유동성이 떨어진 자산을 피하기 때문입니다.
측정 기준 시점을 선택 시점보다 앞서도록 정하세요. 매월 첫 세션에 리밸런싱한다면 직전 세션에 끝난 이전 20개 세션의 데이터로 순위를 매길 수 있습니다. 그런 다음 체결 지연을 명확히 하세요. 순위 산정에 어제 종가를 쓴다면, 가정한 업무 절차에 따라 오늘 시가에 주문을 제출할 수 있나요?
| 선택 규칙 | 시점별 데이터 기준 적용 | 흔히 발생하는 누수 |
|---|---|---|
| 거래대금 상위 20개 | 리밸런싱 전까지 완료된 세션을 기준으로 순위 산정 | 리밸런싱 당일 또는 해당 월 포함 |
| 거래소 상장 여부 | 실제 상장 및 상장 폐지 시점 적용 | 과거 날짜에 현재 심볼 엔드포인트 사용 |
| 최소 이력 | 선택 시점까지 확보된 관측치 수 계산 | 필터 통과를 위해 미래까지 생존해야 하는 조건 설정 |
실수 3: 이력이 없다는 이유로 자산이 편입 자격이 없었다고 간주하기
데이터 공급업체의 아카이브가 과거 시장 기록을 완전하게 보존한다고 볼 수는 없습니다. 심볼이 없다는 것은 자산이 애초에 존재하지 않았다는 뜻일 수도 있고, 거래소가 명명 규칙을 변경했다는 뜻일 수도 있으며, 공급업체가 상장 폐지된 상품을 보존하지 못했거나 피드에 단순히 공백이 생겼다는 뜻일 수도 있습니다. 각 경우가 의미하는 바는 서로 다릅니다.
문제는 설명되지 않은 공백이 있는 깔끔한 유니버스입니다. 리서처는 흔히 전체 룩백 구간을 요구한 다음, 그 구간이 확보되지 않은 자산을 별다른 설명 없이 제외합니다. 타당한 초기 데이터 축적 규칙일 수 있지만, 신규 상장 자산을 의도적으로 버리는 결과도 낳습니다. 더 나쁘게는 실패한 시장에 데이터 누락이 집중되어 있다면 “완전한 데이터만 사용”하는 규칙이 또 다른 생존 편향 필터가 됩니다.
편입 자격, 데이터 가용성, 전략의 초기 데이터 축적 요건을 서로 별개의 사실로 관리하세요. 날짜별로 자산을 제외한 이유를 기록하세요. 누락을 조용히 삭제 처리하지 말고 리서치 기록에 남기세요. 출처 자료만으로 시장의 상장 여부나 거래 가능 여부를 확인할 수 없다면 그 사실을 밝히고 결과가 그 불확실성에 얼마나 좌우되는지 측정하세요.
재현 가능한 유니버스 만들기
유용한 감사는 과거 리밸런싱 한 번을 골라 시작할 수 있습니다. 날짜가 기록된 상장 정보와 해당 기준 시점에 이용 가능했던 데이터로 후보 목록을 다시 구성하세요. 완료된 관측치만 사용해 순위 산정 입력값을 다시 계산하세요. 그런 다음 새로 나온 편입 목록을 백테스트에서 실제 사용한 목록과 비교하세요.
실행 규칙, 기준 시점, 편입 여부 결정, 출처 버전을 실행 결과와 함께 저장하세요. 특정 날짜에 한 자산이 편입되고 다른 자산이 제외된 이유를 설명할 수 없다면, 전략이 우위를 발견한 것인지 미래를 반영한 표본을 물려받은 것인지 아직 알 수 없습니다.
유니버스 구성 실수는 불가능한 가격으로 나타나는 경우가 드뭅니다. 거래하기 어려워진 시장을 마침내 피한 전략의 모습으로 드러납니다.
← 전체 글


