위험과 전략 · 중급 · 읽는 시간 5분

자기기만 없는 백테스트

과거 시뮬레이션은 연구 도구이지, 타임머신이나 실거래 성과의 약속이 아닙니다.

자기기만 없는 백테스트 — 개략적인 학습 표본과 미관측 표본이며, 실제 전략 성과가 아닙니다.
개략적인 학습 표본과 미관측 표본이며, 실제 전략 성과가 아닙니다.

답을 살펴보기 전에 규칙을 작성하세요

백테스트는 명시된 의사결정 규칙을 과거 데이터에 적용하고, 모형 속 일련의 거래가 어떤 결과를 냈을지 계산합니다. 그 가치는 가설을 증거에 비추어 시험하는 데 있습니다. 손실 사례가 나올 때마다 규칙이 바뀐다면 그 작업은 반복 가능한 의사결정 과정을 검증하는 것이 아니라 과거를 설명하는 방식이 됩니다.

대상 상품군, 관측 간격, 진입 조건, 청산 조건, 포지션 크기 결정 방식과 비용 모형부터 정하세요. 정보가 언제 이용 가능해지고 주문이 언제 처음 체결될 수 있는지 정의하세요. 종가에 기반한 전략은 추가적인 근거 없이 최종 종가를 미리 알고 정확히 같은 가격에 체결했다고 일반적으로 가정할 수 없습니다.

미래 정보가 과거로 새어 들어가는 것을 주의하세요

선행정보 편향은 시뮬레이션이 의사결정 시점에 이용할 수 없었던 정보를 사용할 때 발생합니다. 수정된 경제 데이터, 나중에 발표된 실적, 미래의 지수 구성 종목 목록이 그 예입니다. 과거 데이터베이스가 현재 기준으로는 완벽하게 정확하더라도 과거 특정 날짜에 실제로 알 수 있었던 내용을 재구성하는 데에는 부적합할 수 있습니다.

생존편향은 검증 대상에서 사라진 상품을 제외할 때 생깁니다. 지금도 존재하는 기업만으로 검증한 전략은 과거 투자 기회에 영향을 준 파산, 상장폐지와 인수를 놓칠 수 있습니다. 실패한 암호자산 토큰이나 폐지된 펀드에도 같은 문제가 생길 수 있습니다. 다루기 어려운 기록을 조용히 삭제하지 말고 데이터셋이 소멸을 어떻게 처리하는지 문서화하세요.

기업행동을 처리할 때는 신호 계산용 가격, 실제 체결 가능 가격, 회계상 잔고를 구분하세요. 2대1 주식분할 전 40달러짜리 100주는 분할 후 20달러짜리 200주가 됩니다. 분할만으로 부가 생기지는 않습니다. 이미 배당을 반영한 총수익률 자료를 쓰면서 같은 배당을 현금으로 다시 더하면 수익을 이중 계산할 수 있습니다.

체결을 호의적인 가정이 아니라 모형으로 다루세요

캔들이 지정가에 닿았다고 주문 전체가 체결되었다는 증거가 되지는 않습니다. 대기열 순서, 이용 가능한 수량과 캔들 내 가격 경로가 중요합니다. 하나의 봉에서 손절가와 목표가에 모두 도달했다면 그 봉만으로는 무엇이 먼저였는지 알 수 없을 수 있습니다. 이런 모호함은 보수적으로 다루거나 순서를 밝혀낼 수 있는 데이터를 사용하세요.

스프레드, 수수료, 금융 비용, 해당되는 경우 차입 비용, 그리고 타당한 슬리피지를 포함하세요. 과세는 관할 지역과 상황에 따라 달라지므로 일반적인 시뮬레이션은 보편적인 세율을 만들어내기보다 결과가 세전인지 밝혀야 합니다. 여러 비용 가정에서 결과를 비교하세요. 비용이 없고 즉시 체결될 때만 성공하는 방법은 취약합니다.

발견과 평가를 분리하세요

