티스토리 뷰

주문 매칭 알고리즘(order matching algorithm)

오늘은 Order matching algorithms 에 대해 알아봅시다. 한글로 주문 매칭 알고리즘이 될 것 같네요. 주문을 넣었을 때 어떻게 매칭을 시킬까 하는 규칙인데, 크립토 매매를 조금 해보신 분들은 다들 알고있을 내용입니다.

 

가장 자주 사용되는 규칙이 가격/시간 알고리즘(Price/Time algorithm) 이라는 규칙입니다. FIFO(First-in-First-out)이라고도 하네요. 있죠. 주식의 경우도 "정규시간"에는 같은 규칙으로 매매됩니다. 이에 대한 설명은 위키피디아에 나와있습니다. 영어라 저도 굳이 읽어보지는 않습니다만...

 

Price/Time algorithm (or First-in-First-out)

- Motivates to narrow the spread, since by narrowing the spread the limit order is the first in the order queue.
- Discourages other orders to join the queue since a limit order that joins the queue is the last.
- Might be computationally more demanding than Pro-Rata. The reason is that market participants might want to place more small orders in different positions in the order queue, and also tend to “flood” the market, i.e., place limit order in the depth of the market in order to stay in the queue.

 

시세(price)란?

다음 호가창을 한번 들여다보시죠. 아래 호가창은 업비트이더리움(ETH) 호가창입니다.

 

 

들어가기 전에 한가지 질문. 위 시점에서 이더리움의 가격은 얼마일까요? 즉, 이더리움의 현재 시세는?

 

 

많은 거래소에서는 최종 거래가를 기준으로 하는게 많을 것입니다. 위 호가창에서는 259,300원에 0.008 개 (매수) 체결되었으니 259,300원이 될 수 있습니다. 예전에는 무식하게 최종 거래가를 그대로 썼던것 같습니다. 그래서 2017년 초창기 업비트에선 체결이 올라올때마다 시세 숫자가 파락파락팍라ᄑᆨ라ᄑᆨㅏ락팍락 마치 마그네슘이 부족할때 눈꺼풀 떨리듯 떨리게 나오는걸 기억하시는 분이 있을 것입니다. (마치 개미들을 꼬시는 파리의 날개짓 같은...) 지금은 거래량이 터져도 그러지 않는거 보니 관련하여 여러 알고리즘이 추가되었겠죠.

 

그러나 이것도 정확한 이더리움의 가격이라 하긴 어렵습니다. 위 체결창만 봐도 0.008은 주문 개수를 늘리려는 찔러보기거래(dusting order)에 속한다고 봐야겠죠. 오히려 그 전에 259,100원에 1.392개 (매도) 체결이 실제 거래한 것 같은 굵직한 거래로 보이네요.

 

그렇다 해도 이게 이더리움을 대표하는 가격이라 보긴 어렵습니다. 가격을 259,300원이라고 하면 259,300원에 팔 수도 있고 살 수도 있어야 할 것 같은데 그렇지 못하니까요.

 

물론 호가창이 만나지는 않습니다. buy주문과 sell주문이 동시에 같은 가격이면 당연히 체결이 되어 사라지죠.

 

여튼 사소해보이지만, 개인적으로 무척 고민되는 부분이었고, 그래서 제가 내린 결론은 다음과 같습니다.

 

그러니까 시세는 의미 없고, 호가만 의미가 있다. 현재시점 이더리움은 259,100원에 판매할 수 있고, 259,300원에 이더리움을 구매할 수 있다.

 

 

시세 다른 예시를 보면...

예를들어 열심히하지만 안습인 고 무슨 거래소에 있는 코인 중 크립토닷컴(MCO) 시세를 보면...

24시간만에 대 폭락한것 처럼 보이는데

 

실상은...

 

그러니까 없는 거래량이 문제고... 24시간 전 기준가격은 18,880원에 구매된거, 그리고 최근(오늘 새벽) 5,300원에 판매된 주문이 문제인거죠. 24시간 전 가격 대비 현재 최종가는 18,880 → 5,300으로 -70% 가까이 폭락해버린거죠.

 

