📊 這篇屬於 量化交易全景地圖 的一塊;做市是「市場怎麼運作」這一群裡最核心、也最常被誤解的角色。
你掛在訂單簿上的每一筆限價單,背後其實都站著一群人在做同一件事:做市(Market Making)。他們不賭方向、不猜漲跌,而是同時掛買單和賣單,靠一進一出的價差吃飯。聽起來像穩賺,但做市其實是量化裡「看起來最簡單、做起來最難」的一塊。這篇用白話帶你看懂被動與主動做市的差別、報價要掛多寬、為什麼會被「有毒訂單流」咬一口,最後拆解業界經典的 Avellaneda-Stoikov 報價模型——全程資產中立,加密只在每段輕點一句。
做市是什麼:街口換錢攤的生意
白話比喻: 想像機場的換錢攤。它同時掛兩個牌價——「我用 31.0 跟你買美金、用 31.3 賣你美金」。它不關心美金接下來會漲還會跌,只要一直有人來買、有人來賣,它就靠那 0.3 元的價差賺錢。做市商在交易所做的事一模一樣,只是把「美金」換成 BTC、股票或選擇權。
正式定義: 做市商是同時在買賣兩側持續提供限價報價的參與者,靠買價(bid)與賣價(ask)之間的價差(spread)獲利,並為市場提供流動性。
怎麼運作: 它掛一個略低於合理價的買單、一個略高於合理價的賣單。有人來砸市價賣,就被它的買單接走;有人來砸市價買,就吃到它的賣單。一來一回,它賺到價差、手上庫存又回到原點。
最容易被忽略的風險: 換錢攤最怕「單邊行情」——所有人都來買美金、沒人賣,它的美金存貨被搬空,只能眼睜睜看價格繼續漲卻補不到貨。做市的核心風險從來不是價差不夠大,而是庫存被行情推到單邊,這點後面會專門講。
中英名詞: 做市商 Market Maker、價差 Spread、流動性 Liquidity、買價/賣價 Bid/Ask。
被動做市:掛單收租 + Maker 回饋
白話比喻: 被動做市像在夜市擺攤等客人上門。你把價格牌立好(掛限價單),不主動追著客人跑,誰來成交就成交。
正式定義: 被動做市指只掛限價單(Maker 單)、被動等待對手方來成交的做市方式,不主動吃單。
怎麼運作: 你在 best bid 附近掛買、best ask 附近掛賣。因為你的單是「掛著等」的限價單,多數交易所會把你歸類為 Maker(造市方),收取較低手續費,甚至倒貼回饋(Maker rebate)。也就是說,就算你只是平進平出、價差賺到的錢是零,你還可能靠 rebate 與成交量本身賺到錢——這就是為什麼做市量越大、越值錢。
加密例子: 加密交易所普遍有 Maker/Taker 分級與 VIP 費率階梯,做市量做得越大,Maker 費率越低、回饋越高,這是做市在加密圈最直接的變現訊號。
最容易被忽略的風險: 掛著不動最舒服,但也最容易被資訊更靈通的人「撿便宜」。當市場剛要往上跳,你那張還掛在舊價的賣單會第一個被吃掉——你以為在收租,其實是在用過時的價格賤賣。這叫逆向選擇,後面細講。
中英名詞: 被動做市 Passive Market Making、造市方 Maker、回饋 Rebate、手續費階梯 Fee Tier。
主動做市:會自己挪牌價的攤子
白話比喻: 同樣是換錢攤,主動做市的老闆會一直盯著國際匯率跑馬燈,匯率一動就立刻改自己的牌價,而且哪邊存貨快空了就把那邊的價挪一挪,逼客人少跟他做那一邊。
正式定義: 主動做市指根據即時行情與自身庫存,持續動態調整報價中心、價差寬度與兩側偏斜(skew)的做市方式。
怎麼運作: 它做三件事——(1)重定錨:跟著合理價值(下一節的 Fair Value)移動報價中心;(2)調寬窄:行情波動大就把價差拉寬保護自己,平靜時收窄搶成交;(3)偏斜報價(skew):手上 BTC 太多、想少買多賣,就把買價和賣價「整組往下挪」,讓賣單更容易成交、買單更難成交,藉此把庫存推回中性。
最容易被忽略的風險: 主動報價要一直撤單、改單,在延遲與手續費上都是成本。改得太勤會被網路延遲與排隊機制拖累,慢人一步反而每次都掛在錯的價;散戶級設備在這條延遲賽道上幾乎沒有勝算(這點在速度分類那篇會專門談)。
中英名詞: 主動做市 Active Market Making、偏斜 Skew、報價中心 Quote Mid、重定錨 Re-anchor。
Fair Value 與報價寬度:圍著哪個價、掛多寬
白話比喻: 報價就像繞著一個圓心畫兩條線。圓心畫錯,整組報價就歪了;兩條線離圓心太近容易被咬、太遠又沒人跟你成交。
正式定義: 合理價值(Fair Value)是做市商心中「這資產此刻該值多少」的估計,是報價的中心;報價寬度(Quote Width / Half-spread)是從 Fair Value 往兩側各拉多遠掛單。
怎麼運作: Fair Value 的常見起點不是單純的中間價(mid),而是用買賣兩側掛單量加權的 microprice(微觀價)——量大的一側會把參考價往對手方推,更貼近「下一筆成交比較可能落在哪」。算出 Fair Value 後,做市商再決定 half-spread:波動越大、成交越可能對自己不利時,就掛越寬。
加密例子: 上一篇 訂單簿失衡 OBI/OFI 算的 microprice,正是這裡 Fair Value 最常用的起點;做市其實就是把那套盤口訊號接到報價邏輯上。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""做市報價示範:microprice 當 Fair Value + 依庫存偏斜兩側報價。只印報價,不下單。"""
import ccxt
ex = ccxt.binance()
ob = ex.fetch_order_book("BTC/USDT", limit=20)
pb, qb = ob["bids"][0] # 最佳買價、買量
pa, qa = ob["asks"][0] # 最佳賣價、賣量
# 1) Fair Value:用買賣量加權的 microprice(量大的一側把價推向對手)
fair_value = (pb * qa + pa * qb) / (qb + qa)
# 2) 參數
half_spread_bps = 5 # 基礎半價差(萬分之5)
inventory = 0.8 # 目前庫存(顆),目標 0
inv_target = 0.0
gamma = 2.0 # 偏斜強度(風險趨避)
# 3) 庫存偏斜:庫存偏多 → 整組報價往下挪,逼「多賣少買」把庫存推回中性
hs = fair_value * half_spread_bps / 1e4
skew = gamma * (inventory - inv_target) * hs
bid = fair_value - hs - skew
ask = fair_value + hs - skew
print(f"microprice (Fair Value) = {fair_value:,.2f}")
print(f"庫存 {inventory} 顆 (目標 {inv_target}) → 報價整組偏移 {-skew:+.2f}")
print(f"建議報價 BID {bid:,.2f} ASK {ask:,.2f} (價差 {ask - bid:.2f})")
print("\n*只計算並印出報價,未呼叫任何下單 API。Fair Value 估錯比價差掛錯更致命。")
實際跑一次(即時行情,數字每次會變):
microprice (Fair Value) = 60,083.99
庫存 0.8 顆 (目標 0.0) → 報價整組偏移 -48.07
建議報價 BID 60,005.88 ASK 60,065.96 (價差 60.08)
*只計算並印出報價,未呼叫任何下單 API。Fair Value 估錯比價差掛錯更致命。
最容易被忽略的風險: Fair Value 估錯比價差掛錯更致命。用了被瞬間撤掉的假掛單(spoofing)去算 microprice,整組報價就被帶歪;報價寬度若沒隨波動放大,遇到急行情就會被連續吃單、單邊累積庫存。
中英名詞: 合理價值 Fair Value、微觀價 Microprice、中間價 Mid Price、報價寬度 Quote Width、半價差 Half-spread。
庫存風險、逆向選擇與有毒訂單流(這段最重要)
白話比喻: 做市最痛的三件事可以用一句話講完:「你接的單,往往是別人故意倒給你的。」
正式定義與運作:
- 庫存風險(Inventory Risk):做市過程中手上會累積多頭或空頭部位。市場單邊走時,你被迫一直接同一邊的單,庫存越堆越大,價格又繼續往不利方向跑,價差賺的那點錢遠遠補不上庫存的浮虧。
- 逆向選擇(Adverse Selection):會來吃你限價單的人,常常是「知道得比你多」的人。利多剛出,你那張舊賣單第一個被吃掉——你總是在錯的時間被選中成交,這就是逆向選擇。
- 有毒訂單流(Toxic Order Flow):當成交流裡充滿了資訊靈通、會讓你立刻虧錢的單,這股流就是「有毒」的。做市商必須能分辨「無害的散戶流」與「有毒的知情流」,後者出現時要主動拉寬價差甚至收單。
最容易被忽略的風險: 新手最常把做市想成「穩穩收價差」,卻忽略上面三者會在同一個瞬間一起爆發——急行情來時,庫存暴增、逆向選擇拉滿、訂單流變毒,三件事疊加,是做市虧大錢的標準劇本。做市賺的是「平靜時的小錢」,輸的是「劇烈時的大錢」,風控(庫存上限、自動收單、避險對沖)才是這門生意能不能活下來的關鍵。
中英名詞: 庫存風險 Inventory Risk、逆向選擇 Adverse Selection、有毒訂單流 Toxic Order Flow、避險 Hedging。
Avellaneda-Stoikov:把「該掛多寬、該偏哪邊」寫成公式
白話比喻: 前面講的「庫存多就把報價往下挪、波動大就掛寬一點」都是直覺。Avellaneda 與 Stoikov 在 2008 年做的事,是把這套直覺寫成可以算的公式——它同時回答兩個問題:報價該圍著哪個價(保留價格)、兩側該掛多寬(最優價差)。
正式定義(白話 + 公式):
第一步是保留價格(reservation price),也就是「考慮了我手上庫存後,我心裡真正願意成交的中心價」:
r = s − q · γ · σ² · (T − t)
白話拆解:s 是當前參考價(如 microprice),q 是目前庫存(手上多單為正、空單為負),γ 是你的風險趨避程度,σ² 是波動率,(T−t) 是離收盤/結算還剩多久。意思是——手上多單越多(q 越大)、越怕風險(γ 越大)、波動越大,保留價格就被往下壓越多,逼你少買多賣、把庫存推回中性。庫存為零時,保留價格就等於參考價。
第二步是最優價差(optimal spread),決定兩側各掛多寬:
spread = γ · σ² · (T − t) + (2 / γ) · ln(1 + γ / κ)
白話拆解:κ 衡量訂單簿流動性(成交來得多快)。波動越大、越怕風險,價差掛越寬;市場越有流動性(κ 越大),價差可以收越窄。 最後把 spread 平分到保留價格 r 的兩側,就得到實際的 bid 與 ask。
怎麼運作: 把報價中心從「中間價」換成「保留價格」,等於把庫存風險直接內建進報價——這正是前面「主動做市偏斜」的數學版本。
最容易被忽略的風險: Avellaneda-Stoikov 是一個模型,不是真理。它假設波動率、流動性參數穩定,但真實市場的 σ、κ 一直在變,急行情下假設整組失效;參數(尤其 γ、κ)要靠資料估,估錯就報出一組危險的價。它幫你把直覺系統化,但不會幫你預測方向,更不保證賺錢。
中英名詞: 保留價格 Reservation Price、最優價差 Optimal Spread、風險趨避 Risk Aversion (γ)、波動率 Volatility (σ)、流動性參數 Order Arrival Intensity (κ)。
實務上做市用什麼工具
學完概念,真要動手通常不會從零寫起。開源的做市/網格框架(如 Hummingbot)提供了報價、撤改單、庫存管理的骨架,可接多家交易所;自研派則直接用 ccxt 這類庫統一接盤口與下單 API,再把上面的 Fair Value、偏斜、價差邏輯寫進去。共通點是:抓盤口、估合理價、算報價、管庫存、控風險這條鏈缺一不可,而風控永遠是最後也最重要的一環。
想從概念走到實作?
做市的第一步技能,其實跟寫一個交易機器人完全相同——都是用 ccxt 抓盤口、下單、管部位。如果你想把這篇的報價直覺接上真實 API 練手,可以從 用 ccxt 自己寫一個交易機器人 這篇的同一套技能延伸;想了解掛單收租這類「靠機制而非靠猜方向」的低風險打法,資金費率套利 是另一個值得看的加密實戰。記住:這些都是教育用途的概念延伸,不是要你現在就去開倉。
常見問題 FAQ
做市是不是穩賺不賠?
不是。做市賺的是平靜行情下的小額價差與 Maker 回饋,但單邊急行情時,庫存風險、逆向選擇、有毒訂單流會一起爆發,可能一次就吃掉很久累積的價差。它是「靠機制與風控」的生意,不是無風險套利。
被動做市和主動做市差在哪?
被動做市只掛限價單、被動等成交,圖的是低手續費與 Maker 回饋;主動做市會根據行情與庫存持續改報價、調價差、做偏斜,反應更快但撤改單與延遲成本也更高。多數實戰是兩者的混合。
Maker 回饋(rebate)是真的「倒貼錢給我」嗎?
部分交易所對 Maker 單給的是負手續費(即回饋),等於你掛單成交還能收到一點錢;但能不能拿到、拿多少取決於交易所政策與你的費率等級,且回饋通常遠小於庫存看錯方向的虧損,不能當成穩定收益來源。
Avellaneda-Stoikov 模型散戶能用嗎?
概念與公式任何人都能學,也有開源實作;但它需要估波動率與流動性參數,且對延遲、手續費敏感,散戶在速度與成本上先天吃虧。把它當成「理解做市如何系統化」的教材很好,當成「照抄就能賺」的明牌則很危險。
做市跟網格交易是同一回事嗎?
有交集但不同。網格是在固定價位區間掛多層買賣單,邏輯較固定;做市更強調用 Fair Value 動態定錨、依庫存偏斜報價、主動管理風險。網格可以看成做市思路的一種簡化、規則化版本。
延伸閱讀
利益揭露:本文部分交易所連結含邀請碼,使用不增加你的成本,有些還有手續費折扣。內容以教育與「幫你看懂並避坑」為前提,不構成投資建議。





發表迴響