시장 데이터 한 행은 완벽하게 정확해도 백테스트의 근거로는 쓸 수 없을 수 있습니다. 거래는 실제로 일어났고 가격도 맞으며 타임스탬프도 유효하지만, 데이터 피드가 늦게 전달했거나 공급업체가 나중에 값을 정정했을 수 있습니다. 또는 표시된 시장이 전략에서 접근할 수 있는 곳이 아니었을 수도 있습니다.
과거 데이터가 거래 가능했는지 알려면 이벤트 타임스탬프만 확인해서는 안 됩니다. 해당 행이 무엇을 나타내는지, 시스템이 언제부터 그 정보를 이용할 수 있었는지, 어떤 거래소나 상품을 가리키는지, 그리고 그 호가나 거래가 실제 주문을 뒷받침할 수 있었는지 알아야 합니다.
정확한 과거 가격만 있으면 백테스트에 충분할까요?
아닙니다. 정확도는 “데이터 출처가 최종적으로 기록한 가격은 얼마인가?”에 답합니다. 백테스트는 여기에 더해 “의사결정 시점에 전략이 무엇을 알 수 있었는가?”와 “무엇을 체결할 수 있었는가?”에도 답해야 합니다. 서로 다른 질문입니다.
암호화폐 거래가 12:00:00.120에 체결됐지만 데이터 공급업체의 스트림이 12:00:00.480에야 프로세스에 도착했다고 가정해 보겠습니다. .200 시점에 의사결정을 내리는 전략은 해당 거래를 이용할 수 없습니다. 이벤트 타임스탬프가 의사결정 시점보다 빠르더라도 마찬가지입니다. 과거 파일에 이벤트 시각만 보존돼 있다면, 백테스트는 실시간 프로세스가 아직 받지 못했을 정보를 전략에 몰래 제공할 수 있습니다.
| 시각 또는 필드 | 알려주는 내용 | 누락 시 발생하는 백테스트 오류 |
|---|---|---|
| 이벤트 시각 | 거래소가 이벤트가 발생했다고 기록한 시점 | 시장 시각과 전략에서의 이용 가능 시점을 혼동함 |
| 수신 시각 | 수집기가 메시지를 받은 시점 | 지연된 데이터가 즉시 도착한 것처럼 사용됨 |
| 시퀀스 또는 업데이트 ID | 피드 순서에서 이벤트가 위치하는 곳 | 업데이트를 순서와 다르게 적용하거나 조용히 누락함 |
| 정정 시각 | 정정된 과거 값이 알려진 시점 | 원래 피드에는 없던 값으로 백테스트함 |
보관 데이터에 수신 시각이 없다면 그 한계를 분명히 밝혀야 합니다. 지연 시간을 가정해 테스트하거나, 분석의 범위를 이벤트 시각 기준으로 제한할 수 있습니다. 저장되지 않은 타임스탬프만으로 당시의 정확한 정보 집합을 복원할 수는 없습니다.
호가가 실제로 체결 가능한 것이었는지 어떻게 판단하나요?
먼저 주문이 도달했을 시장부터 살펴보세요. 여러 거래소의 호가를 통합한 최우선 매수·매도 호가는 여러 거래소를 요약할 수 있지만, 계정이 표시된 잔량에 접근할 수 있었다거나 주문이 도착했을 때도 호가가 남아 있었다거나 거래소가 해당 주문 유형을 받아줬다는 뜻은 아닙니다.
시장가 주문을 중간 가격에 체결하는 가정은 대개 현실과 거리가 멉니다. 주문 규모만큼 표시된 호가 잔량을 따라 체결가를 계산한 뒤 수수료와 지연 시간 또는 시장 충격 가정을 더하는 편이 낫습니다. 최우선 호가 데이터만 있다면 주장도 그 범위에 한정하세요. 첫 번째 호가 단계는 추정할 수 있지만 기록되지 않은 깊이를 추론할 수는 없습니다.
지정가 주문은 가격이 닿았다고 해서 체결되는 것이 아닙니다. 내 주문보다 앞선 주문들이 가용 수량을 먼저 소진할 수 있습니다. 일반적인 스냅샷만으로는 대기열 위치를 알 수 없는 경우가 많으므로, 가격 접촉만으로 체결을 판단하는 규칙은 실제로 일어난 일의 증거가 아니라 낙관적인 시나리오로 다뤄야 합니다.
1분봉으로 저가가 지정가를 넘어섰다는 사실은 알 수 있습니다. 하지만 대기 주문이 저가가 나오기 전에 거래소에 도착했는지, 그 가격대에서 얼마나 거래됐는지, 내 앞에 얼마나 많은 주문이 대기 중이었는지는 알 수 없습니다.
시장 데이터 보관본을 신뢰하기 전에 무엇을 확인해야 하나요?
저는 먼저 기본적인 속성부터 확인합니다. 망가진 피드 위에 정교한 체결 모델을 얹는 것보다 이런 점검으로 더 많은 잘못된 리서치를 찾아낼 수 있습니다.
- 데이터 범위: 누락된 구간, 중복 이벤트, 시퀀스 누락, 설명되지 않는 거래량 0 구간이 있나요?
- 시장 식별 정보: 심볼이 시간의 흐름에 따라 동일한 거래소, 계약, 결제 통화, 상품 사양에 대응하나요?
- 이용 가능 시점: 이벤트 시각과 수신 시각을 모두 보존했나요? 그렇지 않다면 어떤 지연 시간 가정으로 결과의 범위를 정하나요?
- 정정: 원본 메시지와 나중에 공급업체가 보충하거나 수정한 값을 구분할 수 있나요?
- 단위: 가격, 수량, 계약 승수, 타임스탬프를 일관된 방식으로 해석하고 있나요?
마지막 점검은 너무 기본적으로 들릴 수도 있습니다. 한 번은 피드 이전 뒤 수량 필드의 단위가 바뀐 탓에 변동성 체제가 달라진 것처럼 보이는 현상을 오전 내내 추적한 적이 있습니다. 차트는 멋졌지만 단위가 틀렸습니다.
데이터 이용 가능 시점이 결과를 바꾸는지 어떻게 테스트할 수 있나요?
전략의 의사결정 경계 주변에서 간단한 민감도 테스트를 실행하세요. 현실적인 지연 시간을 적용해 데이터 이용 시점을 늦추고, 시퀀스 연속성이 깨진 업데이트는 제외하고, 실제 거래소 호가창 데이터가 있다면 이를 사용해 체결 결과를 비교하세요. 원래 결과와 저하된 조건의 결과를 모두 보고하세요. 아주 짧은 지연만으로 효과가 사라진다면, 전략이 데이터 수집 환경에서 안정적으로 제공하기 어려운 정보 우위에 의존할 수 있습니다.
구체적인 예를 들어보겠습니다. 최우선 매수 호가가 1틱 오를 때 신호가 발생한다고 합시다. 거래소 이벤트 시각으로 한 번, 수집기 수신 시각으로 한 번 재생해 보세요. 이벤트 시각 기준으로 40회 거래되고 수신 시각 기준으로 27회 거래된다면, 그 차이도 전략을 뒷받침하는 증거의 일부입니다. 각 재생 방식의 성과도 마찬가지입니다. 데이터가 덜 매끈해 보인다는 이유로 더 약한 결과를 숨기지 마세요.
모의 거래는 다음 단계의 유용한 점검입니다. 리서치 시스템이 사용하는 것과 같은 운영 경로에서 피드 지연, 오래된 호가, 잘못된 심볼 매핑, 거래소별 필터를 드러내기 때문입니다. 그래도 실시간 대기열이나 시장 충격을 모두 재현하지는 못합니다. 그 한계를 분명히 해 두세요.
실무에서 ‘거래 가능한 데이터’란 무엇을 뜻하나요?
백테스트가 관측값이 발생한 시점, 전략이 그 값을 이용할 수 있었던 시점, 데이터가 나온 시장, 그리고 가정한 체결을 뒷받침하는 근거를 설명할 수 있다는 뜻입니다. 정돈된 가격 시계열은 출발점입니다. 시점, 접근성, 체결 가정을 검토해도 견딜 수 있고 그 가정을 더 보수적으로 잡아도 결과가 타당할 때 리서치에 신뢰가 생깁니다.
← 전체 글


