मेकर-टेकर फैसला: फी टियर, रिबेट, और स्प्रेड क्रॉस करने की असली लागत
आप जो भी ऑर्डर भेजते हैं, वह किसी भी दूसरे फैसले से पहले एक बाइनरी चुनाव करता है: स्प्रेड क्रॉस करके टेकर फी चुकाना, या बुक में टिके रहकर मेकर फी देना — शायद रिबेट भी कमा लेना। इंडस्ट्री इसे एक फी ऑप्टिमाइजेशन के रूप में पेश करती है, और फी टेबल भी बिलकुल ऐसा ही दिखाते हैं: टेकर 5 bps, मेकर 2 bps, बचत 3 bps, post-only flag ऑन, हो गया। यह पेशकश एक भेस मात्र है। इसके नीचे, मेकर बनाम टेकर असल में adverse selection के बारे में एक ट्रेड है: क्या आप तुरंत भरने (immediacy) की एक ज्ञात कीमत चुकाते हैं, या मार्केट को यह ऑप्शन बेच देते हैं कि वह अपनी मर्जी से आपको भर ले — एक ऐसा ऑप्शन जिसे जानकार counterparty ठीक तभी exercise करते हैं जब फिल आपको नुकसान पहुंचाए। फी शेड्यूल इस ऑप्शन की कीमत औसत भागीदार के लिए तय करता है। आप औसत भागीदार नहीं हैं, और न ही वह फ्लो है जो आपके quote से टकराता है।
यह लेख वही गणित करता है जिसे फी टेबल छुपाता है: सही ब्रेक-ईवन, क्यों Glosten-Milgrom (1985) यह इशारा करता है कि passive fills संरचनात्मक रूप से आपके खिलाफ झुके होते हैं, असली क्रिप्टो फी टियर और टोकन डिस्काउंट संख्याओं के साथ क्या करते हैं, इक्विटी में रिबेट माइनिंग क्यों मर गई और उसका कौन-सा उत्परिवर्तित रूप क्रिप्टो में बचा है, कैसे queue position किसी रिबेट की असली वैल्यू तय करती है, और इस सबको बैकटेस्ट में कैसे मॉडल करें बिना इस धंधे की सबसे आम फी बग किए।
भोला-भाला ब्रेक-ईवन — और वह टर्म जिसे हर कोई भूल जाता है
नोटेशन: quoted स्प्रेड , टेकर फी , मेकर फी (रिबेट होने पर नेगेटिव), सभी notional के basis points में, बेंचमार्क कीमत के तौर पर mid। क्रॉस करने पर आपको आधा स्प्रेड और टेकर फी चुकानी पड़ती है; टिके रहने पर आप आधा स्प्रेड कमाते हैं और मेकर फी चुकाते हैं:
Binance USDⓈ-M futures की बेस दरें रखें — मेकर 2 bps, टेकर 5 bps — एक ऐसे perp पर जो 2 bps चौड़ा quoted है: टेकर की लागत bps, मेकर की "लागत" bps। स्पष्ट बचत: 5 bps प्रति ट्रेड, हर ट्रेड। एक ऐसी स्ट्रैटेजी के लिए जो दिन में 20 राउंड ट्रिप करती है, यह एक चेकबॉक्स से रोजाना 100 bps के edge का दावा है।
पहले इन संख्याओं में एक बात पर गौर करें: फी स्प्रेड में कोई सुधार नहीं है — liquid क्रिप्टो pairs पर यह ही लागत है। BTCUSDT perp अक्सर 1 bps से भी कम चौड़ा quote होता है जबकि एक रिटेल टेकर 5 bps चुकाता है। फी के आगे आधा स्प्रेड एक rounding error है। यह इक्विटी की सहज समझ के बिल्कुल उलट है, जहां स्प्रेड और फी एक ही परिमाण के होते हैं, और यही वजह है कि क्रिप्टो में हर भोली-भाली तुलना चिल्लाती है "हमेशा मेक करो"। यही वजह भी है कि हर पहला market-making बैकटेस्ट प्रॉफिटेबल होता है और अधिकांश पहले deployments नहीं।
भोले-भाले मेकर कॉस्ट में तीन टर्म गायब हैं:
- Non-fill risk. एक limit order ट्रेड नहीं है; यह एक ट्रेड की लॉटरी टिकट है। जब यह फिल नहीं होता, तो या तो आप move चूक जाते हैं या बाद में बदतर कीमत पर क्रॉस करते हैं।
- Adverse selection. फिल होने की शर्त पर, कीमत के आपके खिलाफ जाने की संभावना unconditional distribution के सुझाव से ज्यादा होती है। यह बुरी किस्मत नहीं है; यह एक theorem है।
- Re-quote cost. cancel/replace के साथ मार्केट का पीछा करने से आपकी queue position पीछे रीसेट हो जाती है, जो चुपचाप आपके fill distribution को ज्यादातर type-2 fills में बदल देती है।
दूसरे टर्म के पीछे पचास साल की थ्योरी है, तो इसे ठीक से करते हैं।
Glosten-Milgrom: फिल ही बुरी खबर है
Glosten और Milgrom (1985), "Bid, Ask and Transaction Prices in a Specialist Market with Heterogeneously Informed Traders" (Journal of Financial Economics 14), इस बात का सबसे साफ-सुथरा मॉडल है कि स्प्रेड आखिर मौजूद ही क्यों है। एक risk-neutral, प्रतिस्पर्धी market maker जिसकी लागत शून्य है, एक bid और एक ask quote करता है। आने वाले traders का कुछ अंश informed होते हैं — वे asset की सच्ची वैल्यू जानते हैं — और बाकी बाहरी कारणों से ट्रेड करते हैं, बराबर संभावना से खरीदते या बेचते हैं। market maker उन्हें अलग नहीं पहचान सकता। प्रतिस्पर्धा हर quote को एक conditional अपेक्षा बनने पर मजबूर करती है:
संख्याओं के साथ। मान लें बराबर संभावना से 101 या 99 है, और । अगर , तो एक buy की संभावना है (सभी informed खरीदते हैं, आधे uninformed खरीदते हैं); अगर , तो संभावना । तब
स्प्रेड है — पूरी तरह adverse-selection का मुआवजा। न कोई inventory risk, न फी, न monopoly rent, और फिर भी स्प्रेड मौजूद है, जो informed अंश और उनकी जानकारी के आकार के साथ बढ़ता है।
मेकर-टेकर फैसले के लिए जो नतीजा मायने रखता है वह है: फिल होना अपने आप में एक जानकारी है, और वह जानकारी आपके खिलाफ है। आपका टिका हुआ bid तब ज्यादा भरता है जब सच्ची वैल्यू कम होती है, क्योंकि तभी informed sellers सामने आते हैं। अपने ही फिल पर condition लगाने से आपने जो अभी खरीदा उसकी अपेक्षित वैल्यू नीचे खिसक जाती है — निर्माण से, दुर्भाग्य से नहीं। इसे मापने का मानक तरीका markout है: किसी buy के लिए जो कीमत पर भरा है, horizon पर markout है । passive fills पर aggregate markouts लगभग हर किसी के लिए लगभग हर जगह नेगेटिव होते हैं; इन्हें खुद को धोखा दिए बिना कैसे compute करें यह Implementation shortfall and TCA में समझाया गया है।
एक बराबर की व्याख्या जो बेहतर generalize होती है: एक टिका हुआ limit order मार्केट को दिया गया एक मुफ्त ऑप्शन है। counterparty — आप नहीं — exercise का क्षण चुनता है, और वे तब exercise करते हैं जब यह उनके हित में हो। मेकर रिबेट वह प्रीमियम है जो venue आपको वह ऑप्शन लिखने के बदले चुकाता है। सवाल कभी "क्या प्रीमियम पॉजिटिव है" नहीं होता, बल्कि "क्या प्रीमियम उन लोगों के लिए ऑप्शन की वैल्यू से बड़ा है जो इसे exercise कर रहे हैं" होता है।
सही ब्रेक-ईवन
मान लें इस संभावना को दर्शाता है कि आपका quote आपके decision horizon के भीतर भर जाएगा, फिल की शर्त पर conditional markout लागत bps में है, और वह अतिरिक्त लागत है जो unfilled रहने पर चुकानी पड़ती है (इंतजार के दौरान का drift जमा नई कीमत पर क्रॉस करना)। ईमानदार मेकर लागत है:
मेकिंग को टेकिंग पर तब तरजीह दी जाती है जब , जो एक साफ inequality में बदल जाता है:

वही उदाहरण, अब वास्तविक frictions के साथ: , , , तो स्पष्ट बचत 5 bps है। लें , bps, bps। दाहिना पक्ष है bps। मेकिंग फिर भी जीतती है — 0.67 bps के मार्जिन से, 5 से नहीं। अपेक्षा में: bps, जबकि टेकर लागत 6.0 है। चेकबॉक्स 0.4 bps का था, 5 का नहीं, और या में एक मामूली गलती संकेत को पलट देती है।
और बुरी बात, , , और स्वतंत्र नॉब नहीं हैं — इन्हें संयुक्त रूप से यह बात चलाती है कि आप ट्रेड क्यों कर रहे हैं। अगर आपका signal short-term flow से correlated है (हर momentum entry है), तो ठीक उन्हीं bursts के दौरान जब आप घुसना चाहते हैं, और फट पड़ता है: आप तुरंत भर जाते हैं, उसी move द्वारा जिसकी आपने भविष्यवाणी की थी, पुरानी कीमत पर, उसके गलत तरफ। फी टेबल में मेकर डिस्काउंट ठीक उन्हीं ट्रेड्स के लिए सबसे बड़ा होता है जिनके लिए हकीकत में यह सबसे ज्यादा नेगेटिव है। इसी अर्थ में मेकर-टेकर चुनाव एक फी शेड्यूल का लबादा ओढ़े adverse-selection ट्रेड है।
असली फी शेड्यूल: टियर, टोकन डिस्काउंट, और marginal-fee जाल
2026 के मध्य तक प्रमुख venues पर प्रतिनिधि शेड्यूल (base tier → top public tier; venue पेज देखें, ये बदलते रहते हैं):
| Venue | Base maker / taker | Top tier maker / taker | Discount mechanics |
|---|---|---|---|
| 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 program में −1.5 bps maker, obligations के साथ |
| OKX perp | 2 / 5 bps | करीब −0.5 / 1.5-2 bps तक | OKB holdings रिटेल बैंड को tier करते हैं |
| Hyperliquid perp | 1.5 / 4.5 bps | maker rebates −0.3 bps तक | रिबेट maker volume के share से जुड़ा; staking discounts |
| Coinbase Advanced | 40 / 60 bps | 0 / 5 bps | सिर्फ volume tiers |
| Kraken Pro | 25 / 40 bps | 0 / 10 bps | सिर्फ volume tiers |
तीन संरचनात्मक अवलोकन।
रिटेल मेकर फी लगभग हर जगह पॉजिटिव होती है। इक्विटी-शैली का यह डिफॉल्ट कि "makers को पैसा मिलता है" आप पर तब तक लागू नहीं होता जब तक आप गहरे VIP क्षेत्र में न हों या कोई साइन किया हुआ market-maker समझौता न हो। बेस टियर पर मेकर-टेकर फैसला "2 चुकाओ या 5 चुकाओ" है, "कमाओ या चुकाओ" नहीं।
टोकन डिस्काउंट एक पोजिशन है, कूपन नहीं। BNB में फी चुकाने से Binance spot फी 25% कट जाती है — बेस टियर पर प्रति साइड 2.5 bps, volume पर असली पैसा। लेकिन डिस्काउंट के लिए exchange token का inventory रखना पड़ता है, तो आपका फी ऑप्टिमाइजेशन exchange की अपनी equity-जैसी asset के beta exposure से फाइनैंस होता है। एक ऐसा desk जो फी में 7.5k बचाता है, साथ ही $200k का BNB float रखता है, उसकी पूरी तिमाही की फी बचत 10% के BNB drawdown से मिट जाती है। float को एक book position की तरह मानें: इसे size करें, hedge करें, या यह स्वीकार करें कि आपने एक डिस्काउंट खरीदने के लिए volatility बेच दी। (कई VIP ladders टोकन balance को भी एक tier शर्त बना देती हैं, जो इस पोजिशन को वैकल्पिक से संरचनात्मक बना देता है।)
Marginal fee ≠ average fee. टियर पिछले 30-दिन के trailing volume पर compute होते हैं, तो आज की फी पिछले महीने की ट्रेडिंग ने तय की — लेकिन एक boundary पार करना आपके पूरे volume की कीमत जब तक आप उस tier में हैं, फिर से तय कर देता है। यह volume की marginal लागत में एक kink पैदा करता है। मान लें $15M/30d पर अगला tier आपकी टेकर फी 5 से 4 bps कर देता है। $14M organic volume के साथ, $1M का filler churn लगभग 1\text{M} \times (s/2 + f_t) \approx \6001,\text{bps} \times $14\text{M} = $1{,}400/महीना की बचत खरीदता है — उस आखिरी मिलियन की marginal फी *नेगेटिव* है। \8M organic के साथ, वही तर्क $7M churn की मांग करता है जो $4,200 खर्च करके $800 बचाता है — एक levered दांव जो नकली volume पर असली स्प्रेड और फी जलाकर काल्पनिक डिस्काउंट कमाता है, हर महीने renewable। Tier-chasing सिर्फ तभी तर्कसंगत है जब आप किसी boundary की striking दूरी में हों, और जो desks अपनी फी को एक single scalar के रूप में मॉडल करते हैं वे इस kink को देख तक नहीं सकते।
रिबेट माइनिंग: उभार, मौत, और क्रिप्टो में पुनर्जन्म
मेकर रिबेट एक इक्विटी का आविष्कार है। Island ECN ने इसे 1997 में मौजूदा exchanges के खिलाफ liquidity bootstrap करने के लिए पेश किया, और यह इतना कारगर रहा कि इस मॉडल ने US equity market structure पर कब्जा कर लिया; फिर Reg NMS (2005) ने टेकर access fee को $0.003/share पर cap कर दिया (Rule 610), और मानक exchange धंधा बन गया: takers से ~30 mils चार्ज करो, makers को ~20-30 mils रिबेट दो, अंतर रखो।
इस अंकगणित ने कुछ समय के लिए एक शुद्ध स्ट्रैटेजी बनाई: रिबेट कैप्चर। एक penny-spread वाले large-cap के दोनों साइड पोस्ट करो। एक ऐसी राउंड ट्रिप जो scratch होती है — एक ही कीमत पर खरीदती और बेचती है — तब भी दो रिबेट इकट्ठा करती है, शून्य price PnL पर करीब आधा सेंट प्रति शेयर। penny स्प्रेड भी कैप्चर कर लो तो इसे तिगुना कर दो। 2000 के दशक के मध्य में यह एक सच्चा औद्योगिक धंधा था।
यह तीन कारणों से मरा, और हर एक एक सबक है:
- रिबेट सार्वजनिक है, तो यह queue में प्रतिस्पर्धा में बंट जाता है। एक पोस्ट किया गया रिबेट तब तक quoting को आकर्षित करता है जब तक marginal quoter की adverse selection से नेट अपेक्षित रिबेट शून्य न हो जाए। एक tick-constrained स्टॉक पर, कीमत सुधर नहीं सकती, तो प्रतिस्पर्धा time priority में होती है — और rent उसके पास जाता है जो queue के आगे पहले पहुंचता है। रिबेट ने speed arms race को फाइनैंस किया; colocation और microwave towers ने margin खा लिया। बचे हुए रिबेट कमाने वाले वही firms थे जो वैसे भी quote कर रहे होते।
- जहां tick बांधता नहीं, वहां रिबेट असली भी नहीं। Colliard और Foucault (2012), "Trading Fees and Efficiency in Limit Order Markets" (Review of Financial Studies 25), neutrality result साबित करते हैं: एक fine price grid के साथ, सिर्फ कुल exchange फी मायने रखती है — maker और taker के बीच कोई भी बंटवारा quote adjustment से पलट दिया जाता है। makers को रिबेट दो और वे तदनुसार tighter quote करते हैं, जो इसे cum-fee स्प्रेड के जरिए सीधे takers को सौंप देता है। बंटवारे का असर सिर्फ तभी है जब tick उस adjustment को रोकता है — जो आपको वापस कारण #1 पर ले जाता है। रिबेट या तो price के जरिए या queue के जरिए बिखर जाता है; अपना जहर चुनें। (Foucault, Kadan और Kandel 2013 पूरक दृष्टिकोण देते हैं: फी बंटवारा venue का maker और taker भागीदारी संतुलित करने का उपकरण है, किसी भी पक्ष को उपहार नहीं।)
- विकृतियों ने regulators को आकर्षित किया। Angel, Harris और Spatt, "Equity Trading in the 21st Century" (2011, और 2015 का अपडेट Quarterly Journal of Finance में), ने नुकसान की सूची बनाई: quoted स्प्रेड असली लागत मापना बंद कर देते हैं क्योंकि फी और रिबेट quote में नहीं होते, best-execution आंकड़े fiction बन जाते हैं, और brokers client के फिल और अपने रिबेट के बीच conflict में पड़ जाते हैं। Battalio, Corwin और Jennings (2016, Journal of Finance) ने दिखाया कि conflict काल्पनिक नहीं था: high-rebate venues को routing ने limit-order execution quality को मापनीय रूप से खराब किया। SEC एक दशक तक चक्कर काटती रही — 2018 का Transaction Fee Pilot अदालत में मर गया — और आखिरकार सितंबर 2024 में संशोधन अपनाए जो access-fee cap को 30 से 10 mils कर देते हैं (compliance तब से नवंबर 2026 तक टाल दी गई)। इक्विटी में मोटे-रिबेट का युग प्रशासनिक आदेश से समाप्त हो रहा है।
क्रिप्टो में जो बचा है वह शिक्षाप्रद है क्योंकि यह पुनरुत्थान नहीं है। तीन रूप:
- सार्वजनिक VIP रिबेट (OKX का −0.5 bps top maker tier और उसके जैसे): सिर्फ उन्हीं volume स्तरों पर उपलब्ध जो उन firms को चुनते हैं जिन्होंने पहले ही queue race जीत ली है। यह चक्रीयता इक्विटी endgame का दोहराव है: रिबेट makers को आकर्षित करने के लिए मौजूद है, और जो makers इसे कैप्चर करते हैं वे वही हैं जो वैसे भी quote करते।
- समझौताकृत market-maker programs (Bybit −1.5 bps तक विज्ञापित करता है): ये spread caps, minimum size, और uptime obligations के साथ आते हैं। यह मुफ्त पैसा नहीं है; यह एक service contract है जिसमें आपको adverse-selection ऑप्शन लगातार लिखने के लिए पैसा मिलता है — जिसमें news, cascades, और वे मिनट भी शामिल हैं जब हर discretionary maker quotes खींच चुका होता है। रिबेट वह मजदूरी है जो उस ऑप्शन book को होल्ड करने के लिए मिलती है जिसे कोई नहीं चाहता।
- Formula-driven incentives (Hyperliquid आपके total maker volume के share से जुड़ा −0.3 bps तक चुकाता है): एक स्पष्ट tournament, जो कम से कम queue race की ईमानदारी से कीमत तय करता है।
शुद्ध scratch-for-rebate क्रिप्टो में ज्यादातर मौजूद नहीं हो सकता क्योंकि रिटेल मेकर फी पॉजिटिव होती है: 2 bps maker पर, एक scratch राउंड ट्रिप 4 bps गंवाती है। यह स्ट्रैटेजी सिर्फ negative-maker tiers के भीतर मौजूद है, और वे tiers ही moat हैं।
Queue value: एक रिबेट असल में कितने का है
ऊपर की हर बात एक pricing equation में सिमट जाती है। एक टिके हुए quote की अपेक्षित वैल्यू है:
जहां रिबेट है (या मेकर फी का ऋणात्मक), और — यह बोझ उठाने वाला विवरण — fill probability और conditional adverse selection दोनों आपकी queue position के फंक्शन हैं। ये सबसे बुरे संभव तरीके से एक साथ चलते हैं। एक front-of-queue ऑर्डर benign flow के खिलाफ भरता है: छोटे takers, noise, touch-and-bounce prints। एक back-of-queue ऑर्डर सिर्फ तभी भरता है जब पूरा level swept हो जाए — यानी, सिर्फ दुनिया की उन अवस्थाओं में जब कीमत आपके आर-पार जा रही होती है। गहरी queue positions सिर्फ कम बार नहीं भरतीं; वे बदतर भरती हैं। queue एक adverse-selection filter है, और उसमें आपकी position तय करती है कि आप filter के किस तरफ हैं।

