백테스팅읽는 시간 8분
오더북 기반 Polymarket 전략 백테스트 방법
한 시간에 한 번 샘플링한 마지막 체결가로는 당신의 주문이 실제로 체결됐을지 알 수 없습니다. 실제로 거래됐을 바로 그 오더북을 상대로 Polymarket을 백테스트하는 방법을 소개합니다.
Polymarket 전략을 백테스트하려면 기록된 전체 매수/매도 호가창을 재생하고 관측된 유동성에 대해 가상 체결 크기를 조정하십시오. 타임스탬프, 저장된 주기 및 간격을 검사하십시오. 아카이브는 관측치 사이의 정확한 주문 책을 확립할 수 없습니다. 마지막 가격 또는 단일 중간 가격도 실제 주문이 직면할 스프레드와 깊이를 생략합니다.
마지막 체결가 백테스트가 거짓말을 하는 이유
무료로 구할 수 있는 Polymarket 데이터 대부분은 마지막 체결가이며, 흔히 한 시간에 한 번 샘플링됩니다. 그것으로는 차트를 그리는 정도가 전부입니다. 백테스트는 더 어려운 질문에 답해야 합니다. 그 순간 내 주문이 호가에 걸려 있었다면(혹은 스프레드를 넘어 체결을 쳤다면), 정말로 체결됐을까, 얼마만큼, 어떤 가격에 체결됐을까?
이 질문에 답하려면 단일 숫자가 아니라 오더북, 즉 걸려 있던 모든 매수·매도 호가와 그 규모가 필요합니다. 중간가를 기준으로 백테스트한 전략은 슬리피지 없이 항상 중간가에 체결됐다고 가정하는데, 이는 결코 사실이 아닙니다. 정산이 가까워질수록 스프레드가 벌어지는 단기 크립토 마켓에서는 이 가정 하나가 손실 전략을 겉보기 승리 전략으로 뒤집어 놓을 수 있습니다.
1단계 — 풀뎁스 오더북 데이터를 확보한다
양쪽 모두에서 기록된 전체 심도 주문 책으로 시작하십시오. DepthFeed은 Polymarket CLOB 업데이트를 수집하지만, 저장된 관측치는 문서화된 캡처 주기를 따르며 간격이 있을 수 있습니다. 모든 상위 이벤트가 유지되었다고 가정하는 대신 시장에 사용 가능한 타임스탬프를 검사하십시오.
원하는 마켓은 REST API로 가져오세요. GET /v3/{coin}/markets로 마켓을 탐색한 뒤, /v3/{coin}/markets/{id}/snapshots에서 뎁스를 받아옵니다. 각 스냅샷은 매수/매도 가격과 규모 배열, 그리고 epoch-millis 단위의 거래소·수신 타임스탬프를 담고 있습니다.
2단계 — 매 순간의 북을 재구성한다
기록된 관측치를 타임스탬프 순서대로 재생하십시오. 각 관측치는 최적 매수 호가, 최적 매도 호가, 깊이 및 스프레드를 포함하여 해당 관측치의 저장된 주문 책을 설명합니다. 관측치 간의 정확한 주문 책 상태 또는 보장된 체결을 추론하지 마십시오. 보간 또는 지속성 가정을 백테스트에서 명시하십시오.
3단계 — 실제 뎁스에 맞춰 체결을 모델링한다
이제 체결을 정직하게 시뮬레이션하세요. 즉시 체결되는 주문(marketable order)은 북을 걸어 내려갑니다. 먼저 최우선 호가에 체결되고, 그 다음 호가, 또 그 다음 호가로 이어지며 주문 규모가 소진될 때까지 진행됩니다. 따라서 최상단 호가 이상을 소비하는 순간 평균 체결가는 터치 가격보다 나빠집니다. 호가에 거는 주문(resting order)은 대기열에 합류하며, 시장이 그 가격을 충분한 규모로 뚫고 지나갈 때에만 체결됩니다.
기록된 호가 사다리에 맞춰 체결 규모를 산정하는 것이 핵심입니다. 이를 통해 항상 중간가에 거래했다는 허구 대신 현실적인 슬리피지와 체결 확률을 얻게 됩니다.
4단계 — 기초자산 가격을 결합한다
Polymarket의 크립토 up/down 마켓은 기초자산의 현물 움직임에 의해 구동됩니다. DepthFeed의 모든 스냅샷은 epoch-millis 타임스탬프를 기준으로 고빈도 Binance 기준 가격에 결합되므로, 계약을 재가격(repricing)한 현물 움직임과 북 상태를 정렬할 수 있습니다. 크립토 가격과 마켓의 내재 확률 사이의 관계를 거래하는 전략이라면 이는 필수입니다.
단계 5 — 실시간 데이터 어댑터 검증
과거 REST 응답과 실시간 WebSocket 프레임은 별도의 문서화된 계약을 사용합니다. 공유 전략 로직에 모두 공급하기 전에 식별자, 타임스탬프 및 필드에 대한 어댑터를 검증하십시오. 기록된 관측치로 백테스트한 다음 모의 거래로 실시간 어댑터를 포워드 테스트하십시오.
흔한 함정
- 마지막 체결가 데이터 사용: 스프레드와 슬리피지를 가려 백테스트 수익률을 부풀린다.
- 고정 간격 스냅샷: 시간 단위·분 단위 샘플은 5분짜리 마켓 생애의 대부분을 놓친다.
- 대기열 위치 무시: 호가에 건 주문이 항상 체결된다고 가정하면 패시브 전략을 과대평가한다.
- 미래 참조 편향(look-ahead bias): 의사결정 시점 이전(또는 동시)의 수신 타임스탬프를 가진 데이터에만 반응하라.
- 기초자산 누락: 크립토 up/down의 엣지는 대개 현물-확률 관계 속에 있다.
핵심 요약
- 01마지막 체결가가 아니라 오더북을 상대로 백테스트하라. 체결을 결정하는 것은 뎁스다.
- 02이벤트 기반 데이터를 써라. 고정 간격 샘플은 단기 마켓의 생애를 놓친다.
- 03즉시 체결 주문은 북을 걸어 내려가고, 호가에 건 주문은 대기열에서 기다린다는 점을 모델링하라.
- 04기초 크립토 가격을 결합해 현물-확률 관계를 포착하라.
- 05과거 데이터와 실시간 피드가 하나의 포맷을 공유하는 데이터를 골라, 백테스트한 그 코드를 그대로 거래하라.
한 시간에 한 번 샘플링한 마지막 체결가로는 당신의 주문이 실제로 체결됐을지 알 수 없습니다. 실제로 거래됐을 바로 그 오더북을 상대로 Polymarket을 백테스트하는 방법을 소개합니다.
무료로 시작