← กลับไปยังบทความ
July 21, 2026
อ่าน 5 นาที

การตัดสินใจ maker-taker: ระดับค่าธรรมเนียม ส่วนลดคืนเงิน (rebate) และต้นทุนที่แท้จริงของการข้าม spread

การตัดสินใจ maker-taker: ระดับค่าธรรมเนียม ส่วนลดคืนเงิน (rebate) และต้นทุนที่แท้จริงของการข้าม spread
#maker taker
#ค่าธรรมเนียมการเทรด
#rebate
#adverse selection
#market making
#execution
#market microstructure
#backtest

ทุกออเดอร์ที่คุณส่งออกไปต้องตัดสินใจแบบไบนารีอย่างหนึ่งก่อนสิ่งอื่นใด นั่นคือข้าม spread แล้วจ่าย taker fee หรือพักไว้ในบุ๊คแล้วจ่าย maker fee — หรืออาจได้รับ rebate ด้วยซ้ำ วงการนี้มักนำเสนอเรื่องนี้ในฐานะการปรับให้ค่าธรรมเนียมเหมาะสมที่สุด และตารางค่าธรรมเนียมก็ทำให้ดูเป็นแบบนั้นจริง ๆ taker 5 bps, maker 2 bps, ประหยัด 3 bps, เปิดใช้ post-only flag แล้วจบ กรอบคิดแบบนี้เป็นเพียงเปลือกนอก เพราะเบื้องหลังแล้ว maker เทียบกับ taker คือการเทรดเรื่อง adverse selection ว่าคุณจะจ่ายราคาที่รู้แน่ชัดเพื่อแลกกับความรวดเร็วในการส่งคำสั่ง หรือจะขายออปชันให้ตลาดในการเลือกจับคู่คำสั่งคุณตามดุลยพินิจของมันเอง — ออปชันที่คู่สัญญาซึ่งมีข้อมูลมากกว่าจะใช้สิทธิ์แม่นยำในจังหวะที่การจับคู่นั้นสร้างความเสียหายให้คุณ ตารางค่าธรรมเนียมตั้งราคาออปชันนั้นสำหรับผู้เข้าร่วมตลาดโดยเฉลี่ย แต่คุณไม่ใช่ผู้เข้าร่วมตลาดโดยเฉลี่ย และ flow ที่มาชนกับ quote ของคุณก็ไม่ใช่เช่นกัน

บทความนี้จะทำคณิตศาสตร์ที่ตารางค่าธรรมเนียมซ่อนไว้ นั่นคือจุดคุ้มทุนที่ถูกต้อง เหตุใด Glosten-Milgrom (1985) จึงบ่งชี้ว่าการถูกจับคู่คำสั่งแบบ passive มีอคติเชิงโครงสร้างต่อคุณ ระดับค่าธรรมเนียมคริปโตจริงและส่วนลดโทเคนส่งผลต่อตัวเลขอย่างไร เหตุใด rebate mining จึงตายไปในตลาดหุ้นและรูปแบบที่กลายพันธุ์ใดที่ยังอยู่รอดในคริปโต ตำแหน่งในคิว (queue position) กำหนดมูลค่าที่แท้จริงของ rebate อย่างไร และวิธีจำลองทั้งหมดนี้ใน backtest โดยไม่ทำบั๊กเรื่องค่าธรรมเนียมที่พบบ่อยที่สุดในวงการ

จุดคุ้มทุนแบบไร้เดียงสา — และเทอมที่ทุกคนลืม

สัญลักษณ์: spread ที่ quote ไว้ ss, taker fee ftf_t, maker fee fmf_m (เป็นค่าลบหากเป็น rebate) ทั้งหมดเป็น basis points ของ notional โดยใช้ mid เป็น benchmark price การข้าม spread ทำให้คุณเสียครึ่งหนึ่งของ spread บวกกับ taker fee ส่วนการพักออเดอร์ทำให้คุณได้ครึ่งหนึ่งของ spread และเสีย maker fee:

Ctaker=s2+ft,Cmakernaive=fms2C_{\text{taker}} = \frac{s}{2} + f_t, \qquad C_{\text{maker}}^{\text{naive}} = f_m - \frac{s}{2}

ลองแทนค่าอัตราพื้นฐานของ Binance USDⓈ-M futures — maker 2 bps, taker 5 bps — บน perp ที่ quote spread กว้าง 2 bps: taker มีต้นทุน 1+5=61 + 5 = 6 bps, maker "มีต้นทุน" 21=12 - 1 = 1 bps ดูเหมือนจะประหยัดได้ 5 bps ต่อการเทรด ทุกการเทรด สำหรับกลยุทธ์ที่ทำ round trip 20 ครั้งต่อวัน นี่ถูกอ้างว่าเป็น edge รายวันถึง 100 bps จากการติ๊กช่องเพียงอย่างเดียว

ก่อนอื่นให้สังเกตอะไรบางอย่างเกี่ยวกับตัวเลขเหล่านี้ ค่าธรรมเนียมไม่ใช่ตัวปรับแก้ของ spread — ในคู่เทรดคริปโตที่มีสภาพคล่องสูง ค่าธรรมเนียมคือต้นทุนเลย BTCUSDT perp มัก quote spread แคบกว่า 1 bps ในขณะที่ taker รายย่อยจ่ายถึง 5 bps ครึ่งหนึ่งของ spread กลายเป็นแค่ความคลาดเคลื่อนเล็กน้อยเมื่อเทียบกับค่าธรรมเนียม นี่ตรงข้ามกับสัญชาตญาณในตลาดหุ้นที่ spread กับค่าธรรมเนียมมีขนาดใกล้เคียงกัน และนี่คือเหตุผลว่าทำไมในคริปโต การเปรียบเทียบแบบไร้เดียงสาทุกครั้งจึงตะโกนว่า "make เสมอ" นี่ก็เป็นเหตุผลว่าทำไม backtest การทำ market-making ครั้งแรกจึงมักทำกำไรได้เสมอ แต่การนำไปใช้จริงครั้งแรกส่วนใหญ่กลับไม่เป็นเช่นนั้น

