상장폐지된 기업을 제외하는 주식 백테스트는 최악의 결과 일부를 조용히 삭제하면서 높은 수익률을 보고할 수 있습니다. 문제는 대개 실용적인 선택에서 시작됩니다. 오늘날의 종목 목록을 내려받은 뒤, 지난 10년간 그 종목들을 테스트하는 것입니다. 그렇게 만든 목록에는 애초부터 살아남은 기업만 들어 있습니다.
사라진 기업을 연구 유니버스에 포함하려면 오래된 티커 몇 개를 더하는 것만으로는 부족합니다. 어떤 증권이 언제 존재했는지, 거래소에 언제 편입되고 제외됐는지, 마지막에 그 가치가 어떻게 처리됐는지 알아야 합니다. 흔한 편법 3가지는 각기 다른 방식으로 이 이력을 놓칩니다.
실수 1: 모든 연도에 현재 구성 종목 사용하기
현재 S&P 500 구성 종목을 대상으로 2010년부터 월간 모멘텀 전략을 테스트한다고 생각해 보세요. 실패하거나 인수·합병됐거나 지수에서 빠진 기업은 모든 리밸런싱에서 제외됩니다. 전략은 미래의 패자를 매수할 기회조차 얻지 못하고, 과거 유니버스에는 결국 살아남을 만큼 성공한 종목만 남습니다.
그 결과 대개 평균 수익률은 부풀려지고, 낙폭은 완만해지며, 모멘텀이나 퀄리티 같은 단순한 팩터를 선호하는 전략처럼 보입니다. 그런 신호가 실제일 수도 있습니다. 하지만 이 테스트에는 누가 살아남았는지 아는 정보라는 조용한 이점도 주어졌습니다.
시점별 편입 정보를 사용하세요. 각 리밸런싱 시점의 적격 종목 집합에는 당시 이용할 수 있었던 정보로 규칙을 충족한 증권이 포함되어야 합니다. 전략이 더 넓은 유니버스에서 거래한다면, 예정된 지수 검토 사이의 변경 사항까지 포함해 편입 효력 발생일을 기록해야 합니다.
실수 2: 종목 코드가 없으면 데이터도 없는 것으로 취급하기
최신 공급업체 파일에서 티커가 보이지 않으면 쉽게 건너뛰게 됩니다. 로더는 최근 행이 없는 것을 보고 종목을 오래된 것으로 표시한 뒤 제외합니다. 코드가 경고를 기록할 수는 있지만, 백테스트는 제외된 증권에 대한 기록 없이 더 깔끔해진 데이터 패널로 계속 진행됩니다.
합병이나 인수로 사라지는 증권도 있습니다. 재무 곤경, 파산 또는 상장 규정 미충족으로 상장폐지되는 증권도 있습니다. 마지막 정상 종가가 투자자가 실제로 받은 가치를 나타내는 것은 아닙니다. 재무 곤경에 처한 주식의 거래가 $0.40에서 멈춘 뒤 나중에 소각된다면, 포지션에 계속 $0.40의 평가액을 부여할 경우 가치 없는 보유분이 포트폴리오에 영원히 남을 수 있습니다. 반대로 이를 삭제하면 손실 자체가 사라질 수 있습니다.
상장일과 상장폐지일, 사유 코드, 해당하는 경우 승계 증권이나 현금 대가를 포함하는 증권 마스터를 유지하세요. 상장폐지 이벤트가 발생하면 실제 보유자가 받은 대가에 따라 포지션을 청산하거나 전환해야 합니다. 구체적인 처리는 이벤트와 상품에 따라 다르므로, 하나의 일반적인 ‘최종 가격’ 규칙으로는 모든 경우를 나타낼 수 없습니다.
| 이벤트 | 보유분의 변동 가능 형태 | 확인할 백테스트 처리 방식 |
|---|---|---|
| 현금 인수 | 계약 조건에 따른 현금 | 효력 발생일에 현금 대금을 기록합니다 |
| 주식 교환 합병 | 승계 기업의 주식 | 교환 비율을 적용하고 승계 증권으로 보유를 이어갑니다 |
| 파산에 따른 소각 | 회수 가능한 가치가 거의 없거나 없음 | 관련 분배 또는 소각 기록에 따라 포지션을 정리합니다 |
실수 3: 유니버스는 보완하고 수익률 처리는 건너뛰기
과거 구성 종목을 추가하면 종목 선택 문제만 해결됩니다. 수익률 시계열이 마지막 정상 종가에서 끝난다면 상장폐지 수익률은 여전히 빠져 있을 수 있습니다. 반대로 상장폐지 수익률을 추가하면서 가격 시계열에 이미 최종 이벤트가 반영되어 있다면 손실을 두 번 계산할 수 있습니다. 공급업체마다 처리 기준이 다르므로 필드 이름만으로는 파일에 어떤 기준이 쓰였는지 알기 어려울 수 있습니다.
주가가 $10에서 $1로 떨어진 뒤 상장폐지되고, 보고된 최종 수익률이 −80%라고 해 보겠습니다. 먼저 가격 하락률 90%를 계산하고 별도의 상장폐지 수익률 −80%를 곱하면, 합산 손실이 비현실적인 98%가 됩니다. 같은 가격 경로에서 겹치는 구간을 설명하는 두 측정치를 결합한 것이 문제입니다.
포트폴리오 수익률을 계산하기 전에 정상 수익률에 분배금과 상장폐지 결과가 포함되는지, 각 수익률이 어떤 날짜 구간을 나타내는지 문서화하세요. 몇 가지 알려진 기업 행동 사례를 원시 관측값에서 최종 포트폴리오 가치까지 대조하세요. 이벤트 시점에 보유한 포지션도 포함해야 합니다. 증권 단위 차트는 그럴듯해 보여도 포트폴리오 원장에서는 대금 반영일이 잘못됐을 수 있습니다.
종목 코드가 사라지면 그 이유를 밝혀야 하는 이벤트로 취급하세요. 데이터 파일에서 더 이상 보고되지 않는다는 이유만으로 기업의 중요성이 사라졌다고 추정하지 마세요.
상장폐지를 반영한 백테스트는 어떻게 점검할까요?
Sharpe 비율을 비교하기 전에 종목 수와 데이터 범위를 확인하세요. 연도별 적격 증권 수, 상장폐지된 증권 수, 미해결 데이터 문제로 제외된 증권 수를 보고하세요. 그런 다음 원인이 서로 다른 상장 종료 사례를 표본으로 살펴보고 각 포지션의 최종 포트폴리오 가치를 추적하세요.
상장폐지 종목을 포함한 경우와 제외한 경우에 같은 전략을 실행하되, 그 차이는 그 자체로 수정된 성과 추정치가 아니라 데이터 품질 진단으로 해석하세요. 유니버스 규칙, 수익률 처리 기준, 이벤트 시점은 모두 질문에 맞아야 합니다. 깨끗한 결과는 편입된 모든 보유분, 거친 모든 기업 행동, 그리고 남긴 가치를 설명할 수 있는 원장에서 나옵니다.
← 전체 글


