Post

(OMS 4) 오더북이 필요한 이유

단순 호가창(snapshot)이 아닌 주문 단위 오더북이 왜 필요한지, 주문 추적과 백테스트 관점에서 설명합니다.

(OMS 4) 오더북이 필요한 이유

이전 글: 시세 수신

이 글은 매매 시스템 시리즈의 글입니다.

다음 글: 오더북 구성

다음 순서는 오더북을 구성해 보는 것인데요. 여기서 제가 말하는 오더북은 단순히 가격과 수량만 담고 있는 호가창이 아닙니다. 각 가격 레벨에 어떤 주문들이 어떤 순서로 쌓여 있는지까지 정보를 담고 있는 구조체, 이른바 L3 오더북을 말합니다.

저는 가격과 수량 정보만 가지고 있는 호가창은 snapshot이라고 표현하고 있습니다.

구현에 들어가기 전에, 이번 글에서는 이런 구조체가 왜 필요한지 — 정확히 말하면 제가 어디에 쓰는지 — 를 먼저 설명하겠습니다. 크게 두 가지 용도가 있습니다.


1. 내 주문 추적

대부분의 거래소는 같은 가격의 주문을 먼저 들어온 순서대로 체결합니다. 내가 매수 주문을 넣으면 그 가격의 끝에 줄을 서게 됩니다.

큐 뒤쪽 체결은 위험하다

내 매수 주문이 5,000개 주문 중 4,800번째라고 해봅시다. 아주 뒤에 있습니다. 이 주문이 체결됐다는 건 많은 점을 시사합니다. 앞의 4,800개를 쓸어버릴 만큼의 매도 물량이 들어왔다는 뜻이니까요. 누군가가 아주 강한 확신을 가지고 매도 주문으로 긁어간 겁니다.

체결은 됐지만 가격은 이미 불리한 방향으로 움직이고 있을 가능성이 높습니다. 내가 그만큼의 확신이 없는 한, 큐 뒤쪽에서의 체결은 좋지 않습니다.

큐 앞쪽 체결은 다르다

반면 앞쪽에서의 체결은 작고 일상적인 시장가 주문들일 수 있습니다. 미래 가격 방향에 대한 정보가 없는 주문일 가능성이 상대적으로 높고, 체결 후 스프레드를 벌 여지가 있습니다.

위치를 알면 판단이 가능하다

내 주문이 큐에서 어디쯤에 있는지 추정할 수 있으면, 체결이 좋은 체결인지 나쁜 체결인지 감이라도 잡아볼 수 있습니다. snapshot만으로는 해당 가격의 총 수량은 보여도, 그 안에서 내가 몇 번째인지는 알 수 없습니다.


2. 백테스트

대부분의 거래소는 주문 단위 데이터가 아니라 snapshot을 제공합니다. 백테스트를 하려면 이 snapshot 시퀀스를 각각의 diff로 쪼개고, 그 diff를 순서대로 리플레이하면서 호가창을 재구성합니다. 크립토 마켓은 애초에 diff를 주기 때문에 이 변환 과정이 필요 없습니다.

리플레이 과정에서 내 주문을 사이사이에 끼워 넣으면서 시뮬레이션합니다. 가격과 수량만 있는 snapshot으로는 할 수 있는 게 많지 않습니다. 큐에서의 위치, 체결 순서, 취소에 의한 변화까지 반영하려면 주문 단위로 오더북을 재구성할 수 있어야 합니다.


이 두 가지가 큰 이유이지만, 오더북 구조체가 있으면 각자의 상황에 맞춰 여러 가지를 시도해 볼 수 있습니다.


다음 글에서는

다음 글에서는 이 오더북을 어떻게 구성하는지, 왜 그렇게 구성했는지 설명합니다.

다음 글: 오더북 구성

This post is licensed under CC BY 4.0 by the author.