Trade Condition Codes کی وضاحت اور اہمیت
تین platforms ایک ہی stock کی مختلف daily highs کیوں دکھاتے ہیں؟ Trade condition codes طے کرتے ہیں کون سے prints high، low، close اور volume کو update کریں گے۔
Trade condition codes ہی وہ وجہ ہیں جس کے باعث تین platforms ایک ہی stock کے لیے تین مختلف daily highs دکھا سکتے ہیں، اور ان میں سے کوئی بھی غلط نہیں ہوتا۔ Consolidated tape پر آنے والے ہر print کے ساتھ یہ tags شامل ہوتے ہیں۔ یہی tags طے کرتے ہیں کہ کوئی print last price، دن کی high اور low، official open، official close اور consolidated volume total کو update کر سکتا ہے یا نہیں۔ کوئی trade حقیقی execution اور حقیقی price پر ہو سکتا ہے، پھر بھی ان میں سے تقریباً تمام fields کے لیے نااہل ہو سکتا ہے۔
Trade condition codes کیا ہیں؟
Trade condition code، جسے sale condition بھی کہا جاتا ہے، وہ tag ہے جو reporting venue tape تک پہنچنے سے پہلے trade report کے ساتھ منسلک کرتا ہے۔ Price اور size بتاتے ہیں کہ کیا trade ہوا۔ Condition یہ بتاتی ہے کہ report کس نوعیت کی ہے: آیا یہ بروقت پہنچی، آیا اس کی price اسی لمحے طے ہونے کے بجائے دیگر executions سے اخذ کی گئی، آیا trade regular hours سے باہر ہوا، اور آیا اس میں round lot کے 100 shares سے کم شامل تھے۔
ہر code کے ساتھ eligibility flags کا ایک set منسلک ہوتا ہے، اور یہی وہ حصہ ہے جو تقریباً کوئی نہیں دیکھتا۔ ہر code کو last price، high اور low، open، close اور consolidated volume کے لیے eligible یا ineligible نشان زد کیا جاتا ہے۔ یہ flags ایک دوسرے سے آزادانہ طور پر کام کرتے ہیں۔ بہت سے prints high یا low کو متاثر نہیں کر سکتے، لیکن volume میں شمار ہوتے ہیں۔ اسی لیے stock کا reported share count اور اس کی reported price extremes overlapping لیکن مختلف trade sets سے بنتی ہیں۔ Flags کا ایک دوسرا set بھی ساتھ چلتا ہے: ایک set consolidated tape کو کنٹرول کرتا ہے، جبکہ دوسرا individual market center کو، کیونکہ exchange کا اپنا official close صرف اسی کے اپنے prints سے calculate ہوتا ہے۔
Condition codes مختلف families میں آتے ہیں، لیکن صرف ایک family یہ طے کرتی ہے کہ کوئی trade کیا update کر سکتا ہے۔
ہر عدد کے پیچھے موجود درست SQL
SELECT
replaceAll(type, '_', ' ') AS condition_family,
countDistinct(id) AS codes
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
GROUP BY condition_family
ORDER BY codes DESCStocks dictionary میں 8 families موجود ہیں۔ سب سے بڑی sale condition family ہے، جس میں 40 distinct codes شامل ہیں۔ Quote conditions trade کے بجائے bid اور offer کی وضاحت کرتی ہیں۔ Indicator families ایسی حالتوں کی نشان دہی کرتی ہیں جیسے short sale restriction کا نافذ ہونا۔ Sale condition family ہی eligibility flags رکھتی ہے، اور ذیل کے تمام اعداد اسی family سے لیے گئے ہیں۔
Tape پر اصل میں کیا آتا ہے
ذیل کا panel June 2026 کے ایک pinned session کو دکھاتا ہے۔ اس میں AAPL کے ہر print کو 4:00 a.m. کے premarket open سے 8:00 p.m. کے post-market trading اختتام تک، ہر print کے sale condition کے مطابق گروپ کیا گیا ہے۔ Window کو SQL میں fixed رکھا گیا ہے، اس لیے یہ figures صرف اسی دن کی وضاحت کرتے ہیں۔ کوئی print بیک وقت کئی codes رکھ سکتا ہے، جبکہ بہت سے prints پر کوئی code نہیں ہوتا۔ اسی لیے columns کا مجموعہ 100 نہیں بنتا۔
ہر عدد کے پیچھے موجود درست SQL
WITH
(SELECT count()
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')) AS day_prints,
(SELECT sum(size)
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')) AS day_shares
SELECT
multiIf(t.code = -1, 'Regular way (no code)',
c.code_name = '', concat('Unmapped code ', toString(t.code)),
c.code_name) AS condition_name,
round(100 * count() / day_prints, 2) AS pct_of_prints,
round(100 * sum(t.size) / day_shares, 2) AS pct_of_shares
FROM
(
SELECT
size,
arrayJoin(if(empty(conditions),
[toInt32(-1)],
arrayMap(x -> toInt32(x), conditions))) AS code
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')
) AS t
LEFT JOIN
(
SELECT toInt32(id) AS code_id, any(name) AS code_name
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
GROUP BY code_id
) AS c ON c.code_id = t.code
GROUP BY condition_name
ORDER BY pct_of_prints DESC
LIMIT 12اس دن سب سے عام tag Odd Lot Trade تھا۔ یہ session کے prints میں 65.83% اور shares میں 6.37% پر موجود تھا۔ دونوں columns کو ہر row میں ایک دوسرے کے مقابل پڑھیں۔ جہاں print share، volume share سے بہت زیادہ ہو، وہاں code چھوٹی executions کی نشان دہی کرتا ہے۔ جہاں volume share زیادہ ہو، وہاں code چند بہت بڑی executions کو ظاہر کرتا ہے۔ Prints گننا اور shares گننا مختلف سوالات کے جواب دیتے ہیں، اور condition code ہی ان دونوں کو الگ کرتا ہے۔
دو platforms مختلف daily highs کیوں دکھاتے ہیں؟
Print کی چار اقسام مختلف fields کے الگ الگ حصوں سے خارج کی جاتی ہیں۔
- Late reported اور out of sequence۔ 10:14 پر ہونے والا trade اگر 10:31 پر report ہو تو tape پر اسے out of sequence یا prior reference سے priced tag کے ساتھ درج کیا جاتا ہے۔ یہ volume میں شمار ہوتا ہے۔ یہ last price set نہیں کر سکتا، اور دن کی high کو بھی نہیں بڑھا سکتا، چاہے اس کی price session کے ہر دوسرے trade سے زیادہ ہو۔ Negotiated block trades اور dark pool trading venues سے trade reporting facility کے ذریعے بھیجے گئے prints اکثر اسی زمرے میں آتے ہیں۔
- Derivatively priced۔ Average price trade یا VWAP fill ایسی price رکھتا ہے جو اسی لمحے طے ہونے کے بجائے کئی دوسری executions سے calculate کی گئی ہو۔ اسے last price اور extremes سے خارج رکھا جاتا ہے، کیونکہ اس میں دکھائی گئی price کبھی live quote کے طور پر موجود نہیں تھی۔
- Odd lot۔ 100 shares سے کم۔ Odd lots last price اور high اور low کے لیے ineligible ہوتے ہیں، لیکن consolidated volume میں مکمل طور پر شمار ہوتے ہیں۔ Late 2013 تک انہیں consolidated tape پر بالکل report نہیں کیا جاتا تھا۔ اس حد سے پہلے کے data تک پہنچنے والی کوئی بھی volume comparison لفظ کے دو مختلف مفاہیم کا تقابل کرتی ہے۔ اس کی تفصیل ہماری average daily volume guide میں موجود ہے۔
- Extended hours اور form T۔ Premarket اور post-close prints پر tags لگے ہوتے ہیں اور انہیں regular session کے open، high، low اور close سے خارج رکھا جاتا ہے، جبکہ consolidated volume میں شمار کیا جاتا ہے۔ جو platform انہیں chart میں شامل کرتا ہے، وہ ایسے platform سے مختلف daily range دکھائے گا جو انہیں شامل نہیں کرتا۔ یہی وجہ ہے کہ after-hours and premarket trading ایک chart پر نظر آتی ہے اور دوسرے پر نہیں۔
یہاں پانچ معروف ناموں کے لیے، اسی pinned دن میں، دکھایا گیا ہے کہ ہر bucket session کے کتنے حصے پر مشتمل ہے۔
ہر عدد کے پیچھے موجود درست SQL
WITH
(SELECT groupArray(toInt32(id))
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND name ILIKE '%odd lot%') AS odd_lot_codes,
(SELECT groupArray(toInt32(id))
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND multiSearchAnyCaseInsensitive(name,
['form t', 'extended trading hours'])) AS extended_codes,
(SELECT groupArray(toInt32(id))
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND multiSearchAnyCaseInsensitive(name,
['out of sequence', 'prior reference', 'derivatively priced',
'average price', 'price variation', 'seller'])
AND NOT multiSearchAnyCaseInsensitive(name,
['form t', 'extended trading hours'])) AS late_or_derived_codes
SELECT
ticker,
round(100 * countIf(hasAny(conditions, odd_lot_codes)) / count(), 2) AS odd_lot_pct,
round(100 * countIf(hasAny(conditions, late_or_derived_codes)) / count(), 2) AS late_or_derived_pct,
round(100 * countIf(hasAny(conditions, extended_codes)) / count(), 2) AS extended_hours_pct
FROM global_markets.stocks_trades
WHERE ticker IN ('AAPL', 'KO', 'MSFT', 'NVDA', 'SPY')
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')
GROUP BY ticker
ORDER BY odd_lot_pct DESCپانچوں ناموں میں odd lot prints تمام prints کے 46.8% سے 85.14% تک رہے۔ یہ column share price کے ساتھ قریب سے حرکت کرتا ہے، کیونکہ یکساں dollar order زیادہ قیمت والے نام میں کم shares خریدتا ہے۔ NVDA سب سے آگے تھا۔ اس کے 2.4% prints late یا derivatively priced tag کے حامل تھے، جبکہ 3.53% prints extended hours کے تھے۔ تینوں buckets کا ہر print حقیقی trade اور حقیقی price پر ہوا، لیکن ان میں سے ہر ایک high اور low set کرنے سے محروم تھا۔
ایک print جو high کو نہیں بڑھاتا
اگلا panel اسی pinned AAPL session کو لیتا ہے، regular 9:30 a.m. سے 4:00 p.m. کی window کو پندرہ منٹ کے buckets میں تقسیم کرتا ہے، اور ہر bucket کے لیے دو highs بناتا ہے۔ ایک line تمام prints میں سے سب سے زیادہ price لیتی ہے۔ دوسری line صرف ان prints میں سے سب سے زیادہ price لیتی ہے جن کی conditions انہیں high set کرنے کے لیے eligible رکھتی ہیں۔
ہر عدد کے پیچھے موجود درست SQL
WITH
(SELECT groupArray(toInt32(id))
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND multiSearchAnyCaseInsensitive(name,
['odd lot', 'form t', 'extended trading hours', 'out of sequence',
'prior reference', 'derivatively priced', 'average price',
'price variation', 'seller'])) AS not_high_low_codes
SELECT
formatDateTime(toStartOfFifteenMinutes(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
round(toFloat64(max(price)), 2) AS tape_high,
round(toFloat64(maxIf(price, NOT hasAny(conditions, not_high_low_codes))), 2) AS eligible_high
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
+ toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
+ toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) < 960
GROUP BY et_time
HAVING countIf(NOT hasAny(conditions, not_high_low_codes)) > 0
ORDER BY et_timeSession 09:30 پر کھلتا ہے۔ Tape high $302.07 جبکہ eligible high $302.07 ہے، اور close تک 26 buckets پر مشتمل رہتا ہے۔ Eligible line کبھی tape line سے اوپر نہیں جا سکتی، کیونکہ eligible prints تمام prints کا ایک subset ہوتے ہیں۔ جہاں دونوں lines ایک دوسرے پر واقع ہوں، وہاں اس پندرہ منٹ کے دوران ہر print کو high set کرنے کی اجازت تھی۔ جہاں اوپری line الگ ہو جائے، وہاں اس window میں کم از کم ایک print بلند ترین eligible price سے اوپر trade ہوا، اور eligibility rules کے مطابق بنائے گئے کسی chart پر وہ price کبھی نظر نہیں آئے گی۔
یہ فرق اس discrepancy کا درست جواب ہے۔ جو source ہر print کی maximum price لیتا ہے، وہ ایک high report کرتا ہے۔ جو source eligibility flags لاگو کرتا ہے، وہ دوسرا high report کرتا ہے۔ جو source premarket اور post-close sessions کو بھی خارج کرتا ہے، وہ تیسرا high report کرتا ہے۔ تینوں ایک ہی tape پڑھ رہے ہوتے ہیں۔
Eligibility layer کتنی قابلِ اعتماد ہے؟
محدود۔ یہ flags reference data ہیں، اور reference data میں corrections ہوتی رہتی ہیں۔ ایک commercial market data provider نے اپنے condition dictionary میں ایسی اصلاح جاری کی جس سے ایک sale condition کی official open اور official close set کرنے کی eligibility دوبارہ classify ہوئی۔ کسی trade میں تبدیلی نہیں آئی۔ متاثرہ ہر دن کا tape fix سے پہلے اور fix کے بعد یکساں تھا۔ تبدیلی صرف lookup table کے ایک flag میں ہوئی، اور اسی کے ساتھ ہر chart اور backtest کا official open اور close بھی بدل گیا جو اس dictionary کے downstream تھا۔
کسی ایک vendor کے OHLC کو tape کے بارے میں حتمی حقیقت کے بجائے tape کی ایک reading سمجھیں۔ جب دو sources میں اختلاف ہو تو دیکھیں کہ ہر source نے کون سے eligibility rules لاگو کیے۔ Delayed and consolidated quote feeds اسی مسئلے کا دوسرا ورژن timing کے ذریعے eligibility کے اوپر لاگو کرتے ہیں۔
Authoritative trade condition code list کہاں موجود ہے؟
Tapes دو national market system plans کے تحت چلتے ہیں: NYSE-listed securities کے لیے CTA Plan، اور Nasdaq-listed securities کے لیے UTP Plan۔ ہر plan اپنے زیرِ انتظام tape کے لیے sale condition specification شائع کرتا ہے۔ یہی specifications authority ہیں۔ Panels کے پیچھے موجود id numbers سمیت downstream تمام data، ان specifications کو vendor کی اپنی numbering میں map کرنے کا نتیجہ ہے۔ ایک provider کا code id دوسرے provider پر لازماً وہی مطلب نہیں رکھتا۔ Numbers کے بجائے categories سمجھیں۔ Categories کئی برسوں سے مستحکم ہیں۔ Numbers lookup table کا حصہ ہیں، اور lookup tables میں ترمیم ہوتی رہتی ہے۔
Data notes
اوپر کے panels میں condition buckets hardcoded id numbers کے بجائے خود dictionary سے بنائے گئے ہیں۔ ہر bucket sale condition family کے اندر name match ہے: odd lot، form T اور extended trading hours، out of sequence، prior reference price، derivatively priced، average price، price variation، seller۔ کسی بھی panel کے نیچے موجود SQL کھول کر exact patterns پڑھے جا سکتے ہیں۔ Codes mutually exclusive نہیں ہیں، اور ایک print کئی codes رکھ سکتا ہے۔ اسی لیے bucket percentages overlap کرتے ہیں اور session کا مجموعہ 100 نہیں بنتا۔ دونوں AAPL panels اور five-name panel June 2026 کے ایک fixed session کا احاطہ کرتے ہیں، جسے SQL میں pinned رکھا گیا ہے۔ اس لیے نئے sessions آنے پر اس page کا کوئی data تبدیل نہیں ہوتا۔
FAQ
Trade condition code کیا ہے؟
یہ consolidated tape پر trade report کے ساتھ منسلک ایک tag ہے، جو report کی نوعیت بیان کرتا ہے۔ مثال کے طور پر late reported، derivatively priced، odd lot یا extended hours۔ ہر code میں ایسے flags شامل ہوتے ہیں جو بتاتے ہیں کہ trade last price، high اور low، open، close اور consolidated volume کو update کر سکتا ہے یا نہیں۔
ایک ہی stock کے لیے دو websites مختلف daily highs کیوں دکھاتی ہیں؟
ہر website ایک ہی prints پر eligibility rules کا مختلف set لاگو کرتی ہے۔ ایک website reported ہر trade کی بلند ترین price لے سکتی ہے۔ دوسری ان prints کو خارج کر سکتی ہے جن کے condition codes انہیں high set کرنے سے روکتے ہیں۔ تیسری premarket اور post-close sessions کو بھی خارج کر سکتی ہے۔ تینوں ایک ہی tape پڑھ رہی ہوتی ہیں۔
کیا odd lot trades volume میں شمار ہوتے ہیں؟
ہاں۔ Odd lot، یعنی 100 shares سے کم trade، consolidated volume میں شمار ہوتا ہے، لیکن last price یا دن کی high اور low set کرنے کے لیے ineligible رہتا ہے۔ Late 2013 سے پہلے odd lots consolidated tape پر بالکل report نہیں ہوتے تھے۔ اس لیے طویل مدتی volume comparisons اس مقام پر definition کی تبدیلی سے گزرتی ہیں۔
کیا after-hours trades daily high اور low میں شمار ہوتے ہیں؟
Regular session کی high اور low میں نہیں۔ Premarket اور post-close prints پر extended hours یا form T condition موجود ہوتی ہے، جو انہیں regular session کے open، high، low اور close سے خارج رکھتی ہے، جبکہ وہ دن کے consolidated volume میں شمار ہوتے ہیں۔
Sale condition codes کی official list کہاں موجود ہے؟
CTA Plan اور UTP Plan اپنے زیرِ انتظام tapes کے لیے sale condition specifications شائع کرتے ہیں، اور یہی documents authority ہیں۔ Vendor feeds conditions کو اپنی id space میں دوبارہ number کرتے ہیں۔ اس لیے ایک provider کا numeric code دوسرے provider پر لازماً اسی number سے match نہیں کرتا۔
یہاں موجود ہر panel اس کے لیے استعمال ہونے والا SQL بھی فراہم کرتا ہے۔ کسی panel کو کھولیں، ticker یا date تبدیل کریں، اور Strasmore terminal پر کسی بھی session کے لیے یہی condition breakdown چلائیں۔