Trade Markout என்றால் என்ன? Execution Quality விளக்கம்
Trade markout என்பதன் பொருள் மற்றும் அதன் குறியீட்டு மரபுகளை எளிமையாக அறியலாம். ஒரு வினாடி முதல் ஐந்து நிமிடங்கள் வரையிலான markout curve அளவீடுகளை விரிவாகக் காண்போம்.
Trade markout என்றால் என்ன?
சிறந்த bid மற்றும் சிறந்த offer ஆகியவற்றிற்கு இடைப்பட்ட புள்ளியான mid price-ல் இருந்து தொடங்கவும்; இது NBBO-ன் மையப்புள்ளியாகும். ஒரு markout என்பது, உங்கள் fill-க்கு பிறகு தேர்ந்தெடுக்கப்பட்ட ஒரு கால இடைவெளியில் அந்த mid price-ஐ எடுத்து, அதிலிருந்து ஒரு reference price-ஐக் கழித்து, நீங்கள் வர்த்தகம் செய்த பக்கத்தின் அடிப்படையில் (side) குறியீட்டை (sign) இடுவதாகும்.
**markout at horizon h = side * (mid at t+h - reference price)**, இதில் நீங்கள் வாங்கியிருந்தால் side என்பது பிளஸ் ஒன்று, விற்றிருந்தால் மைனஸ் ஒன்று.
குறியீட்டு மரபில்தான் பொதுவாக குழப்பம் ஏற்படுகிறது. நீங்கள் வாங்கிய பிறகு mid price குறைந்தால், அது எதிர்மறை (negative) markout ஆகும்: நீங்கள் வாங்கினீர்கள், விலை குறைந்தது, உங்களுக்கு விற்றவர் அந்த வர்த்தகத்தில் லாபம் அடைந்தார். இதுவே adverse selection என்பதன் எண் வடிவம். நீங்கள் விற்ற பிறகு mid price குறைந்தால், அது நேர்மறை (positive) markout ஆகும், ஏனெனில் side-க்கு ஏற்ப குறியீடு மாறுகிறது. ஒவ்வொரு fill-க்கும் இரண்டு பக்கங்கள் உண்டு; ஒரு பக்கத்தின் markout என்பது மற்ற பக்கத்தின் markout-க்கு நேர்மாறான குறியீட்டைக் கொண்டிருக்கும்.
மூன்று reference விலைகள்
நீங்கள் கழிக்கும் reference விலை, அந்த markout எதை அளவிடுகிறது என்பதைத் தீர்மானிக்கிறது.
- Fill price. markout என்பது பணமாக மாறுகிறது: நீங்கள் செலுத்திய விலைக்கு எதிராக t+h நேரத்தில் அந்த position-ன் மதிப்பு என்ன என்பது இது. நீங்கள் செலுத்திய அல்லது ஈட்டிய spread இதற்குள் அடங்கும்.
- Fill நடந்த தருணத்தில் இருந்த mid price. இது spread-ஐ நீக்கிவிட்டு, நீங்கள் வர்த்தகம் செய்த பிறகு சந்தை எப்படி நகர்ந்தது என்பதை மட்டும் காட்டுகிறது; இது adverse selection-ஐத் துல்லியமாகக் காட்டும் முறையாகும்.
- நீங்கள் வர்த்தகம் செய்த பக்கத்தின் quote. நீங்கள் தொட்ட அல்லது பதிவிட்ட விலையுடன் ஒப்பிடுவது, சந்தையில் உண்மையில் இருந்த விலையுடன் அந்த fill எப்படி ஒப்பிடுகிறது என்பதை விளக்குகிறது.
Execution தரம் குறித்த ஆய்வுகளில், adverse selection-க்கு இரண்டாவது முறையும், லாப-நஷ்டக் கணக்கீட்டிற்கு (P&L) முதல் முறையும் பயன்படுத்தப்படுகின்றன. கீழே உள்ள முதல் பேனலில், ஒரு தொகுப்பு fill-களுக்கு இவை இரண்டும் காட்டப்பட்டுள்ளன.
Markout வளைகோடு மற்றும் அதன் வடிவத்தின் பொருள்
பல கால இடைவெளிகளில் இதே புள்ளிவிவரத்தை இயக்கினால், ஒரு வளைகோடு கிடைக்கும். அதன் வடிவம் ஒரு தனி எண்ணை விட அதிகத் தகவல்களைத் தருகிறது.
- முதல் நொடிக்குள் செங்குத்தாகக் கீழே இறங்கி, அங்கேயே இருக்கும் வளைகோடு, flow-கள் குறிவைக்கப்படுவதைக் குறிக்கிறது: வர்த்தகம் செய்த உடனேயே விலை உங்களுக்கு எதிராக நகர்கிறது.
- பல நிமிடங்கள் தொடர்ந்து கீழே இறங்கும் வளைகோடு, விலை எங்கே செல்லும் என்பது குறித்த உண்மையான தகவலைக் கொண்ட flow-ஐக் குறிக்கிறது.
- பூஜ்ஜியத்திற்கு அருகில் தட்டையாக இருக்கும் வளைகோடு, பாதிப்பில்லாத flow-ஐக் குறிக்கிறது. ஐந்து நிமிடங்களுக்குப் பிறகும், mid price அந்த fill-ல் இருந்தபடியே உள்ளது.
- எதிர்மறையாகத் தொடங்கி மீண்டும் பூஜ்ஜியத்தை நோக்கி உயரும் வளைகோடு, rebate-களைச் சேகரிக்கும் passive maker-கள் எதிர்பார்க்கும் வடிவம். ஆரம்ப சரிவு என்பது spread மற்றும் உடனடி தாக்கம்; மீட்சி என்பது சந்தை மீண்டும் பழைய நிலைக்கு வருவதைக் குறிக்கிறது.
கால இடைவெளியைத் தேர்ந்தெடுப்பதே நீங்கள் எதை அளவிடுகிறீர்கள் என்பதைத் தீர்மானிப்பதாகும். ஒரு நொடிக்கும் குறைவான கால இடைவெளியில், markout பெரும்பாலும் latency மற்றும் queue position-ஐ அளவிடுகிறது. அதை ஒரு நிமிடமாக நீட்டித்தால், அது flow-ல் உள்ள குறுகிய காலத் தகவலை அளவிடுகிறது. ஐந்து நிமிடங்களுக்கு மேல் சென்றால், சாதாரண சந்தை நகர்வுகள் fill-ன் தாக்கத்தை மறைக்கத் தொடங்கிவிடும்.
ஒரு உண்மையான markout வளைகோடு, fill வாரியாக
கீழே உள்ள பேனல், ஜூன் 10, 2026 வழக்கமான அமர்வில் நடந்த ஒவ்வொரு INTC வர்த்தகத்தையும் எடுத்துக்கொள்கிறது. ஒவ்வொரு வர்த்தகமும் அது நடப்பதற்கு முந்தைய நொடியின் கடைசி quote-க்கு எதிராக buy initiated அல்லது sell initiated என வகைப்படுத்தப்பட்டு, 5 கால இடைவெளிகளில் சராசரி markout கணக்கிடப்படுகிறது. ஒரே fill-களின் மீது இரண்டு தொடர்கள் இயங்குகின்றன: ஒன்று fill-ன் mid price-லிருந்து, மற்றொன்று fill விலையிலிருந்து அளவிடப்படுகிறது.
ஒவ்வொரு எண்ணின் பின்னணியில் உள்ள துல்லியமான 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 வகைப்படுத்தப்பட்ட fill-களில், mid basis தொடர் 1 sec-ல் 3.068 basis points-ஆகவும், 5 min-ல் 2.977 basis points-ஆகவும் உள்ளது. ஒரு basis point என்பது விலையில் நூறில் ஒரு பங்கு (0.01%) ஆகும், எனவே ஒரு fill என்பது மிகச்சிறிய மாற்றத்தையே குறிக்கும், ஆனால் பத்து லட்சம் பங்குகள் என்பது உண்மையான பண மதிப்பைக் குறிக்கும்.
Fill basis தொடர் -0.488 basis points-ல் தொடங்குகிறது. மிகக் குறுகிய கால இடைவெளியில் இரண்டு தொடர்களுக்கும் இடையே உள்ள தூரம், effective half spread ஆகும்: அதாவது print ஆனது mid price-லிருந்து எவ்வளவு தூரத்தில் விழுந்தது என்பது. ஒரு taker அதை நுழைவின் போது செலுத்துகிறார், ஒரு maker அதை ஈட்டுகிறார். முதல் கால இடைவெளிக்கு அப்பால் உள்ள அனைத்தும் சந்தையின் நகர்வாகும்.
Fill அளவு மற்றும் வளைகோட்டின் வடிவம்
Adverse selection அனைத்து fill-களிலும் சமமாக இருப்பதில்லை. ஒரே அமர்வை print அளவின் அடிப்படையில் பிரிக்கும்போது, சிறிய fill-களும் ஆயிரம் அல்லது அதற்கு மேற்பட்ட பங்குகளின் தொகுப்புகளும் ஒரே அச்சில் வருகின்றன.
ஒவ்வொரு எண்ணின் பின்னணியில் உள்ள துல்லியமான 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 கால இடைவெளியில், ஆயிரம் பங்குகளுக்கும் குறைவான print-கள் சராசரியாக 2.983 basis points-ஐக் கொண்டுள்ளன, அதே சமயம் ஆயிரம் அல்லது அதற்கு மேற்பட்ட பங்குகளின் 11588 print-கள் சராசரியாக 2.495-ஐக் கொண்டுள்ளன. அந்த இரண்டு குழுக்களுக்கும் எதிராக ஒரே மொத்த அளவை நிரப்பும் இரண்டு quote-கள், நாளின் இறுதியில் ஒரே இடத்தில் முடிவடைவதில்லை.
Execution அறிக்கைகளில் markout எப்படி spread எண்களாக மாறுகிறது
Standard spread பகுப்பாய்வில் விடுபட்ட உறுப்பு markout ஆகும். Effective spread என்பது ஒரு taker உண்மையில் செலுத்தியது: mid-லிருந்து print-க்கு உள்ள தூரத்தின் இரு மடங்கு. இதை இரண்டாகப் பிரிக்கலாம். ஒரு பகுதி realized spread, அதாவது சந்தை நகர்ந்த பிறகு ஒரு maker தக்கவைத்துக் கொள்வது. மற்றொரு பகுதி adverse selection, இது mid basis markout-ன் இரு மடங்கு ஆகும். இந்த சமன்பாடு துல்லியமானது: effective spread = realized spread + adverse selection.
ஒவ்வொரு எண்ணின் பின்னணியில் உள்ள துல்லியமான 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 தொடங்கிய அரை மணி நேரத்தில், effective spread சராசரியாக 10.651 basis points ஆக உள்ளது, இதில் 8.313 என்பது அறுபது வினாடி கால இடைவெளியில் adverse selection உறுப்பாகும் மற்றும் 2.338 என்பது ஒரு maker தக்கவைத்துக் கொள்வதாகும். இந்த பேனல் 13 அரை மணி நேரக் கட்டங்களை உள்ளடக்கியது.
இந்தக் கூறுகள் Rule 605 மற்றும் 606 execution அறிக்கைகளில் ஒவ்வொரு இடத்திற்கும் தொகுக்கப்பட்டுள்ளன, மேலும் இவை the sub penny rule மற்றும் price improvement ஆகியவற்றின் அடிப்படையில் கூறப்படும் விலை மேம்பாட்டு உரிமைகளுக்கான கணித அடிப்படையாகும். Rebate என்பது ஒரு பங்கிற்கு வழங்கப்படும் நிலையான கடன். Adverse selection என்பது ஒரு quote உண்மையில் பெறும் fill-களின் மீதுள்ள மாறுபடும் செலவாகும். Headline rate card-ஐ விட, அளவிடப்பட்ட வளைகோட்டின் மீது ஒன்றை மற்றொன்றுடன் ஒப்பிடுவதுதான் maker taker fees மற்றும் rebates-க்கான சரிபார்ப்பு, மேலும் இது ஏன் market maker-கள் பணத்தை இழக்கிறார்கள் என்பதற்கான நுட்பங்களுடன் இணைந்துள்ளது.
இந்த எண்கள் எவ்வாறு கணக்கிடப்பட்டன
ஒவ்வொரு பேனலும் ஜூன் 10, 2026 வழக்கமான அமர்வின் (09:30 முதல் 16:00 கிழக்கு நேரம் வரை) INTC quote மற்றும் print-களைப் படிக்கிறது. Quote-கள் ஒரு நொடிக்கு ஒரு mid எனச் சுருக்கப்படுகின்றன, அந்த நொடிக்குள் பதிவான கடைசி விலை எடுத்துக்கொள்ளப்படுகிறது. முந்தைய நொடியின் mid-க்கு மேல் விழுந்த print buy initiated என்றும், கீழே விழுந்தால் sell initiated என்றும் வகைப்படுத்தப்படுகிறது, இதுவே நிலையான quote விதியாகும். அந்த mid-லேயே விழுந்த print-கள் கணக்கில் கொள்ளப்படுவதில்லை, எனவே midpoint executions மாதிரியில் இல்லை. முந்தைய நொடியின் mid-ஐ reference-ஆகப் பயன்படுத்துவது, எதிர்காலத் தரவுகளை முன்கூட்டியே பார்ப்பதைத் தவிர்க்கிறது. கால இடைவெளிகள் print நடந்த நொடியிலிருந்து எண்ணப்படும் முழு வினாடிகள் ஆகும், மேலும் ஒரு quote இலக்கு நொடியில் இருந்தால் மட்டுமே ஒரு fill அந்த கால இடைவெளியில் நுழையும்.
FAQ
வர்த்தகத்தில் markout என்றால் என்ன?
Markout என்பது ஒரு fill-க்கு பிறகு ஒரு குறிப்பிட்ட கால இடைவெளியில் mid price-ல் ஏற்படும் குறியீட்டு மாற்றமாகும். நேர்மறை என்றால், நீங்கள் வர்த்தகம் செய்த திசையிலேயே சந்தை நகர்ந்துள்ளது என்று பொருள். எதிர்மறை என்றால், அது உங்களுக்கு எதிராக நகர்ந்துள்ளது என்று பொருள், இதுவே adverse selection-ன் வரையறையாகும்.
எதிர்மறை markout எப்போதும் மோசமான fill-ஆ?
இல்லை. ஒரு marketable order-ல் ஒரு நொடியில் ஏற்படும் எதிர்மறை markout என்பது பெரும்பாலும் அந்த order செலுத்திய spread ஆகும், இது உடனடியாக வர்த்தகத்தை முடிப்பதற்கான விலையாகும். நீண்ட கால இடைவெளிகளில் வளைகோடு தொடர்ந்து கீழே செல்கிறதா அல்லது தட்டையாகிறதா என்பதே முக்கியம்.
Markout மற்றும் slippage-க்கு என்ன வித்தியாசம்?
Slippage என்பது ஒரு fill-ஐ முடிவு விலை அல்லது வருகை விலையுடன் ஒப்பிடுகிறது, எனவே இது ஒரு order-ன் முழுப் பாதையையும் மதிப்பிடுகிறது. Markout என்பது ஒரு fill-ஐ அதற்குப் பிந்தைய கால இடைவெளியில் உள்ள mid price-உடன் ஒப்பிடுகிறது, எனவே இது அடுத்து என்ன நடந்தது என்பதை மதிப்பிடுகிறது. ஒன்று parent order-ஐ மதிப்பிடுகிறது, மற்றொன்று தனிப்பட்ட fill-ஐ மதிப்பிடுகிறது.
Markout எந்த கால இடைவெளியைப் பயன்படுத்த வேண்டும்?
அந்த fill எதற்காகச் செய்யப்பட்டது என்பதைப் பொறுத்தது. ஒரு நொடிக்கும் குறைவான கால இடைவெளிகள் latency-ஐ உணரும் execution-ஐ மதிப்பிடுகின்றன, அதே சமயம் ஒரு நிமிடம் என்பது திரவப் பங்குகளில் (liquid names) adverse selection-க்கான பொதுவான இயல்புநிலையாகும். எண்ணுக்கு அருகில் கால இடைவெளியைப் பதிப்பிப்பதுதான் இரண்டு markout-களை ஒப்பிடக்கூடியதாக மாற்றுகிறது.
Markout எப்படி effective spread-உடன் தொடர்புடையது?
Effective spread என்பது realized spread மற்றும் adverse selection கூறு ஆகியவற்றின் கூட்டுத்தொகை, இதில் அந்த கூறு என்பது mid basis markout-ன் இரு மடங்கு ஆகும். கால இடைவெளியை மாற்றினால், இரண்டிற்கும் இடையிலான பிரிவினை மாறும், அதனால்தான் கால இடைவெளி குறிப்பிடப்படாத spread புள்ளிவிவரம் முழுமையற்றது.
இங்குள்ள ஒவ்வொரு பேனலும் அதை உருவாக்கிய SQL குறியீட்டுடன் வருகிறது. ஒன்றைத் திறந்து, ticker அல்லது தேதியை மாற்றினால், Strasmore டெர்மினலில் அதே markout வளைகோடு புதிதாக உருவாகும்.