마켓메이킹 봇 수익 구조

마켓메이킹이란?

마켓메이킹(Market Making)은 매수 호가와 매도 호가를 동시에 제출하여 호가 스프레드(Bid-Ask Spread)만큼의 수익을 반복적으로 추구하는 전략입니다. 거래소에 유동성을 공급하는 대가로 스프레드 차익을 얻는 구조이며, 전통 금융에서는 지정 마켓메이커가 이 역할을 맡지만 암호화폐 시장에서는 누구나 마켓메이킹 봇을 운영할 수 있습니다.

방향성 매매와 달리 시장이 오르든 내리든 체결 횟수가 수익을 결정합니다. 다만 일방향 급변동 시 재고 리스크가 발생하므로, 정교한 리스크 관리가 필수입니다.

마켓메이킹 수익 구조 이해

마켓메이킹 봇의 수익은 단순합니다. 매수 호가에 사고 매도 호가에 팔면, 그 차이인 스프레드가 순수익이 됩니다.

기본 수익 공식

# 1회 왕복 수익
spread = ask_price - bid_price
profit_per_round = spread - (fee_rate * 2 * mid_price)

# 예시: BTC 미드 가격 50,000 USDT, 스프레드 10 USDT, 수수료 0.02%
spread = 10
fee = 0.0002 * 2 * 50000  # = 20 USDT
profit = 10 - 20  # = -10 USDT (수수료가 스프레드보다 크면 손해!)

# 메이커 리베이트 적용 시
maker_rebate = 0.00015 * 2 * 50000  # = 15 USDT
profit_with_rebate = 10 + 15 - 0  # 메이커는 수수료 0 + 리베이트

핵심 포인트: 메이커 수수료 구조가 마켓메이킹 수익성을 좌우합니다. 메이커 리베이트가 있는 거래소에서는 스프레드가 좁아도 수익을 낼 수 있고, 메이커 수수료가 높은 거래소에서는 더 넓은 스프레드가 필요합니다.

호가 배치 전략: 대칭 vs 비대칭

대칭 호가 (Symmetric Quoting)

미드 가격을 기준으로 매수·매도 호가를 동일한 거리에 배치합니다. 가장 기본적인 방식입니다.

def symmetric_quotes(mid_price, half_spread, qty):
    bid = mid_price - half_spread
    ask = mid_price + half_spread
    return {
        'bid': {'price': bid, 'qty': qty},
        'ask': {'price': ask, 'qty': qty}
    }

# 미드가 50,000이면 → 매수 49,995 / 매도 50,005

비대칭 호가 (Skewed Quoting)

재고(Inventory) 상태에 따라 호가를 한쪽으로 치우치게 배치합니다. 매수 포지션이 쌓이면 매도 호가를 더 공격적으로, 매도 포지션이 쌓이면 매수 호가를 더 공격적으로 조정합니다.

def skewed_quotes(mid_price, half_spread, qty, inventory, skew_factor=0.5):
    """
    inventory > 0: 롱 포지션 → 매도를 더 공격적으로
    inventory < 0: 숏 포지션 → 매수를 더 공격적으로
    """
    skew = inventory * skew_factor
    bid = mid_price - half_spread - skew
    ask = mid_price + half_spread - skew
    return {
        'bid': {'price': round(bid, 2), 'qty': qty},
        'ask': {'price': round(ask, 2), 'qty': qty}
    }

핵심 리스크: 재고 관리

마켓메이킹의 최대 리스크는 재고 리스크(Inventory Risk)입니다. 한쪽 방향으로만 체결이 쌓이면 사실상 방향성 포지션을 보유하게 됩니다.

재고 관리 기법 설명 적용 시점
호가 스큐 조정 재고 방향 반대쪽 호가를 공격적으로 항시 적용
재고 상한 설정 최대 포지션 도달 시 한쪽 호가 철회 재고 한도 초과 시
헤지 주문 선물 또는 다른 거래소에서 반대 포지션 대형 재고 발생 시
시장가 청산 손실 감수하고 즉시 재고 해소 급변동 감지 시

스프레드 동적 조정

고정 스프레드는 위험합니다. 변동성이 높아지면 스프레드를 넓혀야 하고, 낮아지면 좁혀서 체결 빈도를 높여야 합니다.

import numpy as np

def dynamic_spread(base_spread, volatility, vol_target=0.001, min_spread=0.0001):
    """
    변동성에 비례하여 스프레드 조정
    volatility: 최근 N분 수익률의 표준편차
    vol_target: 기준 변동성
    """
    multiplier = max(volatility / vol_target, 1.0)
    spread = base_spread * multiplier
    return max(spread, min_spread)

# 최근 5분 변동성이 평소의 3배 → 스프레드도 3배
recent_vol = calc_volatility(prices, window=5)
spread = dynamic_spread(0.0005, recent_vol)

마켓메이킹 봇 아키텍처

실전 마켓메이킹 봇은 다음 5개 모듈로 구성됩니다.

  • 데이터 수집기: WebSocket으로 오더북·체결 데이터 실시간 수신
  • 미드가격 엔진: 가중 미드가격(Weighted Mid) 계산 — 단순 (bid+ask)/2보다 오더북 깊이를 반영
  • 호가 생성기: 스프레드·스큐·수량 결정 후 호가 생성
  • 주문 관리자: 기존 주문 취소·수정, 새 주문 제출, 체결 추적
  • 리스크 엔진: 재고 모니터링, 손절, 변동성 감지, 비상 정지

특히 주문 관리에서 레이턴시가 중요합니다. 호가 업데이트가 느리면 오래된 호가에 불리하게 체결(역선택, Adverse Selection)됩니다. 슬리피지 관리와 직결되는 부분입니다.

수익성 시뮬레이션

파라미터 보수적 공격적
스프레드 0.1% 0.03%
일 왕복 체결 횟수 50회 500회
회당 수량 (USDT) 1,000 500
일 예상 수익 ~50 USDT ~75 USDT
재고 리스크 낮음 높음

수수료 구조에 따라 실제 수익은 크게 달라집니다. 메이커 리베이트가 있으면 스프레드 수익에 리베이트가 추가되고, 메이커 수수료가 있으면 스프레드에서 차감됩니다.

마켓메이킹 실패 패턴 3가지

  • 역선택(Adverse Selection): 정보 우위 트레이더에게 반복적으로 불리하게 체결됨 → 오더북 불균형·대량 주문 감지로 호가 철회
  • 재고 폭주: 한쪽 체결만 쌓여 방향성 손실 → 재고 상한 + 자동 헤지 필수
  • 변동성 폭발 대응 실패: 뉴스·이벤트 시 고정 스프레드 유지 → 리스크 관리 규칙으로 즉시 스프레드 확대 또는 봇 정지

마무리

마켓메이킹은 방향성 예측 없이 스프레드 차익과 체결 빈도로 수익을 추구하는 전략입니다. 핵심은 재고 관리, 동적 스프레드, 역선택 방어 세 가지입니다. 변동성이 낮고 유동성이 적당한 시장에서 가장 잘 작동하며, 급변동 시에는 빠르게 호가를 철회하는 방어 로직이 필수입니다.

자동매매 봇으로 마켓메이킹을 구현한다면, 데이터 수집부터 리스크 엔진까지 모듈화된 설계가 안정적 운영의 기반이 됩니다. 소규모 자금으로 변동성이 낮은 알트코인 페어에서 시작해 점진적으로 확장하는 것을 추천합니다.

위로 스크롤
WordPress Appliance - Powered by TurnKey Linux