ต้นทุน maker แบบไร้เดียงสาขาดเทอมไปสามอย่าง:

  1. ความเสี่ยงที่ไม่ถูกจับคู่คำสั่ง (non-fill risk) limit order ไม่ใช่การเทรด แต่เป็นสลากล็อตเตอรีสำหรับการเทรด เมื่อมันไม่ถูกจับคู่ คุณจะพลาดการเคลื่อนไหวของราคา หรือไม่ก็ต้องข้าม spread ในภายหลังที่ราคาแย่กว่าเดิม
  2. Adverse selection เมื่อพิจารณาเงื่อนไขว่าออเดอร์ถูกจับคู่แล้ว ราคามีแนวโน้มจะเคลื่อนไหวสวนทางกับคุณมากกว่าที่การกระจายตัวแบบไม่มีเงื่อนไขจะบ่งชี้ นี่ไม่ใช่โชคร้าย แต่เป็นทฤษฎีบท
  3. ต้นทุนการ re-quote การไล่ตามตลาดด้วยการยกเลิก/วางใหม่ (cancel/replace) จะรีเซ็ตตำแหน่งคิวของคุณไปอยู่ท้ายแถว ซึ่งจะเปลี่ยนการกระจายตัวของการจับคู่คำสั่งของคุณให้กลายเป็นการจับคู่แบบชนิดที่ 2 เป็นส่วนใหญ่โดยไม่รู้ตัว

เทอมที่สองคือตัวที่มีทฤษฎีรองรับมายาวนานถึงห้าสิบปี ดังนั้นมาทำให้ถูกต้องกันดีกว่า

Glosten-Milgrom: การถูกจับคู่คำสั่งคือข่าวร้าย

Glosten และ Milgrom (1985), "Bid, Ask and Transaction Prices in a Specialist Market with Heterogeneously Informed Traders" (Journal of Financial Economics 14) เป็นโมเดลที่อธิบายได้ชัดเจนที่สุดว่าทำไม spread จึงมีอยู่ตั้งแต่แรก market maker ที่เป็นกลางต่อความเสี่ยง (risk-neutral) แข่งขันกันอย่างเต็มที่และไม่มีต้นทุนใด ๆ จะ quote ทั้งราคา bid และ ask เทรดเดอร์ที่เข้ามาส่วนหนึ่งในสัดส่วน μ\mu เป็นผู้มีข้อมูล (informed) — พวกเขารู้มูลค่าที่แท้จริงของสินทรัพย์ VV — ส่วนที่เหลือเทรดด้วยเหตุผลภายนอก โดยซื้อหรือขายด้วยความน่าจะเป็นเท่ากัน market maker ไม่สามารถแยกแยะพวกเขาออกจากกันได้ การแข่งขันบังคับให้แต่ละ quote ต้องเป็นค่าคาดหวังแบบมีเงื่อนไข (conditional):

ask=E[Vnext trader buys],bid=E[Vnext trader sells]\text{ask} = \mathbb{E}[V \mid \text{next trader buys}], \qquad \text{bid} = \mathbb{E}[V \mid \text{next trader sells}]

ลองคำนวณตัวเลข สมมติให้ VV เท่ากับ 101 หรือ 99 ด้วยความน่าจะเป็นเท่ากัน และ μ=0.2\mu = 0.2 ถ้า V=101V = 101 คำสั่งซื้อจะเข้ามาด้วยความน่าจะเป็น μ+(1μ)/2=0.6\mu + (1-\mu)/2 = 0.6 (ผู้มีข้อมูลทั้งหมดซื้อ ครึ่งหนึ่งของผู้ไม่มีข้อมูลซื้อ) ถ้า V=99V = 99 ความน่าจะเป็นคือ 0.40.4 ดังนั้น

ask=0.50.6101+0.50.4990.5=100.2,bid=99.8\text{ask} = \frac{0.5 \cdot 0.6 \cdot 101 + 0.5 \cdot 0.4 \cdot 99}{0.5} = 100.2, \qquad \text{bid} = 99.8

spread เท่ากับ μ(VHVL)=0.4\mu(V_H - V_L) = 0.4 — เป็นค่าตอบแทนสำหรับ adverse selection ล้วน ๆ ไม่มีความเสี่ยงจาก inventory ไม่มีค่าธรรมเนียม ไม่มีค่าเช่าจากการผูกขาด (monopoly rent) และ spread ก็ยังคงมีอยู่ โดยแปรผันตามสัดส่วนผู้มีข้อมูลและขนาดของสิ่งที่พวกเขารู้

ผลลัพธ์ที่สำคัญต่อการตัดสินใจ maker-taker คือ การถูกจับคู่คำสั่งเองก็คือข้อมูล และข้อมูลนั้นเป็นปฏิปักษ์ต่อคุณ bid ที่คุณพักไว้จะซื้อได้บ่อยขึ้นเมื่อมูลค่าที่แท้จริงต่ำ เพราะนั่นคือช่วงเวลาที่ผู้ขายที่มีข้อมูลปรากฏตัวขึ้น การพิจารณาเงื่อนไขจากการถูกจับคู่คำสั่งของตัวเองจะดึงค่าคาดหวังของสิ่งที่คุณเพิ่งซื้อไปให้ต่ำลง — โดยธรรมชาติของโครงสร้าง ไม่ใช่เพราะโชคร้าย วิธีมาตรฐานในการวัดสิ่งนี้คือ markout: สำหรับการซื้อที่ถูกจับคู่ที่ราคา pp markout ที่ horizon τ\tau คือ m(τ)=mid(tfill+τ)pm(\tau) = \text{mid}(t_{\text{fill}} + \tau) - p markout รวมของการจับคู่แบบ passive เป็นค่าลบสำหรับเกือบทุกคนในเกือบทุกที่ วิธีคำนวณโดยไม่หลอกตัวเองมีอธิบายไว้ใน Implementation shortfall and TCA

