L2 डेटावरून क्यू पोझिशनचा अंदाज कसा घ्यावा
पॅसिव्ह ऑर्डरला स्प्रेड मिळवण्यासाठी क्यू पोझिशन महत्त्वाची असते. ॲग्रिगेटेड बुक डेटावरून याचा अंदाज कसा घ्यावा आणि MBO डेटा कधी वापरावा, याची सविस्तर माहिती येथे दिली आहे.
क्यू (Queue) पोझिशन हीच संपूर्ण 'एज' (edge) का असते
एक पॅसिव्ह ऑर्डर बुकमध्ये राहून दुसऱ्या कोणाच्या तरी 'स्प्रेड' ओलांडून येण्याची वाट पाहते. price-time priority नुसार, मॅचिंग इंजिन आधी किमतीनुसार आणि नंतर ऑर्डर येण्याच्या वेळेनुसार रँकिंग करते. जर $10.00 किमतीला आधीच 10,000 शेअर्सची बिड (bid) असेल आणि तुम्ही त्यामागे 100 शेअर्सची ऑर्डर लावली, तर तुमच्या आधीचे 10,000 शेअर्स ट्रेड किंवा कॅन्सल होईपर्यंत तुम्हाला वाट पाहावी लागेल. जर तुम्ही तीच ऑर्डर कॅन्सल करून पुन्हा त्याच किमतीला लावली, तर तुम्ही रांगेत पुन्हा शेवटी जाता.
हे रँकिंगच आर्थिक परिणाम ठरवते. रांगेत पुढे असल्यास तुम्ही वारंवार ट्रेड करता आणि स्प्रेडसह 'ॲड-लिक्विडिटी रिबेट' मिळवता, ज्याबद्दल maker-taker fees and rebates मध्ये अधिक माहिती दिली आहे. रांगेत मागे असल्यास, तुमच्या आधीच्या सर्वांचे व्यवहार पूर्ण झाल्यावरच तुमचा नंबर येतो, जे सहसा मोठ्या प्रमाणात एकतर्फी फ्लो आल्यावर घडते. रांगेच्या शेवटी मिळणारे फिल्स (fills) हे किंमत तुमच्या लेव्हलला स्पर्श करण्याच्या काही क्षण आधी मिळतात. किंमत तीच, ऑर्डर तीच, पण परिणाम मात्र वेगळा.
लेव्हल 2 डेटा काय दाखवू शकतो आणि काय नाही
लेव्हल 1 म्हणजे प्रत्येक किमतीला असलेली सर्वोत्तम बिड आणि ऑफर. लेव्हल 2, ज्याला 'मार्केट बाय प्राईस' (market by price) असेही म्हणतात, ते अधिक खोली (depth) दर्शवते: प्रत्येक किमतीला असलेल्या एकूण शेअर्सची यादी. हे दोन्ही एकत्रित (aggregate) डेटा आहेत, आणि Level 1 vs Level 2 market data मध्ये त्यांची तुलना केली आहे. जेव्हा $10.00 ची बिड 10,000 वरून 8,500 शेअर्सवर येते, तेव्हा फीड फक्त 1,500 शेअर्स कमी झाल्याचे सांगते. ते शेअर्स ट्रेड झाले की कॅन्सल झाले, एक ऑर्डर गेली की चाळीस, किंवा ते रांगेत कुठे होते, हे त्यातून कळत नाही.
एक्झिक्युशन्स (executions) हा दृश्य भाग आहे: टेपवर प्रत्येक ट्रेडची साईज दिसते, त्यामुळे ती तुम्ही अचूक वजा करू शकता. उरलेला भाग म्हणजे कॅन्सलेशन, आणि इथेच अंदाजाचा खेळ सुरू होतो. खालील पॅनेल एका लिक्विड स्टॉकसाठी बुधवार, 10 जून 2026 रोजीच्या एका सामान्य सत्रातील एकत्रित टॉप-ऑफ-बुक मेसेज आणि टेपवरील प्रिंट्सची तुलना करते.
प्रत्येक आकड्यामागील अचूक SQL
SELECT
q.et_time AS et_time,
q.quote_updates AS quote_updates,
t.trades AS trades,
round(q.quote_updates / t.trades, 1) AS updates_per_trade
FROM
(
SELECT
formatDateTime(toStartOfHour(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
count() AS quote_updates
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-06-10 12:00:00'
AND sip_timestamp < '2026-06-10 20:00:00'
GROUP BY et_time
) AS q
INNER JOIN
(
SELECT
formatDateTime(toStartOfHour(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS trade_hour,
count() AS trades
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-06-10 12:00:00'
AND sip_timestamp < '2026-06-10 20:00:00'
GROUP BY trade_hour
) AS t ON q.et_time = t.trade_hour
ORDER BY et_time08:00 तासात मार्केट उघडण्यापूर्वीची स्थिती असते: तिथे प्रत्येक प्रिंटमागे टॉप-ऑफ-बुक 0.8 वेळा बदलले, जे प्रिंट्सपेक्षा कमी मेसेज आहेत. नियमित सत्रात हे प्रमाण उलट होते. 15:00 तासात, त्या एका तासातील 233433 मेसेजमध्ये, प्रत्येक प्रिंटमागे टॉप-ऑफ-बुक 1.6 वेळा बदलले. खुल्या बाजारात किमतीच्या लेव्हलवर घडणाऱ्या बहुतेक गोष्टी म्हणजे ऑर्डर्स येणे आणि जाणे, ज्या कधीही ट्रेड होत नाहीत. या प्रत्येक घटनेमुळे रांगेतील तुमचे स्थान अशा प्रकारे बदलते जे कोणत्याही एकत्रित फीडमध्ये दिसत नाही.
युनिफॉर्म कॅन्सलेशन गृहीतक आणि ते तुम्हाला कसे फसवते
पहिली पद्धत असे गृहीत धरते की कॅन्सलेशन रांगेत सर्वत्र सारख्या प्रमाणात होतात. 'x' म्हणजे तुमची फ्रॅक्शनल डेप्थ समजा: तुमच्या आधीचे शेअर्स भागिले तुमच्या किमतीला असलेले एकूण शेअर्स. युनिफॉर्म मॉडेलनुसार, कोणताही कॅन्सल झालेला शेअर तुमच्या आधी असण्याची शक्यता 'p(x) = x' इतकी असते. 10,000 शेअर्सच्या रांगेत तुम्ही मध्यभागी आहात आणि 1,000 शेअर्स कोणतीही प्रिंट न होता कॅन्सल झाले, तर मॉडेल तुम्हाला 500 जागा पुढे सरकवते.
प्रत्यक्षात रांगा अशा नसतात. जी ऑर्डर बराच वेळ रांगेत आहे, ती अशा व्यक्तीची असते ज्याला वाट पाहण्यात हरकत नाही, तर नुकतीच आलेली ऑर्डर ही काही सेकंदात गायब होणारी 'फ्लीटिंग कोट' (fleeting quote) असण्याची शक्यता जास्त असते. कॅन्सलेशन रांगेच्या मागील बाजूस, म्हणजे तुमच्या जवळ किंवा तुमच्या मागे जास्त होतात. त्या 1,000 कॅन्सल झालेल्या शेअर्सपैकी कदाचित 200 शेअर्स तुमच्या आधी असतील, पण मॉडेलने तुम्हाला 500 चे क्रेडिट दिले. दिवसभर असे घडल्यास, सिम्युलेटेड रांग खऱ्या रांगेपेक्षा वेगाने पुढे सरकते. ही चूक एकाच दिशेने होते: प्रत्यक्ष ऑर्डर्सपेक्षा जास्त आणि चांगल्या क्षणी फिल्स मिळतात.
रांग कशी रिकामी होते
कॅन्सलेशनमुळे तुम्ही अदृश्यपणे पुढे सरकता. ट्रेड्समुळे तुम्ही प्रिंट्सच्या साईजमध्ये दृश्यमानपणे पुढे सरकता.
प्रत्येक आकड्यामागील अचूक SQL
SELECT
multiIf(size < 100, 'under 100 shares',
size = 100, 'exactly 100 shares',
size <= 499, '101 to 499 shares',
size <= 999, '500 to 999 shares',
'1000 shares or more') AS trade_size_group,
round(100 * count() / sum(count()) OVER (), 1) AS share_of_prints_pct,
round(100 * sum(size) / sum(sum(size)) OVER (), 1) AS share_of_shares_pct
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-06-10 14:00:00'
AND sip_timestamp < '2026-06-10 20:00:00'
GROUP BY trade_size_group
ORDER BY min(size)या सत्रात 'राउंड लॉट'पेक्षा कमी प्रिंट्सची संख्या 90% होती आणि शेअर्सचे प्रमाण 42.5% होते. एक हजार किंवा त्यापेक्षा जास्त शेअर्सचे ब्लॉक्स हे एकूण प्रिंट्सच्या 0.2% आणि एकूण व्हॉल्यूमच्या 19.9% होते. रांगा छोट्या तुकड्यांत रिकामी होतात, त्यामुळे 2,000 व्या आणि 3,500 व्या स्थानातील अंतर म्हणजे शेकडो प्रिंट्सची प्रतीक्षा असते. जो सिम्युलेटर दोन मोठ्या ट्रेड्सनंतर फिल देतो, त्याने टेपचा मोठा भाग वगळलेला असतो.
जी ऑर्डर तुम्ही पाहू शकत नाही
डेप्थ फीड्स मर्यादित असतात. जर तुम्हाला दहा प्राईस लेव्हल्स दिसत असतील आणि तुमची ऑर्डर अकराव्या लेव्हलवर असेल, तर ती डेटाच्या बाहेर आहे: तुमच्या आधी किती शेअर्स आहेत किंवा मागे किती ऑर्डर्स येत आहेत, हे तुम्हाला कळत नाही. अशा वेळी तुम्ही अंदाज लावत नसून आकडा तयार करत असता. ही परिस्थिती सामान्य आहे, कारण जी ऑर्डर मार्केटचा पाठलाग करत नाही, ती लवकरच इनसाईड मार्केटपासून दूर जाते.
प्रत्येक आकड्यामागील अचूक SQL
SELECT
formatDateTime(toStartOfFifteenMinutes(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
round(avg(toFloat64(bid_price)), 2) AS best_bid,
uniqExact(bid_price) AS bid_levels_touched
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-06-10 14:00:00'
AND sip_timestamp < '2026-06-10 20:00:00'
AND bid_price > 0
GROUP BY et_time
ORDER BY et_time10:00 बकेटमध्ये सर्वोत्तम बिड सरासरी $290.29 होती आणि पंधरा मिनिटांत ती 187 वेगवेगळ्या किमतींना भेट देऊन आली. पेनीमध्ये कोट होणाऱ्या स्टॉकसाठी प्रत्येक किंमत एक स्वतंत्र लेव्हल असते, त्यामुळे दहा लेव्हलचा व्ह्यू दहा सेंट्सची बुक कव्हर करतो. अशा सत्रात एका किमतीला राहिलेली ऑर्डर अनेकदा वापरकर्त्याला दिसणाऱ्या सर्वात खोल लेव्हलच्याही खाली जाऊ शकते.
क्यू पोझिशनचे महत्त्व कुठे सर्वाधिक असते
जिथे प्राईस इम्प्रूव्हमेंट शक्य नसते, तिथे क्यू पोझिशन सर्वात महत्त्वाची असते. एक-सेंट स्प्रेड असलेल्या स्टॉकवर चांगल्या किमतीने रांगेत पुढे जाण्यास वाव नसतो: सर्वजण एकाच टिकवर असतात आणि येण्याची वेळ (arrival time) सर्व काही ठरवते. जिथे स्प्रेड अनेक सेंट्सचा असतो, तिथे व्यापारी एक पेनी देऊन संपूर्ण रांगेच्या पुढे जाऊ शकतो आणि किमतीचा निर्णय रांगेपेक्षा वरचढ ठरतो.
प्रत्येक आकड्यामागील अचूक SQL
SELECT
ticker AS symbol,
round(avg(toFloat64(ask_price - bid_price)) * 100, 2) AS avg_spread_cents,
round(100 * countIf(round(toFloat64(ask_price - bid_price) * 100) <= 1) / count(), 1) AS one_cent_pct
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'KO', 'NVDA', 'MSFT', 'BKNG')
AND sip_timestamp >= '2026-06-10 15:00:00'
AND sip_timestamp < '2026-06-10 19:00:00'
AND bid_price > 0
AND ask_price > bid_price
GROUP BY ticker
ORDER BY avg_spread_centsत्याच सत्रातील चार दुपारच्या तासांत, सहा नावांपैकी सर्वात घट्ट (tight) असलेले KO, सरासरी 1.18 सेंट्स रुंद होते आणि 82.5% अपडेट्सवर एक-सेंट स्प्रेड दाखवत होते. सर्वात रुंद असलेले MSFT, सरासरी 8.46 सेंट्स होते, आणि 1.1% अपडेट्सवर एक-सेंट स्प्रेड होता. पहिल्या नावावर कॅलिब्रेट केलेले क्यू मॉडेल दुसऱ्या नावासाठी काहीही उपयुक्त माहिती देत नाही. कोटच्या मध्ये राहिलेल्या ऑर्डर्स, ज्यांना midpoint peg orders म्हणतात, त्या स्वतःची वेगळी रांग तयार करतात.
तुमच्या बॅकटेस्टसाठी चार डायग्नोस्टिक्स
- सिम्युलेटेड फिल रेटची तुलना त्याच नावांच्या आणि त्याच तासांच्या प्रत्यक्ष फिल रेटशी करा. जो सिम्युलेटर 40% प्रत्यक्ष फिल रेट असताना 70% ऑर्डर्स फिल करतो, तो तुमच्या गृहितकांचे वर्णन करत आहे, मार्केटचे नाही.
- सिम्युलेटेड फिल्सचे दोन भाग करा: ज्यानंतर प्राईस लेव्हल टिकून राहिली आणि ज्या वेळी लेव्हल पूर्णपणे संपली. दुसऱ्या प्रकारच्या फिल्सचे प्रमाण जास्त असेल, तर सिम्युलेटर तुम्हाला किंमत तुमच्या लेव्हलला ओलांडून जाताना फिल्स देत आहे.
- गृहितकाची व्याप्ती तपासा. प्रत्येक कॅन्सलेशन रांगेच्या सुरुवातीतून आणि नंतर रांगेच्या शेवटून घेऊन पुन्हा रन करा. हे दोन रन तुम्ही निवडलेल्या कोणत्याही p(x) साठी प्रामाणिक एरर बार्स आहेत.
- तुमची किंमत तुमच्या फीडच्या डेप्थच्या बाहेर किती वेळा होती ते मोजा. तिथले फिल्स हे काल्पनिक आहेत. Look-ahead bias in backtesting मध्ये याच अपयशाचे वर्णन दुसऱ्या कोनातून केले आहे: असा निकाल जो अशा माहितीवर आधारित आहे जी रणनीतीकडे कधीच नव्हती.
मॉडेलिंग कधी थांबवावे आणि ऑर्डर डेटा कधी खरेदी करावा
मार्केट-बाय-ऑर्डर (MBO) डेटा प्रत्येक वैयक्तिक ऑर्डरसाठी एक मेसेज देतो, ती आल्यापासून ते एक्झिक्युट किंवा कॅन्सल होईपर्यंत, प्रत्येकाला स्वतःचा आयडेंटिफायर असतो. तो फीड रिप्ले केल्यास, तुमच्या ऑर्डरला वेन्यूवर पोहोचण्यासाठी लागणारा वास्तववादी विलंब गृहीत धरून, रांगेतील तुमचे स्थान हा आकडा असतो, अंदाज नसतो. हे डेप्थ फीडपेक्षा महाग असते आणि साठवण्यासाठी खूप मोठी जागा लागते.
डायग्नोस्टिक 3 हा निर्णयाचा नियम आहे. जर पुढच्या आणि मागच्या दोन्ही बाजूंच्या गृहितकांनुसार रणनीती फायदेशीर ठरत असेल, तर मधले गृहीतक चालेल. जर रणनीती एका बाजूला नफा देत असेल आणि दुसऱ्या बाजूला तोटा, तर क्यू मॉडेल हीच रणनीती आहे आणि अंदाजाचा बचाव करण्यापेक्षा ऑर्डर-बाय-ऑर्डर फीड खरेदी करणे स्वस्त पडते.
प्रो-राटा वेन्यूज प्रश्न बदलतात
काही फ्युचर्स आणि ऑप्शन्स मार्केट येणाऱ्या ऑर्डरला रांगेतील ऑर्डर्समध्ये वेळेनुसार न वाटता साईजच्या प्रमाणात वाटतात. तिथे वेळेला फारसे महत्त्व नसते आणि कोट केलेली साईज हेच महत्त्वाचे साधन बनते: तुमची साईज दुप्पट केल्यास प्रत्येक फिलमधील तुमचा वाटा साधारणपणे दुप्पट होतो. अपयशाचे स्वरूपही बदलते, तुम्हाला हव्या असलेल्यापेक्षा जास्त साईज कोट करण्याकडे कल वाढतो. Why options orders do not get filled मध्ये ऑप्शन्स बुकच्या रिटेल बाजूने हे कसे दिसते, हे स्पष्ट केले आहे.
FAQ
ट्रेडिंगमध्ये क्यू पोझिशन म्हणजे काय?
एकाच वेन्यूवर एकाच किमतीला असलेल्या ऑर्डर्समध्ये तुमचे स्थान म्हणजे क्यू पोझिशन. प्राईस-टाईम प्रायोरिटी बुकवर, तुमच्या आधीच्या ऑर्डर्स ट्रेड किंवा कॅन्सल झाल्याशिवाय तुमची ऑर्डर ट्रेड होऊ शकत नाही.
लेव्हल 2 डेटावरून क्यू पोझिशन मोजता येते का?
अचूक नाही. लेव्हल 2 मध्ये प्रत्येक प्राईस लेव्हलची एकूण साईज दिसते, पण ऑर्डरची ओळख नसते. त्यामुळे जेव्हा प्रिंट न होता साईज कमी होते, तेव्हा ते शेअर्स तुमच्या आधी होते की मागे, हे सांगता येत नाही. तुम्ही आकड्याचा अंदाज लावू शकता आणि त्याची व्याप्ती ठरवू शकता. अचूक आकड्यासाठी ऑर्डर-बाय-ऑर्डर डेटाची गरज असते.
बॅकटेस्ट केलेले फिल रेट्स सहसा जास्त का असतात?
सामान्य गृहीतक असे असते की कॅन्सलेशन रांगेत सर्वत्र सारखे होतात, तर प्रत्यक्षात ते रांगेच्या मागील बाजूस जास्त होतात. एकसमान मॉडेल तुमच्या सिम्युलेटेड ऑर्डरला खऱ्या रांगेपेक्षा वेगाने पुढे सरकवते, ज्यामुळे प्रत्यक्ष ट्रेडिंगपेक्षा जास्त आणि चांगले फिल्स मिळतात.
MBO डेटा म्हणजे काय?
मार्केट-बाय-ऑर्डर डेटा प्रत्येक वैयक्तिक ऑर्डरला तिचे स्वतःचे मेसेज देतो, येण्यापासून ते एक्झिक्युशन किंवा कॅन्सलेशनपर्यंत. हा असा फीड आहे जिथे रांगेतील तुमचे स्थान मोजता येते, मॉडेलिंग करण्याची गरज नसते. एक-टिक स्प्रेडवर काम करणाऱ्या रणनीतींसाठी हे सर्वात महत्त्वाचे आहे.
प्रो-राटा वेन्यूजवर क्यू पोझिशन महत्त्वाची असते का?
कमी. प्रो-राटा अलोकेशन येणाऱ्या ऑर्डरला साईजनुसार वाटत असल्याने, आधी पोहोचण्याला फारसा अर्थ उरत नाही आणि कोट केलेली साईज काम करते. कोणत्याही क्यू मॉडेलिंगच्या आधी वेन्यू कोणते अलोकेशन मॉडेल वापरते, हे तपासणे गरजेचे आहे.
येथील प्रत्येक पॅनेलमध्ये तो तयार करणारा SQL कोड आहे. Strasmore टर्मिनलवर तुम्ही ट्रेड करत असलेल्या नावांचा टिकर बदला, तारीख बदला आणि तोच प्रश्न विचारा.