मार्केट मेकर्स पैसे क्यों गंवाते हैं: Adverse Selection
मार्केट मेकर्स को होने वाले नुकसान में adverse selection मुख्य कारण है। जानिए markout कर्व्स, इन्वेंट्री जोखिम और कतार की स्थिति की लागत के माध्यम से इसे कैसे मापा जाता है।
मार्केट मेकर्स adverse selection के कारण पैसे गंवाते हैं: जो ट्रेडर किसी offer को स्वीकार करता है, वह अक्सर पहले से ही जानता है कि वह offer पुराना (stale) हो चुका है। हर fill की शुरुआत एक छोटे क्रेडिट के साथ होती है, जो लगभग spread का आधा होता है, और उसके बाद के सेकंड यह तय करते हैं कि उस क्रेडिट का कितना हिस्सा बचता है। इसे मापने का टूल markout है, जो fill के बाद एक निश्चित समय पर कीमत में होने वाला हस्ताक्षरित (signed) बदलाव है। नीचे दिए गए पैनल ट्रेड और कोट प्रिंट्स से वास्तविक markout कर्व बनाते हैं। मार्केट मेकर्स पैसे कैसे कमाते हैं पर हमारा सहयोगी लेख उसी लेजर के राजस्व पक्ष को कवर करता है।
ट्रेडिंग में adverse selection क्या है?
एक मार्केट मेकर एक साथ दो कीमतें पोस्ट करता है: खरीदने के लिए bid और बेचने के लिए offer, प्रत्येक एक निर्धारित मात्रा के लिए। उनके बीच का अंतर bid ask spread है, और यह व्यवसाय पूरी तरह से अंकगणित है। bid पर खरीदें, offer पर बेचें, और दिन में हजारों बार इसे दोहराएं; औसत राउंड ट्रिप में spread के करीब कुछ न कुछ प्राप्त होता है।
यह अंकगणित मानता है कि दोनों पक्ष संतुलन में आते हैं। ऐसा नहीं होता है। एक resting quote एक ऐसा विकल्प है जिसे कोई भी अपनी पसंद के समय पर exercise कर सकता है, और जो ट्रेडर्स सबसे अधिक ध्यान देते हैं, वे सबसे अच्छे क्षणों को चुनते हैं। एक बड़ा parent order चलाने वाला फंड तब तक खरीदता रहता है जब तक offer सस्ता बना रहता है। एक सिस्टम जिसने पहले ही किसी संबंधित इंस्ट्रूमेंट में हलचल देख ली है, वह उस पक्ष को चुनता है जिसने अभी तक अपनी कीमत को रीप्राइस नहीं किया है।
Adverse selection उस मिश्रण में झुकाव का नाम है: मेकर को मिलने वाली fills उन ट्रेडर्स की ओर अधिक होती है जो उन्हें सबसे ज्यादा चाहते थे। इसका लक्षण उस spread के बीच का अंतर है जो मेकर कोट करता है और जो वह वास्तव में रखता है।
मार्केट मेकिंग में markout क्या है?
Markout एक सवाल का जवाब देता है, जो हर fill के बाद पूछा जाता है: मेरे पक्ष से मापे जाने पर, कुछ सेकंड बाद कीमत क्या थी? मान लीजिए कि एक मेकर 50.02 डॉलर पर 100 शेयर बेचता है जबकि midpoint 50.00 डॉलर पर है। वह fill प्रति शेयर दो सेंट के क्रेडिट के साथ शुरू होती है, जिसे डेस्क यूनिट्स में 20 mils कहा जाता है, जहाँ एक mil एक सेंट का दसवां हिस्सा है। यदि 60 सेकंड बाद midpoint 50.04 डॉलर पर चला गया है, तो 60 सेकंड का markout माइनस 20 mils है। शुरुआती क्रेडिट खत्म हो गया है, और उसके साथ उतनी ही राशि और चली गई है।
इसे एक विंडो में हर fill पर औसत करें और इसे horizon के मुकाबले प्लॉट करें, तो परिणाम एक markout कर्व होगा। नीचे दिया गया पैनल गुरुवार, 14 मई, 2026 को तीन घंटे की दोपहर की विंडो के लिए AAPL के लिए एक कर्व बनाता है। प्रत्येक प्रिंट को उस सेकंड के midpoint के मुकाबले साइन किया जाता है जिसमें वह प्रिंट हुआ था: midpoint से ऊपर का प्रिंट एक taker की खरीदारी माना जाता है, जो मेकर को sell साइड पर रखता है।
हर आंकड़े के पीछे का पूरा SQL
WITH
qs AS (
SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
avg((toFloat64(bid_price) + toFloat64(ask_price)) / 2) AS mid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-05-14 14:00:00'
AND sip_timestamp < '2026-05-14 17:06:00'
AND bid_price > 0 AND ask_price > bid_price
GROUP BY ts
),
fills AS (
SELECT t.ts AS ts, t.px AS px, t.shares AS shares, q.mid AS mid_at_fill,
if(t.px > q.mid, 1, -1) AS taker_side
FROM (
SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
toFloat64(price) AS px, toUInt64(size) AS shares
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-05-14 14:00:00'
AND sip_timestamp < '2026-05-14 17:00:00'
AND size > 0
) AS t
INNER JOIN qs AS q ON q.ts = t.ts
WHERE t.px != q.mid AND abs(t.px / q.mid - 1) < 0.02
)
SELECT
concat('+', toString(e.secs), 's') AS horizon,
round(1000 * avg(e.taker_side * (e.px - e.mid_at_fill)), 2) AS edge_at_fill_mils,
round(1000 * avg(e.taker_side * (e.px - f.mid)), 2) AS edge_after_mils
FROM (
SELECT toUInt32(ts + secs) AS future_ts, secs, px, mid_at_fill, taker_side
FROM (SELECT *, arrayJoin([1, 5, 15, 30, 60, 300]) AS secs FROM fills)
) AS e
INNER JOIN qs AS f ON f.ts = e.future_ts
GROUP BY e.secs
ORDER BY e.secsपहली सीरीज fill के समय का क्रेडिट है, जो प्रिंट और midpoint के बीच की दूरी है, जिसका औसत 19.66 mils प्रति शेयर है। दूसरी सीरीज वह है जो उन fills का मूल्य तब होता है जब midpoint को हिलने का समय मिल जाता है: एक सेकंड बाद 20.5 mils, और पांच मिनट बाद 9.81 mils। किसी भी horizon पर दोनों सीरीज के बीच की दूरी markout है, और यह उस spread से आता है जिसे मेकर ने कोट किया था।
एक कर्व जो तेजी से गिरता है और फिर स्थिर हो जाता है, वह एक ऐसे मेकर को दर्शाता है जो तत्काल रीप्राइसिंग के लिए भुगतान कर रहा है और बाकी हिस्सा रख रहा है। एक कर्व जो हर horizon पर एक ही दिशा में ढलान बनाए रखता है, उन fills को दर्शाता है जो ऐसी कीमत के गलत पक्ष पर आती हैं जो लगातार आगे बढ़ रही है। पहला आकार व्यवसाय करने की लागत है। दूसरा एक ऐसा कोट है जिसे बदलने की आवश्यकता है।
कौन सी fills toxic flow हैं?
यहाँ 'toxic' शब्द एक तकनीकी भूमिका निभा रहा है। फ्लो तब toxic होता है जब उसका markout कर्व एक बड़े सैंपल पर, हर horizon पर, उसे भरने वाले मेकर के खिलाफ ढलान बनाता है। डेस्क fills को हर उस लेबल के आधार पर छांटते हैं जिसे वे देख सकते हैं: प्रिंट साइज, वेन्यू, ऑर्डर टाइप, काउंटरपार्टी आइडेंटिफायर। साइज वह लेबल है जो पब्लिक टेप में होता है।
हर आंकड़े के पीछे का पूरा SQL
WITH
qs AS (
SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
avg((toFloat64(bid_price) + toFloat64(ask_price)) / 2) AS mid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-05-14 14:00:00'
AND sip_timestamp < '2026-05-14 17:06:00'
AND bid_price > 0 AND ask_price > bid_price
GROUP BY ts
),
fills AS (
SELECT t.ts AS ts, t.px AS px, t.shares AS shares, q.mid AS mid_at_fill,
if(t.px > q.mid, 1, -1) AS taker_side
FROM (
SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
toFloat64(price) AS px, toUInt64(size) AS shares
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-05-14 14:00:00'
AND sip_timestamp < '2026-05-14 17:00:00'
AND size > 0
) AS t
INNER JOIN qs AS q ON q.ts = t.ts
WHERE t.px != q.mid AND abs(t.px / q.mid - 1) < 0.02
)
SELECT
multiIf(s.shares < 100, 'under 100 shares',
s.shares < 500, '100 to 499',
s.shares < 1000, '500 to 999',
'1,000 or more') AS size_bucket,
count() AS fills_count,
round(1000 * avg(s.taker_side * (s.px - s.mid_at_fill)), 2) AS edge_at_fill_mils,
round(1000 * avg(s.taker_side * (s.px - f.mid)), 2) AS edge_after_60s_mils
FROM (SELECT *, toUInt32(ts + 60) AS future_ts FROM fills) AS s
INNER JOIN qs AS f ON f.ts = s.future_ts
GROUP BY size_bucket
ORDER BY min(s.shares)100 शेयरों से कम की fills 19.47 mils प्रति शेयर क्रेडिट के साथ खुलती हैं और एक मिनट बाद 15.22 mils की होती हैं। 1,000 शेयरों और उससे अधिक के प्रिंट 36.26 mils के साथ खुलते हैं और उसी horizon पर 21.34 mils के होते हैं। एक ही इंस्ट्रूमेंट, वही तीन घंटे, प्रति शेयर अलग-अलग अर्थशास्त्र। सबसे बड़े ऑर्डर्स अक्सर पब्लिक कतार से पूरी तरह बच जाते हैं, जिसे block trade के जरिए व्यवस्थित किया जाता है।
इन्वेंट्री जोखिम, वह पोजीशन जिसे समय पर हेज नहीं किया जा सकता
Markout horizon एक घड़ी भी है। एक मेकर जो bid पर 5,000 शेयर खरीदता है, उसके पास 5,000 शेयर होते हैं, और जब तक पोजीशन हेज या बेची नहीं जाती, तब तक वह कीमत में होने वाले किसी भी बदलाव के प्रति उजागर रहती है। हेजिंग शायद ही कभी तत्काल होती है: एक सिंगल स्टॉक पोजीशन को संबंधित ETF या options पोजीशन के साथ ऑफसेट किया जा सकता है, और उनमें से प्रत्येक को क्रॉस करने के लिए अपना spread होता है। इन्वेंट्री जोखिम उस चाल का आकार है जो उस विंडो के भीतर फिट बैठता है, और इसे किसी भी नाम के लिए उसी तरह मापा जाता है। कीमत आमतौर पर अगले मिनट और अगले घंटे में कितनी दूर तक जाती है?
हर आंकड़े के पीछे का पूरा SQL
WITH
bars AS (
SELECT ticker, window_start,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
toFloat64(close) AS px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'NVDA')
AND window_start >= '2026-05-01 00:00:00'
AND window_start < '2026-06-01 00:00:00'
AND transactions >= 50
AND close > 0
),
starts AS (
SELECT ticker, et_date, px, mins,
window_start + toIntervalMinute(mins) AS future_start
FROM (SELECT *, arrayJoin([1, 2, 5, 15, 30, 60]) AS mins FROM bars)
)
SELECT
concat(toString(s.mins), ' min') AS hold_horizon,
round(avgIf(abs(f.px / s.px - 1) * 10000, s.ticker = 'SPY'), 1) AS spy_drift_bps,
round(avgIf(abs(f.px / s.px - 1) * 10000, s.ticker = 'NVDA'), 1) AS nvda_drift_bps
FROM starts AS s
INNER JOIN bars AS f
ON f.ticker = s.ticker AND f.et_date = s.et_date AND f.window_start = s.future_start
GROUP BY s.mins
HAVING countIf(s.ticker = 'SPY') > 0 AND countIf(s.ticker = 'NVDA') > 0
ORDER BY s.minsमई 2026 के दौरान, SPY में एक मिनट में औसत पूर्ण चाल 1.9 basis points मापी गई, जहाँ एक basis point एक प्रतिशत का सौवां हिस्सा है। NVDA ने उसी मिनट में 5.5 मापा। घड़ी को एक घंटे तक खींचें तो ये दोनों आंकड़े 14.1 और 40.4 हो जाते हैं। एक मेकर जो एक मिनट के भीतर पोजीशन को फ्लैट कर सकता है, वह पहले जोड़े के साथ रहता है। एक मेकर जो एक घंटे तक होल्ड करता है, वह दूसरे जोड़े के साथ रहता है, और fill पर एकत्र किया गया क्रेडिट दोनों ही स्थितियों में समान होता है।
मार्केट मेकर्स कतार के अंत में पैसे क्यों गंवाते हैं
एक्सचेंज resting ऑर्डर्स को उस कीमत पर मैच करते हैं जिस पर वे पहुंचे थे: पहले कीमत, फिर समय। bid पर 40,000 शेयरों की कतार के अंत में एक ऑर्डर अपने आगे के 40,000 शेयरों के क्लियर होने का इंतजार करता है, और estimating queue position अपने आप में एक अनुशासन है।
अजीब बात यह है कि क्लियरिंग का क्या मतलब है। कतार दो तरह से खाली होती है। सेलर्स तब तक bid को हिट करते रहते हैं जब तक कि लेवल खत्म न हो जाए, या कीमत लेवल से नीचे चली जाए और उसे पीछे छोड़ दे। सामने के करीब का ऑर्डर दोनों में भाग लेता है। अंत में एक ऑर्डर ज्यादातर दूसरे रास्ते पर भरता है, उस क्षण जब लेवल पुरानी कीमत बनने वाला होता है। दो मेकर्स एक ही इंस्ट्रूमेंट को एक ही कीमत पर ट्रेड कर सकते हैं और उसका अलग-अलग हिस्सा रख सकते हैं। कतार का स्लॉट कभी भी कोटेड spread में दिखाई नहीं देता, क्योंकि दोनों मेकर्स ने एक ही कीमत कोट की थी। यह markout कर्व में दिखाई देता है।
कोट को चौड़ा करना मुफ्त समाधान क्यों नहीं है
एक खराब markout कर्व का स्पष्ट जवाब कोट को चौड़ा करना है। एक चौड़ा कोट प्रति fill अधिक कमाता है और कम fills तक पहुंचता है। उस ट्रेड के दोनों आधे हिस्से उसी दिन के प्रिंट्स में बैठते हैं, जो इस आधार पर छांटे जाते हैं कि प्रत्येक प्रिंट midpoint से कितनी दूर उतरा।
हर आंकड़े के पीछे का पूरा SQL
WITH
qs AS (
SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
avg((toFloat64(bid_price) + toFloat64(ask_price)) / 2) AS mid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-05-14 14:00:00'
AND sip_timestamp < '2026-05-14 17:06:00'
AND bid_price > 0 AND ask_price > bid_price
GROUP BY ts
),
fills AS (
SELECT t.ts AS ts, t.px AS px, t.shares AS shares, q.mid AS mid_at_fill,
if(t.px > q.mid, 1, -1) AS taker_side
FROM (
SELECT toUnixTimestamp(toDateTime(sip_timestamp)) AS ts,
toFloat64(price) AS px, toUInt64(size) AS shares
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-05-14 14:00:00'
AND sip_timestamp < '2026-05-14 17:00:00'
AND size > 0
) AS t
INNER JOIN qs AS q ON q.ts = t.ts
WHERE t.px != q.mid AND abs(t.px / q.mid - 1) < 0.02
)
SELECT
multiIf(s.cents <= 0.5, '0.5 cents or less',
s.cents <= 1.0, '0.5 to 1 cent',
s.cents <= 2.0, '1 to 2 cents',
'over 2 cents') AS distance_from_mid,
round(100 * sum(s.shares) / sum(sum(s.shares)) OVER (), 2) AS share_of_volume_pct,
round(1000 * avg(s.taker_side * (s.px - f.mid)), 2) AS edge_after_60s_mils
FROM (
SELECT *, toUInt32(ts + 60) AS future_ts, abs(px - mid_at_fill) * 100 AS cents
FROM fills
) AS s
INNER JOIN qs AS f ON f.ts = s.future_ts
GROUP BY distance_from_mid
ORDER BY min(s.cents)Midpoint के आधे सेंट के भीतर के प्रिंट्स ने विंडो में शेयरों का 27.58 प्रतिशत हिस्सा लिया, जो एक मिनट बाद 0.95 mils प्रति शेयर के बराबर था। दो सेंट से अधिक दूर उतरने वाले प्रिंट्स ने 33.19 प्रतिशत शेयर लिए, जो 46.86 mils पर थे। Midpoint से दूर पोस्ट किया गया कोट दिन के वॉल्यूम के एक छोटे हिस्से तक पहुंचता है।
Fill रेट पीछे हटने की पहली लागत है। एक्सचेंज रिबेट दूसरी लागत है, क्योंकि कई वेन्यू मेकर को प्रति शेयर fill के लिए भुगतान करते हैं और वह आय कोट की चौड़ाई के बजाय शेयरों के साथ बढ़ती है। वॉल्यूम टियर जो रिबेट दर निर्धारित करते हैं, उनकी गणना मासिक की जाती है, इसलिए एक शांत महीना अगले महीने की हर fill को रीप्राइस कर देता है। कतार के स्लॉट को छोड़ना अंतिम लागत है, जो बाहर निकलने के रास्ते पर चुकाई जाती है और अंदर आने पर कतार के अंत में फिर से चुकाई जाती है। हर मेकर इस कर्व पर कहीं न कहीं बैठता है, और जो अपने markout को सबसे सटीक रूप से मापते हैं, वे touch के सबसे करीब बैठ सकते हैं और फिर भी क्रेडिट रख सकते हैं। वह माप ही वह बढ़त है जिसका largest market makers बचाव करते हैं।
FAQ
क्या मार्केट मेकर्स व्यक्तिगत ट्रेडों पर पैसे गंवाते हैं?
नियमित रूप से। एक मेकिंग बुक छोटे लाभ और छोटे नुकसान का वितरण है, और नुकसान वाली fills कीमत बढ़ने से ठीक पहले के क्षणों में क्लस्टर होती हैं। यह व्यवसाय लाखों fills के औसत पर टिका है।
ट्रेडिंग में markout क्या है?
Markout एक fill के बाद एक निश्चित horizon पर बाजार मूल्य में बदलाव है, जिसे एक पक्ष के दृष्टिकोण से साइन किया गया है, जहाँ एक सकारात्मक संख्या का मतलब है कि उस पक्ष को लाभ हुआ। इक्विटी डेस्क markout को mils प्रति शेयर में और options डेस्क ticks प्रति कॉन्ट्रैक्ट में कोट करते हैं।
Toxic order flow का क्या मतलब है?
यह उस ऑर्डर फ्लो का वर्णन करता है जिसका markout कर्व उसे भरने वाले मार्केट मेकर के खिलाफ लगातार ढलान बनाता है, जिसका अर्थ है कि प्रत्येक fill के बाद कीमत दूर होती जाती है। यह लेबल ऑर्डर्स की एक स्ट्रीम का सांख्यिकीय गुण है, और यह किसी एक ट्रेडर के बारे में कोई निर्णय नहीं लेता है।
मार्केट मेकर्स अपने कोट्स को हटाने के बजाय स्प्रेड को चौड़ा क्यों करते हैं?
एक चौड़ा कोट मेकर को ऐसी कीमत पर बाजार में बनाए रखता है जो खराब markout कर्व के लिए भुगतान करती है। कोट को हटाने से कुछ नहीं मिलता और उसके साथ कतार की पोजीशन भी चली जाती है। डेस्क दोनों काम करते हैं, और चुनाव इस बात पर निर्भर करता है कि कोट के कब तक पुराना (stale) रहने की उम्मीद है।
Adverse selection को कैसे मापा जाता है?
Markout के साथ। प्रत्येक fill को उस पक्ष द्वारा साइन करें जिस पर मेकर था, फिर उसके बाद निश्चित horizons पर midpoint में बदलाव का औसत निकालें। Fill पर क्रेडिट और प्रत्येक horizon पर मूल्य के बीच का अंतर adverse selection लागत है, जो spread के समान इकाइयों में होती है।
ये आंकड़े कैसे तैयार किए गए
प्रत्येक AAPL पैनल दो सार्वजनिक रिकॉर्ड पढ़ता है: ट्रेड टेप और कोट टेप। 14 मई, 2026 को 14:00 और 17:00 UTC के बीच के प्रत्येक प्रिंट को उस सेकंड के औसत national best bid and offer midpoint से मिलाया जाता है जिसमें वह प्रिंट हुआ था, फिर उसे साइन किया जाता है। उस midpoint से ऊपर का प्रिंट taker की खरीदारी माना जाता है, जो मेकर को sell साइड पर रखता है। Midpoint पर सटीक प्रिंट्स का कोई पक्ष नहीं होता और उन्हें हटा दिया जाता है, साथ ही midpoint से 2 प्रतिशत से अधिक दूर के किसी भी प्रिंट को भी हटा दिया जाता है। कोट रिकॉर्ड जहाँ bid, offer से मिलती है या उसे पार करती है, उन्हें बाहर रखा जाता है, क्योंकि locked or crossed market का कोई उपयोगी midpoint नहीं होता है।
सेकंड लेवल मैचिंग fill के माइक्रोसेकंड में प्रचलित कोट का अनुमान लगाती है, और यह सबसे तेज़ अपडेट को स्मूथ करती है। Horizon की कीमतें उन्हीं सेकंड लेवल के midpoints से आती हैं। इन्वेंट्री पैनल एक मिनट के बार का उपयोग करता है और केवल उन्हीं बार्स को रखता है जिनमें कम से कम 50 प्रिंट्स होते हैं, जो सैंपल को दिन के सबसे व्यस्त घंटों में केंद्रित करता है।
यहाँ प्रत्येक पैनल में वह SQL है जिसने इसे तैयार किया है, इसलिए markout गणित लाइन-दर-लाइन निरीक्षण के लिए खुला है। किसी अलग नाम या अलग दिन पर कर्व को फिर से बनाने के लिए, Strasmore टर्मिनल पर सादी अंग्रेजी में इसके लिए पूछें।