กรอบคิดที่เทียบเท่ากันและสามารถขยายความได้ดีกว่าคือ limit order ที่พักไว้เป็นออปชันฟรีที่มอบให้กับตลาด คู่สัญญา — ไม่ใช่คุณ — เป็นผู้เลือกจังหวะในการใช้สิทธิ์ และพวกเขาจะใช้สิทธิ์เมื่อมันเป็นประโยชน์ต่อพวกเขา maker rebate คือพรีเมียมที่ venue จ่ายให้คุณสำหรับการเขียนออปชันนั้น คำถามไม่เคยเป็น "พรีเมียมเป็นบวกหรือไม่" แต่เป็น "พรีเมียมมากกว่ามูลค่าของออปชันสำหรับผู้ที่ใช้สิทธิ์หรือไม่"

จุดคุ้มทุนที่ถูกต้อง

ให้ pp เป็นความน่าจะเป็นที่ quote ของคุณจะถูกจับคู่ภายใน horizon การตัดสินใจของคุณ A=E[adverse movefill]A = \mathbb{E}[\text{adverse move} \mid \text{fill}] เป็นต้นทุน markout แบบมีเงื่อนไขในหน่วย bps และ DD เป็นต้นทุนเพิ่มเติมที่คุณจ่ายเมื่อไม่ถูกจับคู่ (การเคลื่อนไหวของราคาระหว่างที่คุณรอบวกกับการข้าม spread ที่ราคาใหม่) ต้นทุน maker ที่ถูกต้องคือ:

E[Cmaker]=p(fms2+A)+(1p)(s2+ft+D)\mathbb{E}[C_{\text{maker}}] = p\left(f_m - \frac{s}{2} + A\right) + (1-p)\left(\frac{s}{2} + f_t + D\right)

การ make จะดีกว่าการ take เมื่อ E[Cmaker]<s/2+ft\mathbb{E}[C_{\text{maker}}] < s/2 + f_t ซึ่งจัดรูปใหม่ได้เป็นอสมการที่ชัดเจน:

s+ftfmส่วนต่างที่ดูเหมือนประหยัดได้  >  Aadverse selection  +  1ppDต้นทุนพลาดการจับคู่ถ่วงน้ำหนักด้วยอัตราต่อรอง\underbrace{s + f_t - f_m}_{\text{ส่วนต่างที่ดูเหมือนประหยัดได้}} \;>\; \underbrace{A}_{\text{adverse selection}} \;+\; \underbrace{\frac{1-p}{p}\,D}_{\text{ต้นทุนพลาดการจับคู่ถ่วงน้ำหนักด้วยอัตราต่อรอง}}

การแยกส่วนเปรียบเทียบต้นทุน taker กับต้นทุน maker ที่แท้จริง

ตัวอย่างเดิม แต่ครั้งนี้ใส่ friction ที่สมจริง: s=2s = 2, ft=5f_t = 5, fm=2f_m = 2 ดังนั้นส่วนต่างที่ดูเหมือนประหยัดได้คือ 5 bps สมมติ p=0.6p = 0.6, A=3A = 3 bps, D=2D = 2 bps ด้านขวาของอสมการคือ 3+0.40.62=4.333 + \frac{0.4}{0.6} \cdot 2 = 4.33 bps การ make ยังคงชนะอยู่ — แต่ด้วยมาร์จิ้นเพียง 0.67 bps ไม่ใช่ 5 ในเชิงค่าคาดหวัง: E[Cmaker]=0.6(21+3)+0.4(1+5+2)=5.6\mathbb{E}[C_{\text{maker}}] = 0.6(2 - 1 + 3) + 0.4(1 + 5 + 2) = 5.6 bps เทียบกับต้นทุน taker ที่ 6.0 การติ๊กช่องนั้นมีมูลค่าเพียง 0.4 bps ไม่ใช่ 5 และความคลาดเคลื่อนเล็กน้อยใน AA หรือ pp ก็สามารถพลิกเครื่องหมายได้

ที่แย่กว่านั้นคือ AA, pp และ DD ไม่ใช่ตัวแปรอิสระต่อกัน — พวกมันถูกขับเคลื่อนร่วมกันโดย เหตุผล ที่คุณเทรด หากสัญญาณของคุณมีความสัมพันธ์กับ flow ระยะสั้น (การเข้า momentum ทุกครั้งเป็นเช่นนี้) แล้วในช่วงเวลาที่คุณต้องการเข้าเทรดพอดี p1p \to 1 และ AA จะพุ่งสูงขึ้น คุณจะถูกจับคู่คำสั่งทันที ด้วยการเคลื่อนไหวที่คุณคาดการณ์ไว้ ที่ราคาเก่า อยู่ผิดฝั่งของมัน ส่วนลด maker มีค่ามากที่สุดในตารางค่าธรรมเนียมพอดีกับการเทรดที่มันเป็นลบมากที่สุดในความเป็นจริง นี่คือความหมายที่ว่าการเลือก maker-taker เป็นการเทรด adverse selection ที่สวมชุดตารางค่าธรรมเนียม