수백 가지 매개변수 조합을 시험한 뒤 가장 좋은 것만 제시하면 선택 문제가 생깁니다. 어떤 조합은 우연히 뛰어나 보일 수 있습니다. 규칙 개발에 사용하지 않은 데이터를 따로 남겨두고, 그 데이터가 또 하나의 학습 표본이 될 때까지 반복해서 들여다보지 마세요. 규칙을 확정한 뒤 새 관측값이 들어오는 전진 모의매매 검증은 다른 방식의 점검을 제공합니다.

성공한 차트만이 아니라 실패한 변형, 표본 크기, 날짜 범위와 실험 횟수도 보고하세요. 인접한 매개변수 선택에서도 비슷하게 작동하는지, 아니면 단 하나의 고립된 설정이 모든 이익을 만드는지 검토하세요. 스프레드시트가 소수점 여러 자리까지 정밀해도 가상 성과는 여전히 가상입니다. 과거의 계산만으로는 유동성, 감정과 운영상 문제를 완전히 재현하지 못합니다.

데이터 버전과 계산 변경 사항을 연구 일지에 남기세요. 주식분할 조정의 수정이나 상장폐지 사례의 신규 반영이 결과를 크게 바꿀 수 있으며, 그 수정 이력은 계속 확인할 수 있어야 합니다. 재현 가능성이란 다른 사람이 명시된 입력값과 규칙으로 같은 답을 재구성할 수 있다는 뜻입니다. 답이 경제적으로 유용하다는 의미는 아니지만, 그 여부를 확인하는 데 필요한 단계입니다.

가격 데이터에서 현금 장부까지 대조하기

데이터의 기준일과 실제로 알 수 있었던 시각은 다릅니다. 결산일이 12월 31일인 실적이 다음 해에 발표되었다면 12월 31일 매매 신호에 사용할 수 없습니다. 이후 수정된 통계도 당시 공개된 값과 구분해야 합니다. 각 입력에 관측 시각, 최초 공개 시각, 수정 여부를 연결하면 미래 정보가 들어간 경로를 추적하기 쉬워집니다.

백테스트의 각 시점에서 현금, 보유 수량, 평가금액, 수수료, 차입 비용과 미체결 주문이 서로 맞아야 합니다. 한 거래의 청산으로 생긴 현금을 실제 이용 가능 시점보다 앞서 다른 거래에 배정하지 않았는지 확인하세요. 동시에 발생한 여러 신호가 같은 구매력을 중복 사용한다면 개별 거래는 그럴듯해도 전체 계좌는 실행 불가능합니다.

실제 자료를 넣기 전에 결과를 손으로 계산할 수 있는 작은 자료로 검증하세요. 가격이 일정한 경우, 분할만 있는 경우, 배당만 있는 경우, 거래 정지 중 주문을 낸 경우를 따로 시험합니다. 예상 결과와 맞지 않으면 매매 아이디어의 문제가 아니라 데이터 처리나 장부 구현의 문제일 수 있습니다. 실패한 테스트도 남겨 수정 이력을 보존하세요.

비교 기준도 같은 조건이어야 합니다. 현금 비중이 큰 전략을 항상 전액 투자한 지수와 비교할 때는 노출 차이를 설명해야 하고, 현금 수익을 넣었다면 기준 포트폴리오에도 일관되게 적용해야 합니다. 기준 전략의 거래 비용을 무시한 채 능동 전략에만 비용을 부과하는 식의 비대칭도 피하세요. 공정한 비교는 우월성을 보장하는 장치가 아니라 주장의 범위를 분명히 하는 장치입니다.

간단한 확인

핵심 개념을 이해했나요?

생존편향의 예는 무엇인가요?

일반적인 교육 정보이며 매매 권유가 아닙니다. 예제는 실제 시장을 단순화한 것입니다. 상품을 이용하기 전에 정확한 계약 내용, 비용과 규정을 확인하세요.
다음: 진실을 보여주는 매매 일지 만들기 →