ट्रेड मार्कआउट म्हणजे काय? एक्झिक्यूशन क्वालिटी विश्लेषण
ट्रेड मार्कआउट म्हणजे ट्रेड पूर्ण झाल्यानंतर मिड प्राईसमध्ये झालेला बदल. या लेखात मार्कआउटची संकल्पना, त्याचे चिन्ह आणि एक सेकंद ते पाच मिनिटांच्या कालावधीतील मोजमाप स्पष्ट केले आहे.
ट्रेड मार्कआउट म्हणजे ट्रेड पूर्ण झाल्यानंतर (fill) एका ठराविक कालावधीत मिड प्राईसमध्ये (mid price) झालेला बदल, जो ट्रेड पूर्ण झाल्याच्या क्षणापासून मोजला जातो. मार्कआउट पॉझिटिव्ह असणे म्हणजे ट्रेड पूर्ण झाल्यानंतर बाजार तुमच्या बाजूने हलला. मार्कआउट निगेटिव्ह असणे म्हणजे बाजार तुमच्या विरुद्ध गेला, ज्याला ट्रेडिंग डेस्कच्या भाषेत 'ॲडव्हर्स सिलेक्शन' (adverse selection) म्हणतात. तुम्ही निवडलेला कालावधी (उदा. एक सेकंद किंवा पाच मिनिटे) यावरून हे ठरते की हा आकडा नेमक्या कोणत्या प्रश्नाचे उत्तर देत आहे.
ट्रेड मार्कआउट म्हणजे काय?
मिड प्राईसपासून सुरुवात करा: सर्वोत्तम बिड (best bid) आणि सर्वोत्तम ऑफर (best offer) यांच्यामधील मध्यबिंदू, म्हणजेच NBBO चा मिड. मार्कआउट काढताना, तुमच्या ट्रेडनंतर एका ठराविक कालावधीनंतरचा मिड घेतला जातो, त्यातून एक संदर्भ किंमत (reference price) वजा केली जाते आणि तुमच्या ट्रेडच्या बाजूने (side) त्याला चिन्ह (sign) दिले जाते.
**मार्कआउट (कालावधी h) = बाजू * (t+h वेळेचा मिड - संदर्भ किंमत)**, जिथे तुम्ही खरेदी केली असेल तर बाजू 'प्लस वन' आणि विक्री केली असेल तर 'मायनस वन' असते.
चिन्हांच्या संकेतामुळे अनेकदा गोंधळ होतो. तुम्ही खरेदी केल्यानंतर मिड प्राईस खाली गेली, तर मार्कआउट निगेटिव्ह येतो: तुम्ही खरेदी केली, किंमत खाली गेली आणि ज्याने तुम्हाला विकले, त्याचा ट्रेड फायद्यात राहिला. हेच 'ॲडव्हर्स सिलेक्शन' आकड्यांच्या स्वरूपात मांडले जाते. विक्री केल्यानंतर मिड प्राईस खाली गेली, तर मार्कआउट पॉझिटिव्ह येतो, कारण बाजू बदलल्यामुळे चिन्हही बदलते. प्रत्येक ट्रेडच्या दोन बाजू असतात; एका बाजूचा मार्कआउट हा दुसऱ्या बाजूच्या मार्कआउटच्या विरुद्ध चिन्हाचा असतो.
तीन संदर्भ किमती
तुम्ही कोणती संदर्भ किंमत वजा करता, यावर मार्कआउट कशाचे मोजमाप करतो हे ठरते.
- फिल प्राईस (Fill price): मार्कआउट म्हणजे नफा-तोटा होतो: तुम्ही भरलेल्या किमतीच्या तुलनेत t+h वेळेला पोझिशनची किंमत किती आहे. यामध्ये तुम्ही भरलेला किंवा कमावलेला स्प्रेड (spread) समाविष्ट असतो.
- ट्रेड पूर्ण झाल्याच्या क्षणी असलेला मिड: यामुळे स्प्रेड बाजूला होतो आणि ट्रेडनंतर बाजार कसा हलला हे स्पष्ट समजते, जे 'ॲडव्हर्स सिलेक्शन' मोजण्यासाठी सर्वात अचूक साधन आहे.
- ट्रेड केलेल्या बाजूची कोट (Quote): तुम्ही ज्या किमतीवर ट्रेड केला, त्या किमतीच्या तुलनेत फिल कसा होता, हे यावरून समजते.
एक्झिक्युशन क्वालिटीच्या कामात 'ॲडव्हर्स सिलेक्शन'साठी दुसऱ्या पर्यायाचा आणि नफा-तोट्यासाठी पहिल्या पर्यायाचा वापर केला जातो. खालील पहिल्या पॅनेलमध्ये एकाच सेटच्या फिलसाठी दोन्हीचे मोजमाप दिले आहे.
मार्कआउट कर्व आणि त्याचा आकार काय दर्शवतो
अनेक कालावधींसाठी हे सांख्यिकीय विश्लेषण केल्यास एक कर्व (curve) मिळतो. या कर्वचा आकार एका आकड्यापेक्षा जास्त माहिती देतो.
- जर कर्व पहिल्या सेकंदातच वेगाने खाली आला आणि खालीच राहिला, तर याचा अर्थ असा की ट्रेड होण्यापूर्वीच किंमत तुमच्या विरुद्ध गेली आहे.
- जर कर्व काही मिनिटांपर्यंत सतत खाली येत राहिला, तर याचा अर्थ असा की ट्रेडमध्ये किमतीच्या दिशेबद्दलची महत्त्वाची माहिती होती.
- जर कर्व शून्याच्या जवळ सपाट असेल, तर ते 'बिनाइन फ्लो' (benign flow) दर्शवते. पाच मिनिटांनंतरही मिड प्राईस फिलच्या वेळेसारखीच असते.
- जर कर्व सुरुवातीला निगेटिव्ह असून पुन्हा शून्याकडे वर जात असेल, तर तो आकार रिबेट (rebate) गोळा करणाऱ्या पॅसिव्ह मेकरसाठी योग्य असतो. सुरुवातीची घसरण म्हणजे स्प्रेड आणि तात्काळ होणारा परिणाम, तर त्यानंतरची सुधारणा म्हणजे बाजाराची पूर्वपदावर येण्याची प्रक्रिया.
कालावधी निवडणे हा स्वतःच एक निर्णय आहे की तुम्ही काय मोजत आहात. एका सेकंदापेक्षा कमी कालावधीत मार्कआउट प्रामुख्याने लॅटन्सी (latency) आणि क्यू पोझिशन (queue position) दर्शवतो. एक मिनिटापर्यंत वाढवल्यास तो फ्लोमधील अल्पकालीन माहिती दर्शवतो. पाच मिनिटांच्या पुढे, बाजारातील सामान्य चढ-उतार फिलच्या परिणामावर भारी पडू लागतात.
एक प्रत्यक्ष मार्कआउट कर्व, फिलनुसार
खालील पॅनेलमध्ये 10 जून 2026 च्या नियमित सत्रातील प्रत्येक INTC प्रिंट घेतली आहे, प्रत्येक प्रिंटला त्याआधीच्या सेकंदातील शेवटच्या कोटच्या तुलनेत 'बाय इनिशिएटेड' किंवा 'सेल इनिशिएटेड' असे वर्गीकृत केले आहे आणि 5 कालावधीत सरासरी मार्कआउट काढला आहे. दोन मालिका एकाच फिलवर आधारित आहेत: एक फिलच्या वेळच्या मिडपासून आणि दुसरी फिल प्राईसपासून मोजलेली.
प्रत्येक आकड्यामागील अचूक SQL
WITH
mid_by_second AS
(
SELECT
dateDiff('second', toDateTime('2026-06-10 13:30:00', 'UTC'), sip_timestamp) AS sec,
argMax((toFloat64(bid_price) + toFloat64(ask_price)) / 2, sip_timestamp) AS mid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'INTC'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 20:00:00', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
GROUP BY sec
),
signed_fills AS
(
SELECT
t.sec AS sec,
t.fill_price AS fill_price,
q.mid AS ref_mid,
if(t.fill_price > q.mid, 1, -1) AS side
FROM
(
SELECT
dateDiff('second', toDateTime('2026-06-10 13:30:00', 'UTC'), sip_timestamp) AS sec,
sec - 1 AS ref_sec,
toFloat64(price) AS fill_price
FROM global_markets.stocks_trades
WHERE ticker = 'INTC'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:01', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 19:55:00', 'UTC')
AND price > 0
AND size > 0
) AS t
INNER JOIN mid_by_second AS q ON q.sec = t.ref_sec
WHERE t.fill_price != q.mid
)
SELECT
multiIf(f.horizon_s < 60,
concat(toString(f.horizon_s), ' sec'),
concat(toString(intDiv(f.horizon_s, 60)), ' min')) AS horizon,
round(avg(f.side * (fut.mid - f.ref_mid) / f.ref_mid) * 10000, 3) AS mid_basis_bps,
round(avg(f.side * (fut.mid - f.fill_price) / f.fill_price) * 10000, 3) AS fill_basis_bps,
count() AS fill_count
FROM
(
SELECT
sec,
fill_price,
ref_mid,
side,
horizon_s,
sec + horizon_s AS future_sec
FROM signed_fills
ARRAY JOIN [1, 5, 15, 60, 300] AS horizon_s
) AS f
INNER JOIN mid_by_second AS fut ON fut.sec = f.future_sec
GROUP BY f.horizon_s
ORDER BY f.horizon_s900593 वर्गीकृत फिलमध्ये, मिड बेसिस मालिका 1 sec वर 3.068 बेसिस पॉइंट्स आणि 5 min वर 2.977 बेसिस पॉइंट्स दर्शवते. एक बेसिस पॉइंट म्हणजे किमतीच्या एक टक्क्याचा शंभरावा भाग, त्यामुळे एका फिलमुळे होणारा बदल नगण्य असतो, पण दहा लाख शेअर्सच्या ट्रेडमध्ये तो मोठा फरक ठरतो.
फिल बेसिस मालिका -0.488 बेसिस पॉइंट्सवर सुरू होते. सर्वात कमी कालावधीत या दोन मालिकांमधील अंतर म्हणजे 'इफेक्टिव्ह हाफ स्प्रेड': प्रिंट मिडपासून किती दूर होती. टेकर (taker) एंट्री करताना हे भरतो आणि मेकर (maker) हे कमावतो. पहिल्या कालावधीनंतरचे सर्व बदल हे बाजाराच्या हालचालीमुळे असतात.
फिलचा आकार आणि कर्वचा आकार
'ॲडव्हर्स सिलेक्शन' सर्व फिलवर सारख्या प्रमाणात परिणाम करत नाही. एकाच सत्रातील लहान फिल आणि हजार किंवा त्यापेक्षा जास्त शेअर्सचे ब्लॉक्स यांची तुलना केल्यास हे स्पष्ट होते.
प्रत्येक आकड्यामागील अचूक SQL
WITH
mid_by_second AS
(
SELECT
dateDiff('second', toDateTime('2026-06-10 13:30:00', 'UTC'), sip_timestamp) AS sec,
argMax((toFloat64(bid_price) + toFloat64(ask_price)) / 2, sip_timestamp) AS mid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'INTC'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 20:00:00', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
GROUP BY sec
),
signed_fills AS
(
SELECT
t.sec AS sec,
t.fill_size AS fill_size,
q.mid AS ref_mid,
if(t.fill_price > q.mid, 1, -1) AS side
FROM
(
SELECT
dateDiff('second', toDateTime('2026-06-10 13:30:00', 'UTC'), sip_timestamp) AS sec,
sec - 1 AS ref_sec,
toFloat64(price) AS fill_price,
size AS fill_size
FROM global_markets.stocks_trades
WHERE ticker = 'INTC'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:01', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 19:55:00', 'UTC')
AND price > 0
AND size > 0
) AS t
INNER JOIN mid_by_second AS q ON q.sec = t.ref_sec
WHERE t.fill_price != q.mid
)
SELECT
multiIf(f.horizon_s < 60,
concat(toString(f.horizon_s), ' sec'),
concat(toString(intDiv(f.horizon_s, 60)), ' min')) AS horizon,
round(avgIf(f.side * (fut.mid - f.ref_mid) / f.ref_mid, f.fill_size < 1000) * 10000, 3) AS small_fill_bps,
round(avgIf(f.side * (fut.mid - f.ref_mid) / f.ref_mid, f.fill_size >= 1000) * 10000, 3) AS block_fill_bps,
countIf(f.fill_size >= 1000) AS block_fill_count
FROM
(
SELECT
sec,
fill_size,
ref_mid,
side,
horizon_s,
sec + horizon_s AS future_sec
FROM signed_fills
ARRAY JOIN [1, 5, 15, 60, 300] AS horizon_s
) AS f
INNER JOIN mid_by_second AS fut ON fut.sec = f.future_sec
GROUP BY f.horizon_s
HAVING countIf(f.fill_size < 1000) > 0
AND countIf(f.fill_size >= 1000) > 0
ORDER BY f.horizon_s5 min कालावधीत, हजार शेअर्सपेक्षा कमी प्रिंट्सची सरासरी 2.983 बेसिस पॉइंट्स असते, तर हजार किंवा त्यापेक्षा जास्त शेअर्सच्या 11588 प्रिंट्सची सरासरी 2.495 असते. या दोन गटांविरुद्ध समान एकूण व्हॉल्यूम ट्रेड करणारे दोन कोट्स दिवसाच्या शेवटी एकाच ठिकाणी पोहोचत नाहीत.
एक्झिक्युशन रिपोर्टमध्ये मार्कआउट्सचे स्प्रेड नंबर्स कसे बनतात
मार्कआउट हा स्टँडर्ड स्प्रेड डिकंपोझिशनमधील गहाळ घटक आहे. इफेक्टिव्ह स्प्रेड म्हणजे टेकरने प्रत्यक्षात भरलेली किंमत: मिड ते प्रिंट या अंतराच्या दुप्पट. याचे दोन भाग करा. एक भाग म्हणजे 'रिअलाइज्ड स्प्रेड', जो बाजार हलल्यानंतर मेकरकडे राहतो. दुसरा भाग म्हणजे 'ॲडव्हर्स सिलेक्शन', जो मिड बेसिस मार्कआउटच्या दुप्पट असतो. हे समीकरण अचूक आहे: इफेक्टिव्ह स्प्रेड = रिअलाइज्ड स्प्रेड + ॲडव्हर्स सिलेक्शन.
प्रत्येक आकड्यामागील अचूक SQL
WITH
mid_by_second AS
(
SELECT
dateDiff('second', toDateTime('2026-06-10 13:30:00', 'UTC'), sip_timestamp) AS sec,
argMax((toFloat64(bid_price) + toFloat64(ask_price)) / 2, sip_timestamp) AS mid
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'INTC'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 20:00:00', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
GROUP BY sec
),
signed_fills AS
(
SELECT
t.sec + 60 AS future_sec,
t.et_time AS et_time,
t.fill_price AS fill_price,
q.mid AS ref_mid,
if(t.fill_price > q.mid, 1, -1) AS side
FROM
(
SELECT
dateDiff('second', toDateTime('2026-06-10 13:30:00', 'UTC'), sip_timestamp) AS sec,
sec - 1 AS ref_sec,
toFloat64(price) AS fill_price,
formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), toIntervalMinute(30)), '%H:%i') AS et_time
FROM global_markets.stocks_trades
WHERE ticker = 'INTC'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:01', 'UTC')
AND sip_timestamp < toDateTime('2026-06-10 19:55:00', 'UTC')
AND price > 0
AND size > 0
) AS t
INNER JOIN mid_by_second AS q ON q.sec = t.ref_sec
WHERE t.fill_price != q.mid
)
SELECT
f.et_time AS et_time,
round(avg(2 * f.side * (f.fill_price - f.ref_mid) / f.ref_mid) * 10000, 3) AS effective_spread_bps,
round(avg(2 * f.side * (f.fill_price - fut.mid) / f.ref_mid) * 10000, 3) AS realized_spread_bps,
round(avg(2 * f.side * (fut.mid - f.ref_mid) / f.ref_mid) * 10000, 3) AS adverse_selection_bps,
count() AS fill_count
FROM signed_fills AS f
INNER JOIN mid_by_second AS fut ON fut.sec = f.future_sec
GROUP BY f.et_time
ORDER BY f.et_timeईस्टर्न वेळेनुसार 09:30 वाजता सुरू होणाऱ्या अर्ध्या तासात, इफेक्टिव्ह स्प्रेड सरासरी 10.651 बेसिस पॉइंट्स असतो, ज्यापैकी 8.313 हा साठ सेकंदांच्या कालावधीतील ॲडव्हर्स सिलेक्शनचा घटक आहे आणि 2.338 हा मेकरकडे राहणारा भाग आहे. हे पॅनेल 13 अर्ध्या तासांच्या बकेट्स कव्हर करते.
हे घटक Rule 605 आणि 606 एक्झिक्युशन रिपोर्ट्स मध्ये वेन्यूनुसार सारांशित केले आहेत आणि सब पेनी रूल आणि प्राईस इम्प्रूव्हमेंट वर आधारित प्राईस इम्प्रूव्हमेंट दाव्यांमागील हेच गणित आहे. रिबेट ही प्रति शेअर निश्चित क्रेडिट असते. ॲडव्हर्स सिलेक्शन ही कोटला मिळणाऱ्या फिलवर लागणारी परिवर्तनीय किंमत असते. हेडलाईन रेट कार्डऐवजी मोजलेल्या कर्ववर आधारित तुलना करणे, हेच मेकर-टेकर फी आणि रिबेट्स तपासण्याचे साधन आहे आणि ते मार्केट मेकर्सना तोटा का होतो यातील यंत्रणेचा भाग आहे.
हे आकडे कसे काढले गेले
प्रत्येक पॅनेल 10 जून 2026 च्या नियमित सत्रातील (09:30 ते 16:00 ईस्टर्न) INTC कोट्स आणि प्रिंट्स वाचते. कोट्स प्रति सेकंद एका मिडमध्ये रूपांतरित होतात, जो त्या सेकंदात प्रिंट झालेला शेवटचा मिड असतो. प्रिंटला 'बाय इनिशिएटेड' तेव्हा मानले जाते जेव्हा ती मागील सेकंदाच्या मिडच्या वर असते आणि 'सेल इनिशिएटेड' तेव्हा जेव्हा ती खाली असते, हा स्टँडर्ड कोट नियम आहे. मिडवरच असलेल्या प्रिंट्स वगळल्या जातात. मागील सेकंदाचा मिड संदर्भ म्हणून वापरल्यामुळे संदर्भ किंमत भविष्यातील माहिती घेत नाही. कालावधी हे प्रिंटच्या सेकंदापासून मोजलेले पूर्ण सेकंद आहेत आणि एखादा फिल तेव्हाच कालावधीत समाविष्ट होतो जेव्हा त्या टार्गेट सेकंदात कोट अस्तित्वात असतो.
FAQ
ट्रेडिंगमध्ये मार्कआउट म्हणजे काय?
मार्कआउट म्हणजे ट्रेड पूर्ण झाल्यानंतर एका ठराविक कालावधीत मिड प्राईसमध्ये झालेला बदल. पॉझिटिव्ह मार्कआउट म्हणजे ट्रेड पूर्ण झाल्यानंतर बाजार तुमच्या बाजूने हलला. निगेटिव्ह मार्कआउट म्हणजे बाजार विरुद्ध दिशेला गेला, ज्याला ॲडव्हर्स सिलेक्शन म्हणतात.
निगेटिव्ह मार्कआउट म्हणजे नेहमीच वाईट फिल असतो का?
नाही. मार्केट करण्यायोग्य ऑर्डरवर एका सेकंदाचा निगेटिव्ह मार्कआउट म्हणजे प्रामुख्याने भरलेला स्प्रेड असतो, जी त्वरित ट्रेड पूर्ण करण्याची किंमत आहे. महत्त्वाचे हे आहे की दीर्घ कालावधीत कर्व खालीच राहतो की सपाट होतो.
मार्कआउट आणि स्लिपेज (slippage) मध्ये काय फरक आहे?
स्लिपेज म्हणजे फिलची तुलना निर्णयाच्या किमतीशी किंवा अरायव्हल प्राईसशी करणे, त्यामुळे ते संपूर्ण ऑर्डरच्या मार्गाचे मूल्यमापन करते. मार्कआउट म्हणजे फिलची तुलना त्यानंतरच्या कालावधीतील मिडशी करणे, त्यामुळे ते ट्रेडनंतर काय घडले याचे मूल्यमापन करते. एक पॅरेंट ऑर्डरला गुण देते, तर दुसरे वैयक्तिक फिलला.
मार्कआउटसाठी कोणता कालावधी वापरावा?
हे फिल कशासाठी होता यावर अवलंबून असते. एका सेकंदापेक्षा कमी कालावधी लॅटन्सी-संवेदनशील एक्झिक्युशनसाठी वापरला जातो, तर एक मिनिट हा लिक्विड नावांच्या ॲडव्हर्स सिलेक्शनसाठी सामान्य डिफॉल्ट आहे. आकड्यासोबत कालावधी दिल्यासच दोन मार्कआउट्सची तुलना करणे शक्य होते.
मार्कआउटचा इफेक्टिव्ह स्प्रेडशी काय संबंध आहे?
इफेक्टिव्ह स्प्रेडचे विभाजन रिअलाइज्ड स्प्रेड आणि ॲडव्हर्स सिलेक्शन घटकामध्ये होते, आणि हा घटक म्हणजे मिड बेसिस मार्कआउटच्या दुप्पट असतो. कालावधी बदलला की या दोन घटकांमधील विभाजनही बदलते, म्हणूनच कालावधीशिवाय दिलेली स्प्रेड सांख्यिकी अपूर्ण असते.
येथील प्रत्येक पॅनेल ते तयार करणाऱ्या SQL कोडसह उपलब्ध आहे. एक उघडा, टिकर किंवा तारीख बदला आणि Strasmore टर्मिनलवर तोच मार्कआउट कर्व पुन्हा तयार होईल.