ตารางค่าธรรมเนียมจริง: ระดับขั้น ส่วนลดโทเคน และกับดักค่าธรรมเนียมส่วนเพิ่ม

ตารางค่าธรรมเนียมที่เป็นตัวแทนของ venue หลัก ๆ ณ กลางปี 2026 (ระดับพื้นฐาน → ระดับสูงสุดของสาธารณะ; ควรตรวจสอบหน้าเว็บของ venue เพราะสิ่งเหล่านี้เปลี่ยนแปลงได้):

Venue Maker / Taker พื้นฐาน Maker / Taker ระดับสูงสุด กลไกส่วนลด
Binance spot 10 / 10 bps ลดลงตาม VIP 1-9 จ่ายค่าธรรมเนียมด้วย BNB: −25%
Binance USDⓈ-M perp 2 / 5 bps 0 / 1.7 bps (VIP 9) BNB: −10%; VIP ต้องมีทั้ง volume และยอดคง BNB
Bybit perp 2 / 5.5 bps 0 / 3 bps โปรแกรม MM ลดถึง −1.5 bps maker พร้อมข้อผูกพัน
OKX perp 2 / 5 bps ประมาณ −0.5 / 1.5-2 bps การถือ OKB ปรับระดับในแถบรายย่อย
Hyperliquid perp 1.5 / 4.5 bps maker rebate ถึง −0.3 bps rebate ผูกกับ สัดส่วน ของ maker volume; ส่วนลดจากการ staking
Coinbase Advanced 40 / 60 bps 0 / 5 bps เฉพาะระดับตาม volume
Kraken Pro 25 / 40 bps 0 / 10 bps เฉพาะระดับตาม volume

มีข้อสังเกตเชิงโครงสร้างสามประการ

maker fee สำหรับรายย่อยเป็นบวกแทบทุกที่ ค่าเริ่มต้นแบบตลาดหุ้นที่ "maker ได้เงิน" ใช้ไม่ได้กับคุณจนกว่าจะถึงระดับ VIP ลึก ๆ หรือมีสัญญา market-maker เฉพาะทาง ที่ระดับพื้นฐาน การตัดสินใจ maker-taker คือ "จ่าย 2 หรือจ่าย 5" ไม่ใช่ "ได้เงินหรือจ่ายเงิน"

ส่วนลดโทเคนคือตำแหน่ง (position) ไม่ใช่คูปอง การจ่ายค่าธรรมเนียมด้วย BNB ลดค่าธรรมเนียม Binance spot ลง 25% — 2.5 bps ต่อฝั่งที่ระดับพื้นฐาน เป็นเงินจริงเมื่อคูณด้วย volume แต่ส่วนลดนี้ต้องถือ inventory ของโทเคนแลกเปลี่ยนไว้ ดังนั้นการปรับค่าธรรมเนียมให้เหมาะสมของคุณจึงถูกจัดหาเงินทุนด้วยการเปิดรับความผันผวน (beta exposure) ต่อสินทรัพย์คล้ายหุ้นของ exchange เอง desk ที่จ่ายค่าธรรมเนียม 30k/เดือนและประหยัดได้30k/เดือน และประหยัดได้ 7.5k ผ่าน BNB ในขณะที่ถือ BNB float มูลค่า $200k จะสูญเสียการประหยัดค่าธรรมเนียมทั้งไตรมาสไปกับการร่วง 10% ของ BNB ควรปฏิบัติต่อ float นี้เหมือนตำแหน่งในพอร์ต กำหนดขนาด ป้องกันความเสี่ยง หรือยอมรับว่าคุณขาย volatility เพื่อซื้อส่วนลด (บันได VIP หลายแห่งยังทำให้ ยอดคงเหลือ ของโทเคนเป็นข้อกำหนดของระดับ ซึ่งเปลี่ยนตำแหน่งจากทางเลือกให้กลายเป็นโครงสร้างบังคับ)

ค่าธรรมเนียมส่วนเพิ่ม ≠ ค่าธรรมเนียมเฉลี่ย ระดับขั้นคำนวณจาก volume ย้อนหลัง 30 วัน ดังนั้นค่าธรรมเนียมวันนี้ถูกกำหนดโดยการเทรดเดือนที่แล้ว — แต่การข้ามขอบเขตจะกำหนดราคาใหม่ให้กับ volume ทั้งหมด ของคุณตราบเท่าที่คุณยังอยู่ในระดับนั้น สิ่งนี้สร้าง kink ในต้นทุนส่วนเพิ่มของ volume สมมติว่าระดับถัดไปที่ $15M/30d ลด taker fee ของคุณจาก 5 เหลือ 4 bps ด้วย volume แบบธรรมชาติ $14M การปั่น volume ปลอม $1M จะมีต้นทุนประมาณ 1\text{M} \times (s/2 + f_t) \approx \600และซื้อการประหยัดได้และซื้อการประหยัดได้1,\text{bps} \times $14\text{M} = $1{,}400/เดือน — ค่าธรรมเนียมส่วนเพิ่มของล้านสุดท้ายนั้นเป็น*ลบ* ด้วย volume แบบธรรมชาติ \8M ตรรกะเดียวกันต้องการการปั่น $7M ซึ่งมีต้นทุน $4,200 เพื่อประหยัดเพียง $800 — เป็นการเดิมพันแบบใช้เลเวอเรจที่เผาผลาญ spread และค่าธรรมเนียมจริงไปกับ volume ปลอมเพื่อแลกกับส่วนลดสมมติ ที่ต้องทำซ้ำทุกเดือน การไล่ตามระดับขั้นมีเหตุผลก็ต่อเมื่ออยู่ใกล้ขอบเขตเท่านั้น และ desk ที่จำลองค่าธรรมเนียมของตนเป็นสเกลาร์ตัวเดียวจะมองไม่เห็น kink นี้เลยด้วยซ้ำ

