백테스트 기간, 주말 포함 여부로 달라지는 이유

주요 거래소가 주말과 공휴일에 휴장한다는 사실은 잘 알려져 있지만, 과거 데이터 검증(백테스트) 시 이 기간을 어떻게 처리하느냐에 따라 검증 대상 기간의 길이가 달라집니다. 데이터 정제 단계에서 '거래일'과 '영업일'을 구분하지 않고 단순히 날짜 범위로 데이터를 추출하면, 실제 매매가 불가능한 날이 검증 기간에 포함되거나 제외되어 수익 팩터(Profit Factor, 총이익 ÷ 총손실)나 최대 낙폭(MDD) 계산의 기준이 흐려집니다. 이 글은 실제 거래 기록이 아닌, 데이터 전처리 단계의 논리적 오류 가능성이 검증 설계에 미치는 영향을 개념적으로 분석합니다.

일별 데이터의 시간축 왜곡 문제

시계열 데이터에서 '날짜'는 단순한 라벨이 아니라, 데이터 간 시간 간격을 나타내는 척도입니다. 주식이나 암호화폐 시장에서 주말은 거래가 발생하지 않지만, 데이터셋에는 1일 단위의 행이 존재할 수 있습니다. 만약 백테스트 코드가 이 비거래일 데이터를 '무거래'로 처리하지 않고 단순히 건너뛰지 않는다면, 전략이 연속적으로 매매를 수행하는 것처럼 오해할 수 있습니다. 예를 들어 금요일 종가 기준으로 매수 신호가 발생하고 월요일 개장가에 매수하는 경우, 실제 보유 기간은 3일이지만 데이터 행 기준으로는 2일(금, 월)로 계산될 수 있습니다. 이러한 시간축의 불일치는 단기 매매 전략에서 특히 치명적입니다. 보유 기간이 짧을수록 하루의 차이가 수익률 계산에 미치는 비중이 크기 때문입니다. 데이터 정제 시 비거래일 행을 삭제하는 방식과, 비거래일 행을 유지하되 거래 가능 여부 플래그를 0으로 설정하는 방식은 모두 유효하지만, 후속 검증 로직이 이 두 방식을 동일하게 취급하지 않는다면 결과 값이 달라집니다.

검증 지표 계산 시점의 차이

수익 팩터와 최대 낙폭은 누적 수익률 곡선을 기반으로 계산됩니다. 이 곡선의 X축이 '거래일 수'인지 '캘린더일 수'인지에 따라 곡선의 기울기와 변동성이 시각적으로 다르게 나타납니다. 특히 최대 낙폭은 특정 시점의 고점부터 저점까지의 낙폭을 측정하는데, 비거래일 데이터가 포함되면 고점과 저점 사이의 시간 간격이 실제보다 길어질 수 있습니다. 이는 낙폭의 '속도'를 판단하는 데 혼선을 줄 수 있습니다. 또한, 기간별 수익률 비교 시 분모(기간 길이)가 비거래일 포함 여부 때문에 달라지면, 동일한 전략이라도 다른 기간 길이 기준으로 비교되어 오해의 소지가 생깁니다. 개념적으로, 검증 지표는 '매매가 실제로 발생한 시점'을 기준으로 정렬되어야 신뢰할 수 있습니다. 데이터 정제 단계에서 날짜 필터링 로직이 이 기준을 일관되게 적용하지 못하면, 검증 결과가 실제 시장 환경에서의 성능을 반영하지 못하게 됩니다.

날짜 필터링 로직의 설계 방향 비교

데이터 전처리에서 날짜를 처리하는 방식은 크게 '삭제'와 '보류' 두 가지로 나뉩니다. 삭제 방식은 비거래일 데이터를 데이터셋에서 완전히 제거하여, 데이터 행이 모두 유효한 거래일임을 보장합니다. 이 방식은 메모리 사용량을 줄이고 계산 속도를 높이는 장점이 있지만, 원본 데이터와의 정합성을 확인하기 위해 별도의 매핑 테이블이 필요할 수 있습니다. 보류 방식은 비거래일 데이터를 데이터셋에 유지하되, '거래 가능 여부' 컬럼을 추가하거나 기존 컬럼의 값을 특정 값(예: 0, NaN)으로 채워 넣습니다. 이 방식은 데이터 구조의 일관성을 유지하지만, 모든 검증 로직이 이 컬럼을 반드시 참조하도록 코드를 작성해야 합니다. 아래 표는 두 방식의 특징과 검증 설계 시 고려해야 할 점을 비교합니다.

