2026년 8월 18일 · 페이퍼 트레이딩

페이퍼 트레이딩은 백테스트가 답해야 할 유일한 기준이다

페이퍼 트레이딩은 백테스트가 답해야 할 유일한 기준이다

모든 백테스트가 슬쩍 피해 가는 질문이 하나 있습니다. 똑같은 코드에 실시간 시장을 그대로 먹였다면, 정말 똑같이 움직였을까? 이 질문은 백테스트를 더 돌린다고 답할 수 없습니다. 답하는 방법은 하나뿐입니다. 실제 체결 방식이 살아 있는 환경에서 실시간 데이터로 전략을 돌린 다음, 거래 하나하나가 두 세계에서 일치하는지 확인하는 것. 우리는 이 확인 작업을 매일 자동으로 돌리고 있고, 지금까지 플랫폼에서 가장 많은 버그를 잡아낸 장치가 바로 이겁니다.

첫날: 거울부터 만든다

승격된 전략은 각각 격리된 자체 라이브 노드에서 돌아가며, 실제 거래소 스트림을 그대로 소비합니다. 체결에 쓰이는 실시간 호가, 진짜 스프레드, 진짜 세션 시간까지요. 전략 간 공유 상태는 없습니다(이건 호되게 배웠습니다 — 노드를 공유하니 한 전략의 포지션 조회가 다른 전략 쪽으로 새어 들어갔죠). 모든 체결은 그것을 만들어낸 시그널 값과 함께 기록됩니다.

매일 아침: 리플레이하고 대조한다

매일 도는 작업이 각 전략의 페이퍼 구간을 가져와, 동일한 코드를 같은 기간의 카탈로그 데이터 위에서 백테스트 엔진으로 돌린 뒤, 체결을 1:1로 매칭합니다. 같은 방향, 허용 오차 안의 같은 타임스탬프, 같은 수량으로요. 결과물은 상관계수도, 대충 그럴듯한 느낌도 아닙니다. 표 하나입니다. 매칭됨, 페이퍼에만 있음, 리플레이에만 있음. 건강한 전략은 55건 중 54건 매칭 언저리에 앉아 있습니다. 건강하지 않은 전략은 어느 거래가 언제 갈라졌는지 정확히 알려줍니다.

깨진 것들, 깨진 순서대로

패턴이 보이시나요. 이 중 어느 것도 시그널 버그가 아닙니다. 전부 체결 경계의 버그입니다 — 워밍업, 상태, 정밀도, 재시작. 백테스트가 구조적으로 볼 수 없는 부류가 정확히 이겁니다. 백테스트 안에서는 백테스트 엔진 자체가 곧 체결 경계니까요.

일부러 남겨둔 비대칭

두 세계는 의도적으로 동일하지 않습니다. 백테스트는 모델링된 하프 스프레드에 제곱근 임팩트를 더해 PnL 안에서 비용을 부과하고, 페이퍼는 체결 가격에 실제 스프레드를 그대로 물되 임팩트 모델은 쓰지 않습니다. 페이퍼에 모델 스프레드를 더하거나(반대로 백테스트에 실제 스프레드를 더하면) 이중 계산이 됩니다. 패리티란 같은 판단, 허용 오차 안의 같은 체결을 뜻하지, 비트 단위로 똑같은 PnL을 뜻하지 않습니다. 어떤 차이가 원칙에서 나온 것이고 어떤 차이가 버그인지 구분하는 것 — 이 규율의 대부분이 거기에 있습니다.

백테스트는 가설입니다. 페이퍼 트레이딩은 실험입니다. 리플레이 패리티는 당신이 스스로를 속이는 순간을 붙잡는 실험 노트입니다.

전략을 운용하면서 실시간 동작과 리플레이 동작을 정기적으로 대조하고 있지 않다면, 당신에게는 한 번도 본 적 없는 버그의 부류가 존재하는 겁니다. 우리는 대략 2주에 하나꼴로 그런 버그를 찾아내고, 그 하나하나는 백테스트 안에서는 전부 보이지 않는 것들이었습니다.

페이퍼 트레이딩패리티백테스팅체결실시간 데이터
← 전체 글