Rebate mining: การถือกำเนิด ความตาย และชีวิตหลังความตายในคริปโต

maker rebate เป็นสิ่งประดิษฐ์จากตลาดหุ้น Island ECN นำมาใช้ในปี 1997 เพื่อสร้างสภาพคล่องแข่งกับ exchange รายเดิม และมันได้ผลดีจนโมเดลนี้ครองโครงสร้างตลาดหุ้นสหรัฐฯ จากนั้น Reg NMS (2005) ก็จำกัดเพดาน taker access fee ไว้ที่ $0.003/หุ้น (Rule 610) และธุรกิจ exchange มาตรฐานก็กลายเป็น: เก็บค่าธรรมเนียมจาก taker ประมาณ 30 mils, คืน rebate ให้ maker ประมาณ 20-30 mils, เก็บส่วนต่างไว้เอง

คณิตศาสตร์แบบนั้นสร้างกลยุทธ์บริสุทธิ์ขึ้นมาชั่วคราว นั่นคือ การเก็บ rebate (rebate capture) วาง quote ทั้งสองฝั่งของหุ้น large-cap ที่มี spread แค่ 1 เซนต์ round trip ที่ scratch — ซื้อและขายที่ราคาเดียวกัน — ก็ยังเก็บ rebate ได้สองครั้ง ประมาณครึ่งเซนต์ต่อหุ้นบน PnL ราคาที่เป็นศูนย์ หากเก็บ spread 1 เซนต์ได้ด้วยก็จะทำให้กำไรเพิ่มเป็นสามเท่า ในช่วงกลางยุค 2000s นี่คือธุรกิจอุตสาหกรรมที่แท้จริง

มันตายลงด้วยสาเหตุสามประการ และแต่ละอย่างก็เป็นบทเรียน:

  1. Rebate เป็นข้อมูลสาธารณะ จึงถูกแข่งขันจนหมดไปในคิว rebate ที่ประกาศไว้จะดึงดูดการ quote จนกว่าค่าคาดหวังของ rebate สุทธิหลังหัก adverse selection ของผู้ quote รายสุดท้ายจะเป็นศูนย์ ในหุ้นที่ถูกจำกัดด้วย tick ราคาไม่สามารถดีขึ้นได้ ดังนั้นการแข่งขันจึงเกิดขึ้นใน time priority — และค่าเช่าก็ไหลไปหาผู้ที่ไปถึงหัวคิวก่อน rebate เป็นเงินทุนให้กับการแข่งขันด้านความเร็ว colocation และหอไมโครเวฟกินมาร์จิ้นไปหมด ผู้ที่ยังคงเก็บ rebate ได้อยู่คือบริษัทที่จะ quote อยู่แล้วไม่ว่าอย่างไรก็ตาม
  2. ในที่ที่ tick ไม่ผูกมัด rebate ก็ไม่ได้เป็นของจริงด้วยซ้ำ Colliard และ Foucault (2012), "Trading Fees and Efficiency in Limit Order Markets" (Review of Financial Studies 25) พิสูจน์ผลลัพธ์ความเป็นกลาง (neutrality result): ด้วย price grid ที่ละเอียด มีเพียงค่าธรรมเนียมรวมของ exchange เท่านั้นที่สำคัญ การแบ่งใด ๆ ระหว่าง maker กับ taker จะถูกยกเลิกด้วยการปรับ quote ให้ maker ได้ rebate แล้วพวกเขาก็จะ quote แคบขึ้นตามสัดส่วน ส่งต่อ rebate นั้นให้ taker โดยตรงผ่าน spread รวมค่าธรรมเนียม (cum-fee spread) การแบ่งนี้จะมีผลก็ต่อเมื่อ tick ขัดขวางการปรับตัวนั้นเท่านั้น — ซึ่งวนกลับไปที่สาเหตุที่ #1 rebate จะสลายไปผ่านราคาหรือผ่านคิว เลือกเอาว่าจะรับพิษแบบไหน (Foucault, Kadan และ Kandel 2013 ให้มุมมองเสริมว่า การแบ่งค่าธรรมเนียมเป็นเครื่องมือของ venue ในการสร้างสมดุลระหว่างการมีส่วนร่วมของ maker และ taker ไม่ใช่ของขวัญให้ฝั่งใดฝั่งหนึ่ง)
  3. ความบิดเบือนดึงดูดหน่วยงานกำกับดูแล Angel, Harris และ Spatt, "Equity Trading in the 21st Century" (2011 และฉบับปรับปรุงปี 2015 ใน Quarterly Journal of Finance) ได้รวบรวมความเสียหาย: quoted spread หยุดวัดต้นทุนที่แท้จริงเพราะค่าธรรมเนียมและ rebate ไม่ได้อยู่ใน quote สถิติ best-execution กลายเป็นเรื่องแต่ง และโบรกเกอร์ต้องเผชิญความขัดแย้งระหว่างการจับคู่คำสั่งของลูกค้ากับ rebate ของตัวเอง Battalio, Corwin และ Jennings (2016, Journal of Finance) แสดงให้เห็นว่าความขัดแย้งนี้ไม่ใช่แค่สมมติฐาน การส่งคำสั่งไปยัง venue ที่ให้ rebate สูงทำให้คุณภาพการจับคู่ limit order แย่ลงอย่างวัดผลได้ SEC วนเวียนอยู่กับเรื่องนี้มาสิบปี — Transaction Fee Pilot ปี 2018 ตายไปในชั้นศาล — และในที่สุดก็ ปรับใช้การแก้ไขในเดือนกันยายน 2024 ลดเพดาน access-fee จาก 30 เหลือ 10 mils (การปฏิบัติตามถูกเลื่อนไปเป็นพฤศจิกายน 2026) ยุคของ rebate อ้วน ๆ ในตลาดหุ้นกำลังจบลงด้วยคำสั่งทางปกครอง