호가창의 경우 buy주문이 5,410원. sell주문이 17,850원 입니다. 시세라는 5,300원은 여기선 의미가 없고, 현재시점 고팍스에서 크립토닷컴은 5,410원에 판매할 수 있고, 17,850원에 구매할 수 있다만이 쓸모있는 정보입니다.

 

참고로, 현재 시점에선 업비트의 크립토닷컴 6,655원인데, 그나마 이게 의미 있는 시세가 될 것 같습니다.

 

 

호가창(Orderbook)

이렇듯, 호가창(Orderbook)이 중요합니다. 다시 업비트의 이더리움 호가창을 보겠습니다.

 

호가창에는 단위가 있습니다. 위 이더리움의 경우 50원이 단위입니다. 다만, 주문이 있는(active order)부분만 표시가 됩니다. 지면만 넉넉하다면, 다음과 같이 보는 게 더 좋긴 하죠.

 

 

그렇습니다. 엑셀 노가다 맞고요. 제 정성이 이정도입니다.

 

실제 호가창이란 각 가격을 기준으로 해당 호가로 주문된 여러 주문을 집계해서 보여주고 있습니다. 위의 호가창은 다음과 같을 수 있습니다(상상)

 

 

나름 직접 만든 표라 부연 설명을 붙이면, 실제 보여지는 부분은 진한 부분으로 해당 호가에 수량 총 합을 의미하며, 연한 부분이 각 호가 단위별 주문이 될 수 있습니다. 예를들어 259,300원 호가에 있는 sell 주문들은 각각 5, 10, 4.26 수량만큼 주문이 있고, 호가단위 총 합은 19.26이 됩니다.

 

주문 순서도 존재합니다. 위 표에선 왼쪽에 있는게 더 빠른 주문을 표현합니다. 259,300원의 경우 5 → 10 → 4.26 순서대로 주문을 했다는 겁니다...

 

물론 호가창 관계없이 모든 주문에는 순서가 있습니다. 하지만 주문 매칭 알고리즘이 가격→시간 순서이므로, 시간 순서는 가격이 같을때 의미가 큽니다.

 

주문 예시

주문 O-1

위 호가창에 주문을 추가해봅시다. 예를들어 [위 ETH를 259,450원에 30개 구매하고 싶다!]라고 했을 때, 다음 처럼 표현하겠습니다.

O-1 주문이 들어가면, 가격 최대값 259,450까지 수량을 체결합니다. 위 이미지에선 5 → 10 → 4.26 → 2.15 → 15 → 22.391 순서입니다. 물론 최대 수량 30을 넘지는 않습니다.

 

그리고 체결가격은 각 호가창대로입니다. 개별 수량이 모두 259,450원씩 체결되는게 아니라 259,300원, 259,400원, 259,450원씩 각각 체결되는 거죠.

 

다음과 같이 30개가 모두 체결됩니다. 5 → 10 → 4.26 → 2.15 까지는 전체 체결되고, 15의 경우는 부분체결됩니다. 기존 주문이 8.59 + 6.41로 나뉘어서 8.59만큼만 부분 체결되는 것이죠.

O-1의 체결(trade)내역은 5개가 생깁니다. 수량의 합은 30개. 호가는 각각의 주문입니다.

 

주문 O-2

O-2 주문을 추가해보겠습니다. O-2는 [ETH 구매 259,500원에 50개] 입니다. 방식은 위와 비슷합니다. 그런데 이번엔 호가창의 활성주문 개수가 50개가 안됩니다.

 

이 경우 기존 주문은 완료되지 않습니다. 6.41 → 22.391 → 1.694를 구매하고 모자라는 19.505 만큼은 활성 [구매]주문으로 남게 됩니다.

 

주문 O-3

