การตัดสินใจ maker-taker: ระดับค่าธรรมเนียม ส่วนลดคืนเงิน (rebate) และต้นทุนที่แท้จริงของการข้าม spread
ทุกออเดอร์ที่คุณส่งออกไปต้องตัดสินใจแบบไบนารีอย่างหนึ่งก่อนสิ่งอื่นใด นั่นคือข้าม 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 ไว้ , taker fee , maker fee (เป็นค่าลบหากเป็น rebate) ทั้งหมดเป็น basis points ของ notional โดยใช้ mid เป็น benchmark price การข้าม spread ทำให้คุณเสียครึ่งหนึ่งของ spread บวกกับ taker fee ส่วนการพักออเดอร์ทำให้คุณได้ครึ่งหนึ่งของ spread และเสีย maker fee:
ลองแทนค่าอัตราพื้นฐานของ Binance USDⓈ-M futures — maker 2 bps, taker 5 bps — บน perp ที่ quote spread กว้าง 2 bps: taker มีต้นทุน bps, maker "มีต้นทุน" 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 แบบไร้เดียงสาขาดเทอมไปสามอย่าง:
- ความเสี่ยงที่ไม่ถูกจับคู่คำสั่ง (non-fill risk) limit order ไม่ใช่การเทรด แต่เป็นสลากล็อตเตอรีสำหรับการเทรด เมื่อมันไม่ถูกจับคู่ คุณจะพลาดการเคลื่อนไหวของราคา หรือไม่ก็ต้องข้าม spread ในภายหลังที่ราคาแย่กว่าเดิม
- Adverse selection เมื่อพิจารณาเงื่อนไขว่าออเดอร์ถูกจับคู่แล้ว ราคามีแนวโน้มจะเคลื่อนไหวสวนทางกับคุณมากกว่าที่การกระจายตัวแบบไม่มีเงื่อนไขจะบ่งชี้ นี่ไม่ใช่โชคร้าย แต่เป็นทฤษฎีบท
- ต้นทุนการ 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 เทรดเดอร์ที่เข้ามาส่วนหนึ่งในสัดส่วน เป็นผู้มีข้อมูล (informed) — พวกเขารู้มูลค่าที่แท้จริงของสินทรัพย์ — ส่วนที่เหลือเทรดด้วยเหตุผลภายนอก โดยซื้อหรือขายด้วยความน่าจะเป็นเท่ากัน market maker ไม่สามารถแยกแยะพวกเขาออกจากกันได้ การแข่งขันบังคับให้แต่ละ quote ต้องเป็นค่าคาดหวังแบบมีเงื่อนไข (conditional):
ลองคำนวณตัวเลข สมมติให้ เท่ากับ 101 หรือ 99 ด้วยความน่าจะเป็นเท่ากัน และ ถ้า คำสั่งซื้อจะเข้ามาด้วยความน่าจะเป็น (ผู้มีข้อมูลทั้งหมดซื้อ ครึ่งหนึ่งของผู้ไม่มีข้อมูลซื้อ) ถ้า ความน่าจะเป็นคือ ดังนั้น
spread เท่ากับ — เป็นค่าตอบแทนสำหรับ adverse selection ล้วน ๆ ไม่มีความเสี่ยงจาก inventory ไม่มีค่าธรรมเนียม ไม่มีค่าเช่าจากการผูกขาด (monopoly rent) และ spread ก็ยังคงมีอยู่ โดยแปรผันตามสัดส่วนผู้มีข้อมูลและขนาดของสิ่งที่พวกเขารู้
ผลลัพธ์ที่สำคัญต่อการตัดสินใจ maker-taker คือ การถูกจับคู่คำสั่งเองก็คือข้อมูล และข้อมูลนั้นเป็นปฏิปักษ์ต่อคุณ bid ที่คุณพักไว้จะซื้อได้บ่อยขึ้นเมื่อมูลค่าที่แท้จริงต่ำ เพราะนั่นคือช่วงเวลาที่ผู้ขายที่มีข้อมูลปรากฏตัวขึ้น การพิจารณาเงื่อนไขจากการถูกจับคู่คำสั่งของตัวเองจะดึงค่าคาดหวังของสิ่งที่คุณเพิ่งซื้อไปให้ต่ำลง — โดยธรรมชาติของโครงสร้าง ไม่ใช่เพราะโชคร้าย วิธีมาตรฐานในการวัดสิ่งนี้คือ markout: สำหรับการซื้อที่ถูกจับคู่ที่ราคา markout ที่ horizon คือ markout รวมของการจับคู่แบบ passive เป็นค่าลบสำหรับเกือบทุกคนในเกือบทุกที่ วิธีคำนวณโดยไม่หลอกตัวเองมีอธิบายไว้ใน Implementation shortfall and TCA
กรอบคิดที่เทียบเท่ากันและสามารถขยายความได้ดีกว่าคือ limit order ที่พักไว้เป็นออปชันฟรีที่มอบให้กับตลาด คู่สัญญา — ไม่ใช่คุณ — เป็นผู้เลือกจังหวะในการใช้สิทธิ์ และพวกเขาจะใช้สิทธิ์เมื่อมันเป็นประโยชน์ต่อพวกเขา maker rebate คือพรีเมียมที่ venue จ่ายให้คุณสำหรับการเขียนออปชันนั้น คำถามไม่เคยเป็น "พรีเมียมเป็นบวกหรือไม่" แต่เป็น "พรีเมียมมากกว่ามูลค่าของออปชันสำหรับผู้ที่ใช้สิทธิ์หรือไม่"
จุดคุ้มทุนที่ถูกต้อง
ให้ เป็นความน่าจะเป็นที่ quote ของคุณจะถูกจับคู่ภายใน horizon การตัดสินใจของคุณ เป็นต้นทุน markout แบบมีเงื่อนไขในหน่วย bps และ เป็นต้นทุนเพิ่มเติมที่คุณจ่ายเมื่อไม่ถูกจับคู่ (การเคลื่อนไหวของราคาระหว่างที่คุณรอบวกกับการข้าม spread ที่ราคาใหม่) ต้นทุน maker ที่ถูกต้องคือ:
การ make จะดีกว่าการ take เมื่อ ซึ่งจัดรูปใหม่ได้เป็นอสมการที่ชัดเจน:

ตัวอย่างเดิม แต่ครั้งนี้ใส่ friction ที่สมจริง: , , ดังนั้นส่วนต่างที่ดูเหมือนประหยัดได้คือ 5 bps สมมติ , bps, bps ด้านขวาของอสมการคือ bps การ make ยังคงชนะอยู่ — แต่ด้วยมาร์จิ้นเพียง 0.67 bps ไม่ใช่ 5 ในเชิงค่าคาดหวัง: bps เทียบกับต้นทุน taker ที่ 6.0 การติ๊กช่องนั้นมีมูลค่าเพียง 0.4 bps ไม่ใช่ 5 และความคลาดเคลื่อนเล็กน้อยใน หรือ ก็สามารถพลิกเครื่องหมายได้
ที่แย่กว่านั้นคือ , และ ไม่ใช่ตัวแปรอิสระต่อกัน — พวกมันถูกขับเคลื่อนร่วมกันโดย เหตุผล ที่คุณเทรด หากสัญญาณของคุณมีความสัมพันธ์กับ flow ระยะสั้น (การเข้า momentum ทุกครั้งเป็นเช่นนี้) แล้วในช่วงเวลาที่คุณต้องการเข้าเทรดพอดี และ จะพุ่งสูงขึ้น คุณจะถูกจับคู่คำสั่งทันที ด้วยการเคลื่อนไหวที่คุณคาดการณ์ไว้ ที่ราคาเก่า อยู่ผิดฝั่งของมัน ส่วนลด 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 ที่จ่ายค่าธรรมเนียม 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 \6001,\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 นี่คือธุรกิจอุตสาหกรรมที่แท้จริง
มันตายลงด้วยสาเหตุสามประการ และแต่ละอย่างก็เป็นบทเรียน:
- Rebate เป็นข้อมูลสาธารณะ จึงถูกแข่งขันจนหมดไปในคิว rebate ที่ประกาศไว้จะดึงดูดการ quote จนกว่าค่าคาดหวังของ rebate สุทธิหลังหัก adverse selection ของผู้ quote รายสุดท้ายจะเป็นศูนย์ ในหุ้นที่ถูกจำกัดด้วย tick ราคาไม่สามารถดีขึ้นได้ ดังนั้นการแข่งขันจึงเกิดขึ้นใน time priority — และค่าเช่าก็ไหลไปหาผู้ที่ไปถึงหัวคิวก่อน rebate เป็นเงินทุนให้กับการแข่งขันด้านความเร็ว colocation และหอไมโครเวฟกินมาร์จิ้นไปหมด ผู้ที่ยังคงเก็บ rebate ได้อยู่คือบริษัทที่จะ quote อยู่แล้วไม่ว่าอย่างไรก็ตาม
- ในที่ที่ 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 ไม่ใช่ของขวัญให้ฝั่งใดฝั่งหนึ่ง)
- ความบิดเบือนดึงดูดหน่วยงานกำกับดูแล 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 ที่พักไว้คือ:
โดย คือ rebate (หรือค่าลบของ maker fee) และ — รายละเอียดสำคัญ — ทั้งความน่าจะเป็นในการถูกจับคู่ และ adverse selection แบบมีเงื่อนไข ต่างก็เป็นฟังก์ชันของตำแหน่งคิวของคุณ พวกมันเคลื่อนไหวไปด้วยกันในทางที่แย่ที่สุด ออเดอร์ที่อยู่หัวคิวจะถูกจับคู่กับ flow ที่ไม่เป็นพิษเป็นภัย เช่น taker รายเล็ก, noise, การพิมพ์แบบ touch-and-bounce ออเดอร์ที่อยู่ท้ายคิวจะถูกจับคู่ก็ต่อเมื่อทั้งระดับราคาถูกกวาดหมด — กล่าวคือ เฉพาะในสถานการณ์ที่ราคากำลังทะลุผ่านคุณไปเท่านั้น ตำแหน่งคิวที่ลึกไม่เพียงแต่ถูกจับคู่น้อยลงเท่านั้น แต่ยังถูกจับคู่แย่กว่าด้วย คิวเป็นตัวกรอง adverse selection และตำแหน่งของคุณในนั้นเป็นตัวกำหนดว่าคุณอยู่ฝั่งไหนของตัวกรอง