처리 방식데이터 구조 변화검증 로직 복잡도주의할 점
비거래일 삭제행 수 감소, 연속된 거래일만 존재낮음 (날짜 필터 불필요)원본 데이터와의 일대일 매핑 확인 필요
비거래일 보류행 수 유지, 추가 컬럼 또는 값 변경높음 (모든 로직에서 플래그 확인)플래그 누락 시 비거래일 데이터가 유효 데이터로 오인됨

이 표는 데이터 정제 단계의 선택지가 검증 로직의 복잡도와 오류 가능성에 미치는 영향을 보여줍니다. 삭제 방식을 선택하더라도, 백테스트 기간의 시작일과 종료일이 실제로 거래가 가능한 날인지 확인하는 로직이 필요합니다. 보류 방식을 선택할 경우, 수익률 계산, 낙폭 계산, 매매 신호 생성 등 모든 단계에서 거래 가능 여부 플래그를 확인하는 로직이 반복적으로 적용되어야 합니다. 이 중 하나라도 누락되면, 비거래일 데이터가 검증 결과에 영향을 미칠 수 있습니다.

개념 설명의 범위와 적용 한계

이 글은 특정 거래소나 데이터 제공사의 구체적인 데이터 구조를 전제하지 않습니다. 각 플랫폼마다 날짜 형식, 시간대 처리, 휴장일 정의(지역별 공휴일 포함 여부)가 다를 수 있습니다. 따라서 이 글에서 제시한 개념은 데이터 정제와 검증 설계의 일반적인 논리적 틀을 설명하는 것입니다. 실제 시스템에서는 데이터 제공사가 제공하는 '거래일 캘린더'를 직접 참조하여 비거래일을 판별하는 것이 가장 정확합니다. 자체적인 날짜 계산(예: 요일 기반 판별)은 지역별 공휴일이나 임시 휴장일을 반영하지 못할 수 있어 오류의 원인이 됩니다. 이 개념 설명은 실험 결과가 아닌, 데이터 전처리 단계에서 발생할 수 있는 논리적 오류의 가능성을 짚어보는 것입니다. 실제 적용 시에는 사용 중인 데이터 소스의 휴장일 정의와 데이터 정제 파이프라인의 일관성을 점검해야 합니다.

독자가 판단할 수 있는 점과 한계

독자가 판단할 수 있는 점은, 백테스트 결과의 신뢰도는 데이터 정제 단계의 날짜 처리 로직과 직결된다는 것입니다. 검증 기간의 길이가 비거래일 포함 여부에 따라 달라질 수 있으므로, 검증 결과 해석 시 데이터셋의 기간 정의(거래일 기준인지 캘린더일 기준인지)를 반드시 확인해야 합니다. 또한, 수익 팩터나 최대 낙폭 같은 지표가 계산되는 코드 로직이 비거래일 데이터를 어떻게 처리하는지 점검하는 것이 중요합니다. 아직 판단할 수 없는 점은, 특정 데이터셋에서 비거래일 처리 방식이 검증 지표에 미치는 정량적 영향의 크기입니다. 이는 전략의 특성(보유 기간, 매매 빈도)과 시장 환경(변동성, 유동성)에 따라 달라지기 때문에, 이 글의 개념 설명만으로는 구체적인 수치적 차이를 예측할 수 없습니다. 실제 시스템에서는 두 가지 방식(삭제 vs 보류)으로 동일한 전략을 검증하여 결과의 차이를 비교하는 과정을 통해 데이터 정제 로직의 적정성을 판단할 수 있습니다.

함께 보면 좋은 연구

시계열 데이터 정렬 오류가 만드는 정보 누출 · 거래 정지 구간을 무시한 과거 데이터 검증(백테스트) 오류 · AI 자동매매 연구, 데이터 수집부터 검증까지

본 사이트의 콘텐츠는 정보 및 연구 기록을 목적으로 하며 특정 금융상품의 매수·매도를 권유하지 않습니다. 투자 판단과 결과에 대한 책임은 투자자 본인에게 있습니다. 투자 고지 전문

댓글 남기기