O-3 주문은 팔기 주문입니다. [ETH 판매. 259,000원에 30개] 입니다. 방식은 비슷합니다. 다만 최고 buy주문이 259,500원이니, 박스가 좀 크게 그려집니다.

박스 안에서 30개를 계산합니다. 순서는 윗쪽부터. 19.505 → 1 → 1.36 → 2 → 2.634 순서인데, 이 모두의 합(26.499)가 30을 넘지 뭇합니다.

 

그래서 잔여 수량에 대해 잔여주문(259,000원:3.501개)이 남았습니다.

한가지 더 눈여겨 볼 부분은, O-3 주문을 통해, O-2의 잔여주문(259,500원 : 19.505개)도 동시에 체결되었다는 것이죠. 해당 체결 내역은 오른쪽 체결 내역의 진한 주황(O-2주문, 상세4)으로 표시했습니다.

 

만약 주문의 순서가 바뀌면?

 

 

모든 주문은 순서가 있습니다. 거래소 서버에 주문이 도착하는 순서대로 주문의 순서가 부여됩니다. 그리고 이 순서는 매우*10 중요합니다. 그러니까 개별 주문에 대해선 Price/Time 알고리즘이라 할 수 있지만, 더 중요한건 OrderTime → Price/Time알고리즘이 됩니다.

 

주문이 서버에 동시에 도착할 수도 있지 않나 할 수도 있지만, 서버 기준으로 먼저 받은 주문이 우선권이 있습니다. 순차적(Sequential)이라는 말 보다 직렬화(Serialization)라는 말이 더 어울릴것 같은데, 어쨌건 줄을 세워서 순서를 부여한다는 것이죠.

 

예시를 하나 더 들면, 위 예시에서 주문 O-2와 주문 O-3을 다르게 처리해보겠습니다.

O-3 이 먼저 처리되면서 아래 파란 부분이 처리가 됩니다.

호가창은 O-3의 50개에 훨씬 못미치므로, 다음과 같이 잔여 sell 주문이 남습니다.

 

이제 O-2를 처리합니다. O-2는 O-3 다음으로 처리되므로, 259,000원의 sell 주문이 처리해야 할 활성주문입니다. 그림으로 보면 다음과 같구요.

 

빨간 박스가 총 53.501만큼이라, 3.501을 남긴 나머지를 거래 완료하게 됩니다.

마찬가지로 O-2 주문을 통해, O-3의 잔여주문(259,000원 : 23.006개)도 동시에 체결됩니다. 해당 체결 내역은 오른쪽 체결 내역의 진한 파랑(O-3주문, 상세5)으로 표시했습니다.

 

정산

이제 O-2 → O-3 주문과 O-3 → O-2 주문을 비교해봅시다. 비교를 편하게 하기 위해 몇가지를 정해보면

  • 홍길동, 성춘향이 거래에 참여함
  • 홍길동이 O-2, 성춘향이 O-3을 주문한 것임
  • ETH의 최초 시세와 최종 시세는 중간 값인 259,200원 으로 합시다.
  • 초기 자본은 20,000,000원. 이는 30 ETH + 12,224,000 KRW 로 구성됨
  • 수수료는 무시함

라고 합시다.

 

홍길동(O-2)

  • O-2 → O-3 로 주문했을 경우 최종 자산 평가는 19,986,440원이 됨
  • O-3 → O-2 로 주문했을 경우 최종 자산 평가는 19,997,853원이 됨

 

 

성춘향(O-3)

  • O-2 → O-3 로 주문했을 경우 최종 자산 평가는 20,004,920원이 됨
  • O-3 → O-2 로 주문했을 경우 최종 자산 평가는 19,994,500원이 됨

 

 

중간 결론

거래소의 주문 매칭 알고리즘에선 주문의 순서가 가장 중요합니다. 추가적인 사항은 다음 시간에...

 

 

 

공지채널 : https://t.me/sohwak

소확코인 : 휴식중;;

 

잡담 -> 개나리반(포탈) or 밋업방에 거주중

댓글
최근에 올라온 글
Total
Today
Yesterday