ตัวเลข: quote ที่ระดับ bps จาก mid, rebate bps, ต้นทุนพลาดการจับคู่ bps:
| ตำแหน่งคิว | (bps) | (bps) | |
|---|---|---|---|
| หัวคิว (decile แรก) | 0.85 | 0.8 | |
| ท้ายคิว (decile สุดท้าย) | 0.35 | 3.5 |
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 การปรับเทียบ จากการจับคู่คำสั่งของคุณเอง แบ่งตาม decile ของคิว ณ เวลาที่ถูกจับคู่ เป็นแบบฝึกหัด markout จาก TCA toolkit
กฎเชิงปฏิบัติการได้มาโดยตรง: quote ต่อไปตราบใดที่ เทียบกับทางเลือกอื่นของคุณ และข้าม 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
กฎห้าข้อนี้ทำให้การบันทึกบัญชีถูกต้อง:
- ค่าธรรมเนียมเกิดขึ้นต่อเหตุการณ์การจับคู่คำสั่ง ต่อฝั่ง บน notional ที่ถูกจับคู่แล้ว — ไม่ใช่ต่อออเดอร์และไม่ใช่ต่อ round trip ออเดอร์ที่ถูกจับคู่บางส่วนจะจ่ายค่าธรรมเนียมเฉพาะส่วนที่ถูกจับคู่เท่านั้น ปฏิสัมพันธ์ระหว่างการจับคู่บางส่วน การยกเลิก และการเกิดค่าธรรมเนียมคือ state machine เดียวกับใน Fill simulation ซึ่งให้ความน่าจะเป็นการไม่ถูกจับคู่ที่จุดคุ้มทุนที่ถูกต้องต้องการด้วยเช่นกัน
- ระดับขั้นเป็นตัวแปรภายใน (endogenous) volume ที่จำลองของคุณกำหนดระดับขั้นที่จำลองของคุณ การขยายขนาดกลยุทธ์เปลี่ยนค่าธรรมเนียมของมันเอง backtest ที่ขยาย notional 10 เท่าต้องปล่อยให้บันไดระดับขั้นตอบสนองไปด้วย ทั้งสองทิศทาง
- เริ่มการจำลองที่ระดับที่คุณจะถืออยู่จริงในวันแรก — โดยปกติคือระดับพื้นฐาน หากสมมติฐานคือ "ทำกำไรได้ที่ VIP 4" ให้รันบันไดระดับขั้นเป็นสถานการณ์สมมติและรายงานระดับจุดคุ้มทุน ระดับนั้นเป็นข้อกำหนดการเปิดตัวที่มีเงื่อนไข volume ผูกอยู่ ไม่ใช่แค่เชิงอรรถ
- จำลองส่วนลดที่กำหนดเป็นโทเคนในฐานะตำแหน่ง (position) หากค่าธรรมเนียมจ่ายด้วย BNB หรือได้ส่วนลดจาก staking มูลค่าตามราคาตลาดของ float นั้นต้องอยู่ใน PnL ของกลยุทธ์ ไม่ใช่ในสเปรดชีตแยกต่างหาก
- ใช้ cum-fee spread สำหรับการเปรียบเทียบ venue ตาม Colliard-Foucault และ Angel-Harris-Spatt: ปริมาณที่เปรียบเทียบได้ระหว่าง venue คือ สำหรับ taker round trip (หรือใช้ สำหรับ 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 แบบมีเงื่อนไขจากการจับคู่คำสั่งของคุณเอง แบ่งตามตำแหน่งคิว ณ เวลาที่ถูกจับคู่ เพราะ ไม่มีอยู่ในเอกสารของใครทั้งนั้น ตั้งราคาทุก quote ที่พักไว้ด้วย และข้าม spread โดยไม่ต้องมีอารมณ์เมื่อมันเป็นลบ ปฏิบัติต่อ rebate เหมือนค่าจ้างสำหรับการเขียนออปชัน และถามว่าใครกำลังใช้สิทธิ์มัน และใน backtest ให้ทำให้ค่าธรรมเนียมเป็น state machine ไม่ใช่สเกลาร์
ตารางค่าธรรมเนียมบอกคุณว่าคู่สัญญาโดยเฉลี่ยจ่ายให้ venue เท่าไหร่เพื่อความรวดเร็ว markout ของคุณบอกคุณว่าตลาดจ่ายให้คุณจริง ๆ เท่าไหร่สำหรับการให้บริการนั้น มีเพียงตัวเลขเดียวเท่านั้นที่เกี่ยวกับคุณ — เทรดตามตัวเลขนั้น
ผู้เขียน
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.