สิ่งที่รอดชีวิตในคริปโตน่าสนใจตรงที่มันไม่ใช่การฟื้นคืนชีพ มีสามรูปแบบ:

  • Rebate สาธารณะระดับ VIP (ระดับ maker สูงสุด −0.5 bps ของ OKX และคล้ายกัน): มีให้เฉพาะที่ระดับ volume ที่คัดกรองบริษัทที่ชนะการแข่งขันคิวไปแล้วเท่านั้น วงจรนี้คือการเล่นซ้ำของจุดจบในตลาดหุ้น rebate มีอยู่เพื่อดึงดูด maker และ maker ที่ได้มันไปคือผู้ที่จะ quote อยู่แล้วไม่ว่าอย่างไร
  • โปรแกรม market-maker แบบเจรจาต่อรอง (Bybit โฆษณาถึง −1.5 bps): มาพร้อมเพดาน spread ขนาดขั้นต่ำ และข้อผูกพันเรื่อง uptime นี่ไม่ใช่เงินฟรี แต่เป็นสัญญาบริการที่คุณได้รับค่าตอบแทนให้เขียนออปชัน adverse-selection อย่างต่อเนื่อง — รวมถึงในช่วงข่าวสาร การล่มสลายแบบ cascade และช่วงเวลาที่ maker แบบดุลยพินิจทุกรายถอน quote ออกไปหมด rebate คือค่าจ้างสำหรับการถือ option book ที่ไม่มีใครต้องการ
  • สิ่งจูงใจแบบขับเคลื่อนด้วยสูตร (Hyperliquid จ่ายสูงสุด −0.3 bps ผูกกับสัดส่วนของคุณใน maker volume ทั้งหมด): เป็นการแข่งขันแบบเปิดเผย ซึ่งอย่างน้อยก็ตั้งราคาการแข่งขันคิวอย่างตรงไปตรงมา

การเก็บ rebate แบบ scratch บริสุทธิ์ส่วนใหญ่ไม่สามารถมีอยู่ได้ในคริปโตเพราะ maker fee ของรายย่อยเป็นบวก ที่ maker 2 bps การทำ scratch round trip จะขาดทุน 4 bps กลยุทธ์นี้มีอยู่ได้เฉพาะภายในระดับ maker ที่เป็นลบเท่านั้น และระดับเหล่านั้นก็คือปราการที่ปกป้องมันไว้

มูลค่าคิว: rebate มีมูลค่าจริง ๆ เท่าไหร่

ทุกอย่างข้างต้นถูกอัดแน่นลงในสมการการตั้งราคาเดียว มูลค่าคาดหวังของ quote ที่พักไว้คือ:

Vquote=p(q)(s2+rA(q))(1p(q))CmissV_{\text{quote}} = p(q)\left(\frac{s}{2} + r - A(q)\right) - \big(1 - p(q)\big)\,C_{\text{miss}}

โดย rr คือ rebate (หรือค่าลบของ maker fee) และ — รายละเอียดสำคัญ — ทั้งความน่าจะเป็นในการถูกจับคู่ pp และ adverse selection แบบมีเงื่อนไข AA ต่างก็เป็นฟังก์ชันของตำแหน่งคิวของคุณ qq พวกมันเคลื่อนไหวไปด้วยกันในทางที่แย่ที่สุด ออเดอร์ที่อยู่หัวคิวจะถูกจับคู่กับ flow ที่ไม่เป็นพิษเป็นภัย เช่น taker รายเล็ก, noise, การพิมพ์แบบ touch-and-bounce ออเดอร์ที่อยู่ท้ายคิวจะถูกจับคู่ก็ต่อเมื่อทั้งระดับราคาถูกกวาดหมด — กล่าวคือ เฉพาะในสถานการณ์ที่ราคากำลังทะลุผ่านคุณไปเท่านั้น ตำแหน่งคิวที่ลึกไม่เพียงแต่ถูกจับคู่น้อยลงเท่านั้น แต่ยังถูกจับคู่แย่กว่าด้วย คิวเป็นตัวกรอง adverse selection และตำแหน่งของคุณในนั้นเป็นตัวกำหนดว่าคุณอยู่ฝั่งไหนของตัวกรอง

ความน่าจะเป็นในการจับคู่และ markout แบบมีเงื่อนไขเทียบกับตำแหน่งคิว และมูลค่า quote ที่ได้

ตัวเลข: quote ที่ระดับ s/2=1s/2 = 1 bps จาก mid, rebate r=0.5r = 0.5 bps, ต้นทุนพลาดการจับคู่ Cmiss=1.5C_{\text{miss}} = 1.5 bps:

ตำแหน่งคิว pp AA (bps) VquoteV_{\text{quote}} (bps)
หัวคิว (decile แรก) 0.85 0.8 0.85(1+0.50.8)0.151.5=+0.370.85(1 + 0.5 - 0.8) - 0.15 \cdot 1.5 = +0.37
ท้ายคิว (decile สุดท้าย) 0.35 3.5 0.35(1+0.53.5)0.651.5=1.680.35(1 + 0.5 - 3.5) - 0.65 \cdot 1.5 = -1.68

