2026년 8월 23일 · 리서치

백테스트의 타임스탬프가 모두 정확해도 시계에는 문제가 있습니다

백테스트의 타임스탬프가 모두 정확해도 시계에는 문제가 있습니다

백테스트에서 가장 위험한 타이밍 버그는 타임스탬프를 완벽하게 검증해도 남아 있을 수 있습니다. 두 이벤트 모두 10:00:00.000으로 표시되더라도 시뮬레이터가 추측한 순서와 실제 발생 순서는 다를 수 있습니다.

완료된 봉 외의 이벤트에 반응하는 전략이라면 이 점이 중요합니다. 호가 업데이트, 거래, 펀딩 공지, 거래소 상태 변경, 자체 주문 확인 응답 등이 여기에 해당합니다. 타임스탬프는 이벤트에 표시된 시각을 알려줍니다. 하지만 전략이 그 이벤트를 바탕으로 언제 행동할 수 있었는지는 알려주지 않을 수도 있습니다.

이벤트 순서가 무엇을 바꿀까요?

최우선 매도호가가 $100.00 아래로 내려가면 매수하는 전략을 생각해 보겠습니다. 같은 밀리초에 피드에 매도호가가 $99.99로 갱신되고 $99.99에 거래가 체결됐다고 기록됩니다. 백테스트가 거래를 먼저 처리하고 호가를 나중에 처리하면 전략은 새 매도호가를 보고 주문을 제출합니다. 호가를 먼저 처리해도 괜찮을 수 있지만, 실제로 그 이벤트를 이용할 수 있었어야 합니다. 그런데 주문이 도착하기 전에 거래로 표시된 유동성이 소진됐다면 $99.99 체결은 허구입니다.

타임스탬프만으로 행을 정렬하면 시뮬레이터가 같은 시각의 이벤트 순서를 임의로 정하게 됩니다. 파일 순서, 심볼 순서, 데이터베이스 쿼리 실행 계획이 우연히 체결 규칙이 될 수 있습니다. 기반 데이터가 그대로여도 자산 곡선은 달라질 수 있습니다.

이런 임의성을 확인하는 간단한 방법이 있습니다. 같은 시각의 이벤트를 도착 순서가 아니라 심볼 이름순으로 정렬해 보세요. 여러 자산을 다루는 전략이 티커 하나가 다른 티커보다 먼저 정렬된다는 이유만으로 다르게 움직일 수 있습니다.

백테스트에서 어떤 시계를 유지해야 할까요?

시장 데이터와 주문 처리에는 서로 다른 시각이 여럿 관여하는 경우가 많습니다. 원본에서 제공하는 필드를 보존하고, 각각의 의미를 정확히 명시하세요. 많은 피드에서 거래소 타임스탬프와 로컬 수신 시각은 모두 유용하지만, 어느 쪽도 모든 참여자가 본 시점을 보편적으로 나타내지는 않습니다.

시각기록하는 내용이 값만으로는 입증할 수 없는 내용
거래소 이벤트 시각거래소가 이벤트가 발생했다고 밝힌 시점다른 피드나 사용자의 프로세스가 이벤트를 관측한 순서
수신 시각수집기가 메시지를 받은 시점전략이 처리를 마친 시점
의사결정 시각코드가 신호를 평가한 시점표시된 가격을 계속 이용할 수 있었는지 여부
주문 도착 시각거래소가 주문을 처리할 수 있게 된 시점매칭 규칙과 유동성이 뒷받침하지 않는 한 체결 여부

수신 시각이 없는 과거 데이터라면 어떤 가정을 했는지 밝히세요. 백테스트에서 거래소 이벤트를 순서대로 처리하고 의사결정부터 주문 도착까지 고정 5 ms 지연을 적용할 수 있습니다. 이는 모델이지, 복원된 과거 기록이 아닙니다. 타임스탬프가 같은 거래소 이벤트의 시퀀스 번호가 없다면 동률을 푸는 규칙 역시 가정입니다.

동일 시각 이벤트는 어떻게 모델링해야 할까요?

먼저 원본에 시퀀스 번호가 있다면 보존하세요. 시퀀스 번호는 피드 내 순서를 타임스탬프보다 더 확실하게 알려줍니다. 다만 채널이나 상품별로 시퀀스 번호 체계가 따로 있을 수 있습니다.

그다음 시뮬레이터의 처리 규칙을 명시하세요. 각 이벤트가 전략의 정보 갱신, 사용 가능한 유동성의 변경, 주문 발생, 주문 확인 중 무엇을 할 수 있는지 정해야 합니다. 이는 서로 다른 동작입니다. 이를 모두 “행 처리” 하나로 뭉뚱그리면 불가능한 체결이 끼어듭니다.

  1. 전략의 의사결정 시각까지 도착한 시장 정보만 적용합니다.
  2. 주문을 생성한 다음, 모델링한 거래소 도착 시각까지 시간을 진행합니다.
  3. 도착한 뒤 해당 주문 유형의 체결 가정에 따라 체결 가능한 유동성에 대해서만 주문을 실행합니다.
  4. 시뮬레이션으로 발생한 모든 체결에 사용한 입력값, 이벤트 순서, 지연 시간을 기록합니다.

봉 기반 전략이라면 이 정도의 처리는 질문에 필요한 수준을 넘어설 수 있습니다. 신호가 완료된 1-minute 봉을 사용하고 보수적인 비용 모델로 다음 봉 시가에 주문이 체결된다면, 밀리초 미만의 순서 차이가 리서치 결론을 바꾸지는 않을 가능성이 큽니다. 백테스트가 내세우는 주장에 맞춰 타이밍의 세밀함을 정하는 것이 핵심입니다.

도착 시각 데이터가 없어도 백테스트를 믿을 수 있을까요?

계속 활용할 수 있지만, 한계는 분명히 해야 합니다. 전략의 거래 속도가 느리고 리스크 한도가 넉넉하다면 몇 밀리초는 중요하지 않을 수 있습니다. 반면 순식간에 사라지는 호가에 반응하거나, 큐 순위를 다투거나, 거래소 간 선행·후행 신호에 의존한다면 도착 시각 누락은 결과를 좌우할 수 있습니다.

정밀한 이벤트 시각이 잘못된 정밀함으로 이어질 수 있다는 비판은 타당합니다. 과거 피드는 불완전하고 시계는 어긋나며, 거래소 타임스탬프만으로 모든 네트워크 구간을 알 수는 없습니다. 나노초 단위 필드가 있는 시뮬레이터도 조악한 체결 가정을 쓸 수 있습니다.

그러니 확실하다고 주장하는 대신 민감도를 테스트하세요. 타당한 이벤트 동률 처리 방식과 주문 지연을 적용해 다시 재생한 다음 거래 횟수, 체결 가격, 살아남는 신호를 비교하세요. 데이터로 확인할 수 없는 순서에 결과가 좌우된다면 그 의존성을 리서치 보고서에 밝혀야 합니다. 시계가 완벽하지 않아도 백테스트는 유용할 수 있습니다. 다만 실제로 어떤 시각을 알고 있는지 분명히 해야 합니다.

이벤트 기반 백테스팅체결 모델링시장 데이터전략 연구
← 전체 글