संख्याएं। Level mid से bps पर quoted, रिबेट bps, miss cost bps:
| Queue position | (bps) | (bps) | |
|---|---|---|---|
| Front decile | 0.85 | 0.8 | |
| Back decile | 0.35 | 3.5 |
वही venue, वही price level, फी शेड्यूल में वही रिबेट लाइन — अपेक्षित वैल्यू में दो-basis-point का झूला, संकेत समेत, पूरी तरह queue position द्वारा संचालित। Moallemi और Yuan (2016), "A Model for Queue Position Valuation in a Limit Order Book," सामान्य नतीजे को मात्रात्मक बनाते हैं: बड़े-tick instruments पर queue priority की वैल्यू half-spread के तुलनीय होती है, यानी, एक quoting स्ट्रैटेजी के पूरे सैद्धांतिक edge के समान परिमाण की। आप queue में वास्तव में कहां हैं इसका अनुमान लगाना — और cancel/replace उसके साथ क्या करता है — Queue inside the wall की मशीनरी है; अपने ही fills से को calibrate करना, fill समय पर queue decile के हिसाब से bucketed, TCA toolkit का एक markout अभ्यास है।
परिचालन नियम सीधे निकल आता है: जब तक आपके विकल्प के सापेक्ष है तब तक quote करें, और जब ऐसा न हो तब क्रॉस करें — जब queue लंबी हो, flow toxic हो, या आपका signal कहे कि कीमत जा रही है। "ठीक कब धैर्य छोड़ना है" एक tactics सवाल है — pegging cadence, escalation ladders, crossing triggers — जिसे Child order execution tactics में अपना अलग विवेचन मिलता है। यहां बिंदु यह है कि उस फैसले का input queue-conditional value है, फी टेबल नहीं।
Tiered fees की बैकटेस्टिंग: VIP-9 बग
बैकटेस्टिंग में सबसे आम फी बग शर्मनाक रूप से सरल है: config कहता है maker_fee=0.0, taker_fee=0.00017 क्योंकि किसी ने exchange की VIP table की सबसे ऊपरी row कॉपी कर ली — या desk का पूर्व tier, या वह tier जिसे स्ट्रैटेजी "at scale" पर होल्ड करेगी — और स्ट्रैटेजी लाइव में 2/5 पर ट्रेड करती है। इसे VIP-9 बग कहें।
यह कोई छोटी विकृति नहीं है। एक ऐसी quoting स्ट्रैटेजी लें जिसका gross capture (स्प्रेड घटा adverse selection) प्रति राउंड ट्रिप 2.6 bps है, हर में दो maker legs:
| Fee tier | Maker fee | Net per round trip |
|---|---|---|
| VIP 9 | 0.0 bps | +2.6 bps |
| Mid-tier | 1.0 bps | +0.6 bps |
| Base (VIP 0) | 2.0 bps | −1.4 bps |
समान स्ट्रैटेजी उस tier पर एक money printer है जिसे आपने बैकटेस्ट किया और उस tier पर एक shredder जिस पर आप ट्रेड करते हैं। ढूंढने के लिए कोई alpha बग नहीं है, कोई fill-model सूक्ष्मता नहीं — बस एक config फाइल में एक scalar जो equity curve को उसके दर्पण-प्रतिबिंब से अलग करता है। और चूंकि maker-स्ट्रैटेजी के edges आम तौर पर प्रति राउंड ट्रिप 1-3 bps होते हैं, fee-tier की गलतियां हमेशा edge के ही समान परिमाण की होती हैं।
इसे सही करने का मतलब है यह पहचानना कि आपकी फी एक path-dependent state variable है, एक constant नहीं:
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
पांच नियम accounting को ईमानदार बनाते हैं:
- फी प्रति fill event, प्रति साइड, filled notional पर जमा होती है — प्रति ऑर्डर नहीं और प्रति राउंड ट्रिप नहीं। एक आंशिक रूप से भरा ऑर्डर सिर्फ भरे हुए fragment पर फी चुकाता है; partial fills, cancels, और fee accrual के बीच की परस्पर क्रिया ठीक वही state machine है जो Fill simulation से है, जो सही ब्रेक-ईवन को जरूरी non-fill probabilities भी देती है।
- Tier endogenous है। आपका simulated volume आपका simulated tier तय करता है; स्ट्रैटेजी को size up करना उसकी अपनी फी बदल देता है। एक बैकटेस्ट जो notional को 10x scale करता है, उसे tier ladder को दोनों दिशाओं में जवाब देने देना चाहिए।
- Simulation उसी tier से शुरू करें जिसे आप वास्तव में पहले दिन होल्ड करेंगे — आमतौर पर base। अगर thesis "VIP 4 पर profitable" है, तो ladder को scenarios की तरह चलाएं और break-even tier रिपोर्ट करें। वह tier एक launch requirement है जिसके साथ एक volume prerequisite जुड़ा है, कोई footnote नहीं।
- Token-denominated discounts को positions की तरह मॉडल करें। अगर फी BNB में चुकाई जाती है या staking से discounted है, तो float का mark-to-market स्ट्रैटेजी PnL में आता है, किसी अलग spreadsheet में नहीं।
- Venue तुलना के लिए cum-fee spread का इस्तेमाल करें। Colliard-Foucault और Angel-Harris-Spatt का अनुसरण करते हुए: venues के बीच तुलनीय मात्रा एक taker राउंड ट्रिप के लिए है (या maker legs के लिए के साथ), कभी raw quoted स्प्रेड नहीं। एक venue जो 5 bps taker पर 1 bps चौड़ा quote करता है, उस venue से क्रॉस करने में चार गुना महंगा है जो 1 bps taker पर 4 bps चौड़ा quote करता है — और screen-spread league tables उन्हें उल्टा rank करेंगी।
फैसला, फिर से कहा गया
भेस उतार दें और मेकर-टेकर फैसला एक छोटी चेकलिस्ट है। अपनी असली फी row जानें — current tier, current discounts, marginal न कि आकांक्षी। प्रति venue cum-fee spread compute करें और screens पर भरोसा करना बंद करें। अपने ही fills से conditional markouts मापें, fill समय पर queue position के हिसाब से bucketed, क्योंकि किसी के documentation में नहीं है। हर टिके हुए quote की कीमत से तय करें और जब यह नेगेटिव हो जाए तो बिना भावुकता क्रॉस करें। रिबेट को ऑप्शन लिखने की मजदूरी की तरह मानें और पूछें कि exercise कौन कर रहा है। और बैकटेस्ट में, फी को एक state machine बनाएं, एक scalar नहीं।
फी शेड्यूल आपको बताता है कि औसत counterparty immediacy के लिए venue को क्या चुकाता है। आपके markouts आपको बताते हैं कि इसे उपलब्ध कराने के लिए मार्केट असल में आपको क्या चुकाता है। इन दोनों में से सिर्फ एक संख्या आपके बारे में है — उसी पर ट्रेड करें।
Authors
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.