Venue เดียวกัน ระดับราคาเดียวกัน บรรทัด rebate เดียวกันในตารางค่าธรรมเนียม — แต่มูลค่าคาดหวังแกว่งไปถึงสองหน่วย basis point พร้อมเครื่องหมายที่เปลี่ยนไปด้วย ขับเคลื่อนโดยตำแหน่งคิวล้วน ๆ Moallemi และ Yuan (2016), "A Model for Queue Position Valuation in a Limit Order Book" หาปริมาณผลลัพธ์ทั่วไปว่า ในเครื่องมือที่มี tick ขนาดใหญ่ มูลค่าของลำดับความสำคัญในคิวเทียบเท่ากับครึ่งหนึ่งของ spread กล่าวคือมีขนาดเดียวกันกับ edge ทางทฤษฎีทั้งหมดของกลยุทธ์ quoting การประเมินว่าคุณอยู่ตรงไหนในคิวจริง ๆ — และการ cancel/replace ส่งผลอย่างไรต่อมัน — คือกลไกของ Queue inside the wall การปรับเทียบ A(q)A(q) จากการจับคู่คำสั่งของคุณเอง แบ่งตาม decile ของคิว ณ เวลาที่ถูกจับคู่ เป็นแบบฝึกหัด markout จาก TCA toolkit

กฎเชิงปฏิบัติการได้มาโดยตรง: quote ต่อไปตราบใดที่ Vquote>CtakerV_{\text{quote}} > -C_{\text{taker}} เทียบกับทางเลือกอื่นของคุณ และข้าม spreadเมื่อมันไม่เป็นเช่นนั้น — เมื่อคิวยาว, flow เป็นพิษ, หรือสัญญาณของคุณบอกว่าราคากำลังจะจากไป "จะหยุดความอดทนเมื่อไหร่กันแน่" เป็นคำถามเชิงกลยุทธ์ — จังหวะ pegging, บันไดการยกระดับ, ตัวกระตุ้นการข้าม spread — ซึ่งได้รับการอธิบายอย่างละเอียดใน Child order execution tactics ประเด็นตรงนี้คือ input ของการตัดสินใจนั้นคือมูลค่าที่มีเงื่อนไขตามคิว ไม่ใช่ตารางค่าธรรมเนียม

Backtesting ค่าธรรมเนียมแบบขั้นบันได: บั๊ก VIP-9

บั๊กเรื่องค่าธรรมเนียมที่พบบ่อยที่สุดใน backtesting นั้นเรียบง่ายอย่างน่าอาย: config เขียนว่า maker_fee=0.0, taker_fee=0.00017 เพราะมีใครสักคนคัดลอกแถวบนสุดของตาราง VIP ของ exchange มา — หรือระดับเดิมของ desk หรือระดับที่กลยุทธ์จะอยู่ "เมื่อขยายขนาดใหญ่ขึ้น" — แต่กลยุทธ์เทรดจริงที่ระดับ 2/5 เรียกมันว่าบั๊ก VIP-9

นี่ไม่ใช่ความบิดเบือนเล็กน้อย ลองพิจารณากลยุทธ์ quoting ที่มี gross capture (spread ลบ adverse selection) 2.6 bps ต่อ round trip โดยมี maker leg สองฝั่ง:

ระดับค่าธรรมเนียม Maker fee สุทธิต่อ round trip
VIP 9 0.0 bps +2.6 bps
ระดับกลาง 1.0 bps +0.6 bps
พื้นฐาน (VIP 0) 2.0 bps −1.4 bps

กลยุทธ์ที่เหมือนกันทุกประการเป็นเครื่องพิมพ์เงินที่ระดับที่คุณ backtest แต่เป็นเครื่องย่อยกระดาษที่ระดับที่คุณเทรดจริง ไม่มีบั๊กเรื่อง alpha ให้ค้นหา ไม่มีรายละเอียดปลีกย่อยของโมเดล fill — มีเพียงสเกลาร์ตัวเดียวใน config file ที่แยก equity curve ออกจากภาพสะท้อนกลับด้านของมัน และเนื่องจาก edge ของกลยุทธ์ maker มักอยู่ที่ 1-3 bps ต่อ round trip เป็นประจำ ข้อผิดพลาดเรื่องระดับค่าธรรมเนียมจึงมีขนาดเท่ากันเสมอกับตัว edge เอง

การทำให้ถูกต้องหมายถึงการตระหนักว่าค่าธรรมเนียมของคุณเป็นตัวแปรสถานะที่ขึ้นกับเส้นทาง (path-dependent) ไม่ใช่ค่าคงที่:

from bisect import bisect_right

class FeeEngine:
    """Tiered fees driven by simulated rolling 30d volume. All rates in bps."""
    TIERS = [(0e6, 2.0, 5.0), (15e6, 1.6, 4.5), (50e6, 1.2, 4.0),
             (100e6, 0.8, 3.5), (600e6, 0.4, 2.5), (4e9, 0.0, 1.7)]
    token_discount = 0.90          # e.g. BNB payment: multiply fees by 0.9

    def __init__(self):
        self.fills = []            # (timestamp, notional)

    def _rolling_volume(self, ts):
        cutoff = ts - 30 * 86_400
        self.fills = [(t, n) for t, n in self.fills if t >= cutoff]
        return sum(n for _, n in self.fills)

    def fee(self, ts, notional, is_maker):
        vol = self._rolling_volume(ts)          # tier from PAST volume
        i = bisect_right([v for v, _, _ in self.TIERS], vol) - 1
        rate = self.TIERS[i][1] if is_maker else self.TIERS[i][2]
        self.fills.append((ts, notional))       # this fill counts toward FUTURE tiers
        return notional * rate * 1e-4 * self.token_discount

