아비트라지: 스프레드와 수수료

in #arbitrage8 years ago

안녕하세요.
이 글은 엑스테일즈(extales)의 cys에 의해서 작성되었습니다.

도전하기

앞서의 글에서 싼 곳에서 사서, 비싼 곳에서 팔면 간단한 아비트라지 과정을 수행할 수 있다는 것을 설명하였다. 이제, 거래할 코인페어와 거래소2곳을 정해서 아비트라지 과정을 한번 해보자. 코인페어는 KRW/COIN 라 하고, 거래소는 A/B 두군데가 있다고 가정하자.

운이 좋게도 거래소 A와 거래소 B의 가격이 서로 다른 것을 발견하였다. (사실 실제로는 정확히 똑같은 가격을 갖는게 더 힘들다.) 특정 시점에서 1 COIN이 거래소 A에서는 1000원에 거래되고, 거래소 B에서는 1200원에 거래되는 것을 찾아 냈다면, 거래소 A에서 사서 거래소 B로 전송한 뒤에 팔아 200원의 차익을 얻을 수 있다.

그래서 거래소 A에 1000원을 입금하고, 전액 시장가 매수를 눌렀다. 그러면 1 COIN이 들어오겠지. 그런데 실제로 체결된 금액을 보았더니, 분명 조금 전 확인한 tick은 1000원 이었는데, 체결가는 1150원이었다. 그리고 지금 다시 본 tick은 여전히 1000원이다. 아니! 모두다 1000원에 거래하는데, 왜 나만 1150원에 거래가 되나?

스프레드

여기에서 간과한 것이 스프레드이다. 스프레드는 매수호가와 매도호가의 차이를 의미한다. tick이 1000원이었다는 것은, 1000원에 거래가 이루어졌다는 것을 의미한다. 그러나 그것이 1000원에 그 거래를 할 수 있다는 것을 의미하지는 않는다.

그림에서 보듯이 tick으로 확인한 거래가는 1000원이지만, 실제로 오더북은 매수호가(bids)와 매도호가(asks)로 나누어져 있다. 거래소 A에서는 매도측에 1150원에 팔겠다는 사람, 1200원에 팔겠다는 사람, ... 들이 줄을 서 있고, 매수측에 1000원에 사겠다는 사람, 950원에 사겠다는 사람, ... 들이 줄을 서 있다.

우리가 시장가로 가장 싸게 즉시 사겠다고 주문을 내면, 팔겠다는 사람측에서 가장 싸게 파는 사람은 1150원에 있으므로 1150원에 사게 된다. 그러면 1000원에 이루어진 거래는 무엇인가? 누군가가 시장가로 가장 비싸게 팔겠다고 주문을 낸 경우이다. (다른 경우도 있지만 쉬운 예만 들면서 가자.) tick은 거래가 체결될 때 그 가격이 보이는 것이므로, 누군가 시장가로 계속 팔고만 있었다면 tick 은 1000원으로 보이고, 나는 그 가격에 살 수가 없는 것이다. 다시 말하면, 시장가로 사거나 팔면, 비싸게 사거나 싸게 팔게 된다는 것을 의미한다. (역시 세상은 만만치가 않다.)

스프레드가 딱 붙어 있는 경우라도 1칸의 차이는 당연히 존재하고 (둘이 겹치면 즉시 거래가 체결되니까), 계속 시장가로 사고 팔고 하다보면 스프레드에서 오는 손해로 인하여 결국에는 가진 돈을 모두 날리게 된다. 실제로 거래소를 관찰하면 매수/매도 체결에 따라 tick의 가격은 실시간으로 떨리며, 그 폭은 스프레드가 클수록 더 크게 진동한다. 보통은 인기 없는 거래소가 거래량이 작고 스프레드가 크다.

그러면 나는 정말로 1000원에 1 COIN을 살수가 없는가? 아니다. 나도 매수주문대기열에 주문을 넣고 기다리면 된다. 1000원에 사겠다는 주문칸에 리밋오더(limit order)를 넣고 기다리면, 누군가가 팔 때 내 주문이 체결될 것이다.

