MKTRC
DATA CHECKS · POINT-IN-TIME · SYNTHETIC

백테스트에 들어간 미래 데이터: 발생 시각과 수신 시각은 다릅니다

과거에 발생했다는 이유만으로, 그때 알고 있던 데이터가 되지는 않습니다. 수신 시각까지 확인해야 합니다.

12:00:00.500에 무엇을 알 수 있었을까?

아래 모든 숫자는 임의로 만든 교육용 호가입니다. 결정 시점은 12:00:00.500입니다. 데이터가 기록한 발생 시각(event time)과 실제 수신 시각(receipt/availability time)은 서로 다를 수 있습니다.

데이터발생 시각수신 시각합성 값결정 시점 상태
A12:00:00.35012:00:00.400100사용 가능
B12:00:00.45012:00:00.800101늦게 수신
C12:00:00.58012:00:00.650102미래 발생

실제 pandas 계산 결과

결합 방식선택 결과문제 또는 해석
backwardB · 101이벤트는 이전이지만 당시 수신 전
nearestB · 101가장 가까운 이벤트지만 수신 전
forwardC · 102의사결정 이후 발생
발생+수신 이중 조건A · 10012:00:00.500 전에 이용 가능

발생·수신 시간 이중 검사: A 선택

실무에서는 무엇을 검사해야 할까?

연구 시점보다 이벤트 발생 시각과 실제 입수 가능 시각이 모두 이른지 확인한 뒤, 종목·시장·버전·허용 최대 지연을 검사합니다. 누락되거나 너무 오래된 데이터는 임의로 미래값으로 채우지 않습니다.

pandas의 기본 backward 매칭만 사용하거나 DuckDB ASOF 결과의 오른쪽 시간 컬럼을 생략하면, 이력상 그럴듯해 보이는 값을 실제로 알 수 있었던 시각과 혼동할 수 있습니다. 공개 예제는 설명 목적이며 우리 거래 엔진의 오류·수익·전략을 입증하지 않습니다.

관련 글: 같은 초라도 미래일 수 있다 →

공식 문서·재현성

pandas merge_asof · DuckDB ASOF JOIN

pandas 2.2.3로 합성 세 행을 계산했습니다. 실제 시장·백테스트 성과가 아닙니다.