กฎห้าข้อนี้ทำให้การบันทึกบัญชีถูกต้อง:

  1. ค่าธรรมเนียมเกิดขึ้นต่อเหตุการณ์การจับคู่คำสั่ง ต่อฝั่ง บน notional ที่ถูกจับคู่แล้ว — ไม่ใช่ต่อออเดอร์และไม่ใช่ต่อ round trip ออเดอร์ที่ถูกจับคู่บางส่วนจะจ่ายค่าธรรมเนียมเฉพาะส่วนที่ถูกจับคู่เท่านั้น ปฏิสัมพันธ์ระหว่างการจับคู่บางส่วน การยกเลิก และการเกิดค่าธรรมเนียมคือ state machine เดียวกับใน Fill simulation ซึ่งให้ความน่าจะเป็นการไม่ถูกจับคู่ที่จุดคุ้มทุนที่ถูกต้องต้องการด้วยเช่นกัน
  2. ระดับขั้นเป็นตัวแปรภายใน (endogenous) volume ที่จำลองของคุณกำหนดระดับขั้นที่จำลองของคุณ การขยายขนาดกลยุทธ์เปลี่ยนค่าธรรมเนียมของมันเอง backtest ที่ขยาย notional 10 เท่าต้องปล่อยให้บันไดระดับขั้นตอบสนองไปด้วย ทั้งสองทิศทาง
  3. เริ่มการจำลองที่ระดับที่คุณจะถืออยู่จริงในวันแรก — โดยปกติคือระดับพื้นฐาน หากสมมติฐานคือ "ทำกำไรได้ที่ VIP 4" ให้รันบันไดระดับขั้นเป็นสถานการณ์สมมติและรายงานระดับจุดคุ้มทุน ระดับนั้นเป็นข้อกำหนดการเปิดตัวที่มีเงื่อนไข volume ผูกอยู่ ไม่ใช่แค่เชิงอรรถ
  4. จำลองส่วนลดที่กำหนดเป็นโทเคนในฐานะตำแหน่ง (position) หากค่าธรรมเนียมจ่ายด้วย BNB หรือได้ส่วนลดจาก staking มูลค่าตามราคาตลาดของ float นั้นต้องอยู่ใน PnL ของกลยุทธ์ ไม่ใช่ในสเปรดชีตแยกต่างหาก
  5. ใช้ cum-fee spread สำหรับการเปรียบเทียบ venue ตาม Colliard-Foucault และ Angel-Harris-Spatt: ปริมาณที่เปรียบเทียบได้ระหว่าง venue คือ s+ft(1)+ft(2)s + f_t^{(1)} + f_t^{(2)} สำหรับ taker round trip (หรือใช้ fmf_m สำหรับ maker leg) ไม่ใช่ quoted spread ดิบ ๆ venue ที่ quote กว้าง 1 bps ที่ taker 5 bps มีต้นทุนในการข้าม spread แพงกว่าถึงสี่เท่าเมื่อเทียบกับ venue ที่ quote กว้าง 4 bps ที่ taker 1 bps — และตารางจัดอันดับตาม spread บนหน้าจอจะจัดอันดับผิดทางกลับหัวกลับหาง

สรุปการตัดสินใจอีกครั้ง

เมื่อถอดเปลือกออกแล้ว การตัดสินใจ maker-taker ก็เป็นเพียงเช็คลิสต์เล็ก ๆ รู้แถวค่าธรรมเนียมจริงของคุณ — ระดับปัจจุบัน ส่วนลดปัจจุบัน ที่เป็นค่าส่วนเพิ่มไม่ใช่ค่าที่ตั้งความหวังไว้ คำนวณ cum-fee spread ต่อ venue และเลิกเชื่อหน้าจอ วัด markout แบบมีเงื่อนไขจากการจับคู่คำสั่งของคุณเอง แบ่งตามตำแหน่งคิว ณ เวลาที่ถูกจับคู่ เพราะ AA ไม่มีอยู่ในเอกสารของใครทั้งนั้น ตั้งราคาทุก quote ที่พักไว้ด้วย p(q)(s/2+rA(q))(1p(q))Cmissp(q)\,(s/2 + r - A(q)) - (1-p(q))\,C_{\text{miss}} และข้าม spread โดยไม่ต้องมีอารมณ์เมื่อมันเป็นลบ ปฏิบัติต่อ rebate เหมือนค่าจ้างสำหรับการเขียนออปชัน และถามว่าใครกำลังใช้สิทธิ์มัน และใน backtest ให้ทำให้ค่าธรรมเนียมเป็น state machine ไม่ใช่สเกลาร์

ตารางค่าธรรมเนียมบอกคุณว่าคู่สัญญาโดยเฉลี่ยจ่ายให้ venue เท่าไหร่เพื่อความรวดเร็ว markout ของคุณบอกคุณว่าตลาดจ่ายให้คุณจริง ๆ เท่าไหร่สำหรับการให้บริการนั้น มีเพียงตัวเลขเดียวเท่านั้นที่เกี่ยวกับคุณ — เทรดตามตัวเลขนั้น

ข้อจำกัดความรับผิดชอบ: ข้อมูลที่ให้ไว้ในบทความนี้มีไว้เพื่อการศึกษาและให้ข้อมูลเท่านั้น และไม่ถือเป็นคำแนะนำทางการเงิน การลงทุน หรือการเทรด การเทรดสกุลเงินดิจิทัลมีความเสี่ยงสูงที่จะขาดทุน

ผู้เขียน

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

ก้าวนำหน้าตลาด

สมัครรับจดหมายข่าวของเราเพื่อรับข้อมูลเชิงลึกการเทรดด้วย AI เฉพาะ การวิเคราะห์ตลาด และการอัปเดตแพลตฟอร์ม

เราเคารพความเป็นส่วนตัวของคุณ ยกเลิกการสมัครได้ทุกเมื่อ