BRAG
← 포럼으로
Ggyak
작성자

Avellaneda-Stoikov 마켓메이킹 전략 완전 분석 — 수식·재고위험·스프레드 최적화 원리

economy8분 읽기· 2026년 6월 22일 PM 1:37· 👁 1

암호화폐 거래소의 유동성 공급자라면 반드시 알아야 할 Avellaneda-Stoikov 모델. 예약가격(reservation price)과 최적 스프레드 공식을 단계별로 해부하고, Hummingbot이 크립토 시장에 맞게 어떻게 변형했는지 γ·κ·η 세 파라미터 계산까지 상세히 분석한다.

마켓메이커는 왜 수식이 필요한가

암호화폐 거래소에서 마켓메이커는 매수·매도 호가를 동시에 제시해 유동성을 공급한다. 문제는 재고위험(inventory risk)다. 한쪽 방향 주문만 체결되면 포지션이 한쪽으로 쏠리고, 시장이 그 방향으로 움직이면 손실이 난다.

이 문제를 수학적으로 해결한 것이 2006년 Avellaneda와 Stoikov가 발표한 모델이다. Hummingbot은 이 모델을 암호화폐 시장에 맞게 개조해 avellaneda_market_making 전략으로 구현했다.

암호화폐 마켓메이킹 트레이딩 차트


원본 모델: 두 핵심 방정식

예약가격 (Reservation Price)

r(s, q, t, σ) = s - q · γ · σ² · (T - t)

변수의미
s현재 중간가격(mid price)
q보유 인벤토리(기본 자산 수량, 양수=롱, 음수=숏)
γ (감마)위험회피 계수 (높을수록 재고위험에 민감)
σ (시그마)자산 변동성
T - t잔여 시간 (종료시각까지 남은 시간)

직관: 인벤토리 q가 양수(기본 자산 과다 보유)이면 예약가격이 중간가격보다 낮아진다. 즉 봇이 더 낮은 가격에서도 팔 의향이 있다는 뜻 — 재고를 줄이고 싶기 때문이다. 반대로 q가 음수(기본 자산 부족)이면 예약가격이 올라가 매수를 유도한다.

최적 스프레드 (Optimal Spread)

δᵃ + δᵇ = γ · σ² · (T - t) + (2/γ) · ln(1 + γ/κ)

변수의미
δᵃ매도 호가와 예약가격의 차이
δᵇ예약가격과 매수 호가의 차이
κ (카파)주문장 유동성 파라미터 (깊은 오더북일수록 큰 값)

직관: 변동성이 높을수록, 그리고 잔여 시간이 길수록 스프레드를 넓혀야 한다. 오더북이 얕으면(κ가 작으면) 체결 가능성이 낮아지므로 역시 스프레드를 넓힌다.


Hummingbot의 네 가지 개조

원본 모델은 주식 시장(유한 거래일, 정규분포 가격 프로세스)을 가정한다. 24시간 무휴로 돌아가는 암호화폐 봇에 그대로 적용하면 맞지 않는다. Hummingbot 팀이 도입한 수정 사항:

  1. η (에타) 파라미터 추가 — 목표 인벤토리에서 멀어질수록 주문 크기를 줄이는 decay 함수 (2018 Stanford 논문 참고)
  2. vol_to_spread_multiplier — 변동성 임계값 이상에서 스프레드를 비례 확대하는 안전장치
  3. 파라미터 재계산 — 사용자가 지정한 min/max 스프레드로부터 γ와 κ를 역산
  4. 반복 closing_time (T) — 봇이 무기한 실행되므로 주기적으로 T를 리셋하고 파라미터를 재보정

γ (감마) 역산: 사용자 설정에서 위험회피 계수 구하기

사용자는 γ를 직접 입력하지 않는다. 대신 min_spreadmax_spread를 입력하면 봇이 γ를 역산한다.

인벤토리 q가 양수일 때, 예약가격과 스프레드 공식을 결합하면:

γ_max = (max_spread - min_spread) / (2 · |q| · σ²)

이 γ_max에 IRA(Inventory Risk Aversion, 0~1 사이 계수)를 곱한다:

γ = γ_max × IRA

IRA = 1: 최대 위험회피. 인벤토리 편중 시 예약가격이 크게 움직여 호가를 공격적으로 조정.

IRA = 0: 위험 중립. 재고 불균형을 무시하고 중간가격 중심으로 대칭 호가.


κ (카파) 역산: 초기 스프레드 조건

t=0(봇 시작 시점)에서 스프레드가 max_spread로 시작하도록 κ를 결정한다. 초기 스프레드 타겟:

(δᵃ + δᵇ)_t=0 = (2 - IRA) × max_spread + IRA × min_spread

IRA=1이면 max_spread + min_spread, IRA=0이면 2×max_spread가 된다.

κ를 구하는 방정식:

κ = γ / [exp{((δᵃ + δᵇ)_t=0 × γ - σ²γ²) / 2} - 1]

이 κ값이 주문장의 유동성 깊이를 반영하는 파라미터로 작동한다.

오더북 깊이와 마켓메이킹 스프레드


η (에타): 인벤토리 decay로 주문 크기 조절

목표 인벤토리에서 멀어질수록 주문 크기를 줄여 추가 편중을 방지한다:

q_decay = 총 기본 자산 인벤토리 / IRA
η = 1 / q_decay

예: 총 인벤토리 100 BTC, IRA=0.5이면 q_decay=200, η=0.005. 인벤토리가 목표에서 멀수록 주문 크기 지수가 감쇠한다.


IRA → 0의 극한: 순수 마켓메이킹과의 관계

IRA를 0으로 보내면 γ도 0으로 수렴한다. 이때:

  • 예약가격 r → 중간가격 s (재고 편중 무시)
  • 스프레드 → 2 × max_spread (항상 최대 스프레드 유지)
  • 매수·매도 호가가 중간가격에 대칭

이것은 단순 pure_market_making 전략과 동일하다. 즉 순수 마켓메이킹은 Avellaneda-Stoikov 모델의 특수한 극한 케이스다.


실전 파라미터 설정 가이드

상황권장 IRA스프레드 설정
변동성 높음, 재고 민감0.7~1.0min 0.3%, max 1.5%
변동성 보통, 균형 추구0.3~0.6min 0.1%, max 0.8%
변동성 낮음, 공격적 유동성0.0~0.2min 0.05%, max 0.3%

핵심 직관: IRA를 높이면 봇이 재고 균형에 집착해 수익 기회를 일부 포기하지만 꼬리 위험(tail risk)이 줄어든다. 낮추면 더 많은 체결을 노리지만 시장이 급격히 움직일 때 포지션이 크게 쏠릴 수 있다.


정리

Avellaneda-Stoikov 모델의 핵심은 두 가지다. 첫째, 예약가격으로 호가 중심을 재고 상태에 따라 동적으로 이동시킨다. 둘째, 변동성과 오더북 깊이를 반영해 스프레드를 최적화한다. Hummingbot의 개조 버전은 여기에 무한 실행 적응(반복 T), 주문량 decay(η), 직관적 파라미터 역산(IRA → γ, κ)을 더해 실전 크립토 봇으로 발전시켰다.

퀀트 마켓메이킹에 처음 입문한다면 IRA=0.5, min_spread=0.1%, max_spread=0.8%에서 시작해 실전 데이터를 보며 조정하는 것을 권장한다.

👁 1 · 💬 0

💬 댓글 0

0/500

댓글을 불러오는 중…