거래 수수료

내가 A거래소에 1000원에 사겠다는 limit order를 bids에 넣고 기다리는데, 가장 운이 없는 경우는 내가 주문을 넣은 후 가격이 계속 올라가기만 하는 경우이다. 그러면 영원히 코인을 사지도 못하고 가격이 올라가는 것을 구경만 해야겠지. (그때 추격매수를 시작하면 한방에 저~멀리 다른 세상으로 가버릴 수 있다.)

어쨌거나 나의 리밋오더들이 운이 좋아 체결이 되었다고 하자. 그러면 나는 1000원으로 1000원짜리 1 COIN을 구매했으니, 내 손에는 1 COIN이 있어야 한다. 그런데 이게뭐지? 들어 온것은 0.9985 COIN이다. 거래수수료를 뗀 나머지 수량이 들어왔기 때문이다. 거래소는 모두 수수료 체계를 가지고 있고 대부분의 수익이 여기에서 나온다. 거래소 A는 maker/taker 구분없이 일괄적으로 0.15%의 수수료를 부과하는 곳이었고, 내가 구매한 COIN의 일부를 수수료로 가져가 버렸다.

아비트라지 전체 과정에서 수수료를 생각해보면, 거래소 A에서 살때 수수료를 1번, 거래소 B에서 팔 때 수수료를 1번 내야 한다. 그리고 COIN을 거래소 A에서 B로 전송할 때와, 현금을 거래소 B에서 A로 전송할 때 모두 전송수수료가 따로 있다. 1 cycle을 수행해야 무위험 차익거래가 이루어지는데, 내부적으로 4번의 수수료 (거래수수료 2회, 전송수수료 2회)가 존재한다. 이더리움의 경우 거래소간 전송에 보통 0.01 ETH의 전송수수료가 책정되어 있다. 거래 수수료는 %로 떼어가지만, 전송 수수료는 일반적으로 1회당 떼어간다.

거래수수료 낮추기

수수료를 조금이라도 낮춰야 겠다. 거래수수료는 온전히 거래소의 이벤트이므로 거래소에 따라 각자 프로모션이 있기도 한다. 누적 거래 금액이 얼마 이상이면 수수료 할인 쿠폰을 준다던가, 회원 가입시 추천인 제도를 운영하고, 수수료의 일부를 돌려준다던가 하는 것 말이다. 그런데 이런 거래 수수료는 할인 이벤트라도 있는데, 전송 수수료는 정말 웬만해서는 할인이 없다.

전송수수료 낮춰보기

전송수수료는 이론상 0원이 되기 힘들다. 거래소간 전송을 위해서는 실제로 블록체인에 트랜잭션(transaction)을 발생시켜야 하고, 블록체인에다 무엇인가를 적기 위해서는 수수료(fee)가 존재하기 때문이다. 그리고 그 전송수수료는 시간에 따라 변하는데, 거래소에서는 어느정도의 안전금액을 붙인 적당히 높은 가격으로 전송수수료를 받고 그 차액을 거래소수익으로 만든다. 불행인지 다행인지 보통의 거래소라면 전송수수료는 지정가로 받기 때문에, 전송수수료 효과를 적게 만들려면 매우 큰 돈을 한번에 보내면 될 것 같다. (%로 환산한 수수료가 작아지니까) 그런데 이 전송 수수료를 극도로 낮추기 위해서는 엄청 큰 돈을 한번에 보내야 하는데, 그만한 돈이 없거나, 아니면 리스크가 너무 커지는 결과를 초래한다.

생각해 볼 점

  • 아비트라지를 하기 위해서는 스프레드를 고려해야 한다
  • 리밋오더와 마켓오더 사이의 트레이드 오프를 생각해서 최적의 주문을 넣어야 한다
  • 거래수수료를 줄이기 위해서 거래소별 로컬 룰을 찾아봐야 한다
  • 전송수수료를 줄이기 위해서 대규모 전송을 생각해야 한다

그 외 깨달은 점

이렇게 길게 적으면 내가 못견디겠다.
앞으로도 적을 것이 많은데 더 축약해서 적어야겠다.