Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

L2 ڈیٹا سے Queue Position کا تخمینہ کیسے لگائیں

Queue position کا تعین یہ طے کرتا ہے کہ آیا ایک passive آرڈر spread حاصل کرے گا یا نہیں۔ یہاں aggregated بک ڈیٹا سے اس کا تخمینہ لگانے کا طریقہ اور MBO کے انتخاب کا وقت بیان کیا گیا ہے۔

کیو پوزیشن (Queue position) ہی اصل برتری کیوں ہے

ایک passive آرڈر آرڈر بک میں موجود رہتا ہے اور کسی دوسرے کے spread کو عبور کر کے اس تک پہنچنے کا انتظار کرتا ہے۔ price-time priority کے تحت، میچنگ انجن سب سے پہلے قیمت اور پھر آرڈر کے پہنچنے کے وقت کے لحاظ سے آرڈرز کی درجہ بندی کرتا ہے۔ اگر 10,000 شیئرز پہلے ہی $10.00 پر bid کے طور پر موجود ہوں اور آپ 100 شیئرز ان کے پیچھے شامل کریں، تو آپ کی باری آنے سے پہلے ان 10,000 شیئرز کا ٹریڈ ہونا یا کینسل ہونا ضروری ہے۔ اگر آپ اسی قیمت پر آرڈر کینسل کر کے دوبارہ داخل کریں تو آپ لائن میں سب سے پیچھے چلے جائیں گے۔

یہ درجہ بندی ہی معاشی نتائج طے کرتی ہے۔ اگر آپ لائن میں آگے ہوں تو آپ اکثر ٹریڈ کرتے ہیں اور spread کے ساتھ ساتھ add-liquidity ریبیٹ بھی حاصل کرتے ہیں، جو کہ maker-taker fees and rebates کا موضوع ہے۔ اگر آپ لائن میں پیچھے ہوں تو آپ تب ہی ٹریڈ کر پاتے ہیں جب آپ سے آگے موجود تمام آرڈرز ٹریڈ ہو چکے ہوں، اور ایسا تب ہوتا ہے جب ایک طرفہ فلو (one-sided flow) بڑی مقدار میں آئے۔ لائن کے آخر میں fills تب ہوتی ہیں جب قیمت آپ کے لیول کو عبور کرنے والی ہو۔ قیمت وہی، آرڈر وہی، مگر کاروباری نتیجہ مختلف۔

Level 2 ڈیٹا کیا دکھا سکتا ہے اور کیا نہیں

Level 1 بہترین bid اور offer کے ساتھ ہر ایک پر موجود سائز کو ظاہر کرتا ہے۔ Level 2، جسے market by price بھی کہا جاتا ہے، گہرائی (depth) کا اضافہ کرتا ہے: یعنی قیمت کی سطحوں کی ایک فہرست جس میں ہر سطح پر موجود کل سائز درج ہوتا ہے۔ یہ دونوں مجموعی (aggregate) ڈیٹا ہیں، اور Level 1 vs Level 2 market data ان کا مکمل موازنہ کرتی ہے۔ جب $10.00 پر bid 10,000 شیئرز سے کم ہو کر 8,500 پر آتی ہے، تو فیڈ صرف یہ بتاتی ہے کہ 1,500 شیئرز کم ہو گئے ہیں۔ یہ نہیں بتاتی کہ آیا وہ ٹریڈ ہوئے، آیا ایک آرڈر نکلا یا چالیس، یا وہ لائن میں کہاں موجود تھے۔

ایگزیکیوشنز (Executions) دکھائی دینے والا حصہ ہیں: ٹیپ پر ہر ٹریڈ سائز کے ساتھ پرنٹ ہوتی ہے، لہذا آپ انہیں درست طریقے سے تفریق کر سکتے ہیں۔ باقی حصہ کینسلشن (cancellation) ہے، اور یہیں سے اندازے لگانے کا عمل شروع ہوتا ہے۔ نیچے دیا گیا پینل ایک مائع (liquid) اسٹاک کے لیے بدھ 10 جون 2026 کے ایک عام سیشن کے دوران کنسولیڈیٹڈ ٹاپ آف بک کے پیغامات اور ٹیپ پر موجود پرنٹس کا موازنہ کرتا ہے۔

استفسار کریںٹاپ آف بک پیغامات بمقابلہ پرنٹس آن دی ٹیپ، AAPL، 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_time
Run this yourself

08:00 گھنٹہ مارکیٹ کھلنے سے پہلے کا ہے: وہاں ٹاپ آف بک ہر پرنٹ کے مقابلے میں 0.8 بار تبدیل ہوئی، جو پرنٹس سے کم پیغامات ہیں۔ ریگولر سیشن کے دوران یہ تناسب الٹ جاتا ہے۔ 15:00 گھنٹے میں ٹاپ آف بک ہر پرنٹ کے مقابلے میں 1.6 بار تبدیل ہوئی، اور اس ایک گھنٹے میں کل 233433 پیغامات موصول ہوئے۔ کھلی مارکیٹ میں کسی پرائس لیول کے ساتھ جو کچھ ہوتا ہے اس کا زیادہ تر حصہ آرڈرز کا آنا اور جانا ہے بغیر ٹریڈ ہوئے، اور ان میں سے ہر ایونٹ آپ کی لائن میں جگہ کو اتنی مقدار سے تبدیل کرتا ہے جو کوئی بھی ایگریگیٹڈ فیڈ نہیں بتاتی۔

یکساں کینسلشن کا مفروضہ، اور یہ آپ کو کیسے دھوکہ دیتا ہے

پہلا معیاری تجزیہ یہ فرض کرتا ہے کہ کینسلشنز پوری قطار میں یکساں طور پر پھیلی ہوئی ہیں۔ x کو اپنی فریکشنل ڈیپتھ (fractional depth) مان لیں: یعنی آپ سے آگے موجود شیئرز کو آپ کی قیمت پر موجود کل شیئرز پر تقسیم کریں۔ یکساں ماڈل یہ فرض کرتا ہے کہ کسی بھی کینسل ہونے والے شیئر کے آپ سے آگے ہونے کا امکان x کے برابر ہے، یعنی p(x) = x۔ اگر آپ 10,000 شیئرز کی قطار میں آدھے راستے پر بیٹھے ہیں، اور 1,000 شیئرز بغیر کسی پرنٹ کے کینسل ہوتے ہیں، تو ماڈل آپ کو 500 درجے آگے بڑھا دیتا ہے۔

حقیقی قطاریں غیر متوازن ہوتی ہیں۔ جو آرڈر پہلے سے کچھ دیر سے موجود ہو، وہ کسی ایسے شخص کا ہوتا ہے جو انتظار کرنے پر راضی ہے، جبکہ جو آرڈر ابھی تھوڑی دیر پہلے شامل کیا گیا ہو، اس کے چند سیکنڈز میں غائب ہونے کا امکان زیادہ ہوتا ہے۔ کینسلشنز لائن کے پچھلے حصے میں، یعنی آپ کے قریب اور آپ کے پیچھے، زیادہ ہوتی ہیں۔ ان 1,000 کینسل شدہ شیئرز میں سے شاید 200 آپ سے آگے ہوں، جبکہ ماڈل نے آپ کو 500 کا کریڈٹ دے دیا۔ اگر آپ سارا دن ایسا کریں تو سیمولیٹڈ قطار حقیقی قطار سے زیادہ تیزی سے آگے بڑھے گی۔ اس غلطی کا رخ ایک ہی طرف ہے: لائیو آرڈرز کے مقابلے میں زیادہ اور بہتر وقت پر fills کا ملنا۔

قطار کیسے خالی ہوتی ہے

کینسلشنز آپ کو غیر مرئی طریقے سے آگے بڑھاتی ہیں۔ ٹریڈز آپ کو مرئی طریقے سے، پرنٹس کے سائز کے مطابق آگے بڑھاتی ہیں۔

استفسار کریںAAPL پرنٹس کی ٹریڈ سائز کے لحاظ سے تقسیم، 10 جون 2026
ہر عدد کے پیچھے موجود درست 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)
Run this yourself

اس سیشن میں راؤنڈ لاٹ سے کم کے پرنٹس تعداد کے لحاظ سے 90% اور شیئرز کے لحاظ سے 42.5% تھے۔ ایک ہزار شیئرز یا اس سے بڑے بلاکس کل پرنٹس کا 0.2% اور کل والیوم کا 19.9% تھے۔ قطاریں چھوٹے چھوٹے حصوں میں خالی ہوتی ہیں، لہذا پوزیشن 2,000 اور 3,500 کے درمیان کا فاصلہ سینکڑوں پرنٹس کے انتظار پر محیط ہے۔ ایسا سمیلیٹر جو دو بڑی ٹریڈز کے بعد fill دے دیتا ہے، وہ ٹیپ کے زیادہ تر حصے کو نظر انداز کر دیتا ہے۔

وہ آرڈر جو آپ دیکھ نہیں سکتے

ڈیپتھ فیڈز محدود ہوتی ہیں۔ اگر آپ کو دس پرائس لیولز مل رہے ہیں اور آپ کا آرڈر گیارہویں لیول پر ہے، تو آپ کا آرڈر ڈیٹا سے باہر ہے: نہ آپ کو اپنے آگے کا سائز معلوم ہے اور نہ ہی پیچھے شامل ہونے والے آرڈرز کا۔ اس مقام پر آپ اندازہ نہیں لگا رہے بلکہ نمبر خود گھڑ رہے ہیں۔ یہ صورتحال غیر معمولی نہیں بلکہ عام ہے، کیونکہ جو آرڈر مارکیٹ کا پیچھا نہیں کرتا وہ تیزی سے اندرونی سطح سے دور ہو جاتا ہے۔

استفسار کریںبہترین بِڈ اور اس کی قیمت کی سطحیں، AAPL، 15 منٹ کے وقفے
ہر عدد کے پیچھے موجود درست 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_time
Run this yourself

10:00 بکٹ میں بہترین bid اوسطاً $290.29 تھی اور پندرہ منٹ کے اندر 187 مختلف قیمتوں پر گئی۔ ان میں سے ہر قیمت پینی (penny) میں کوٹ ہونے والے اسٹاک کا ایک الگ لیول ہے، لہذا دس لیول کا ویو بک کے دس سینٹس کا احاطہ کرتا ہے۔ اس طرح کے سیشن میں ایک قیمت پر چھوڑا گیا آرڈر طویل وقت تک اس گہرائی سے نیچے رہ سکتا ہے جو اس کا مالک دیکھ سکتا ہے۔

کیو پوزیشن کہاں سب سے زیادہ قیمتی ہے

کیو پوزیشن وہاں سب سے زیادہ قیمتی ہے جہاں قیمت میں بہتری (price improvement) ناممکن ہو۔ ایک اسٹاک جو ایک سینٹ کے spread پر اٹکا ہو، وہاں بہتر قیمت کے ساتھ لائن توڑنے کی گنجائش نہیں ہوتی: ہر کوئی ایک ہی ٹک (tick) پر جمع ہوتا ہے، اور پہنچنے کا وقت باقی معاملات طے کرتا ہے۔ جہاں spread کئی سینٹ چوڑا ہو، وہاں ایک ٹریڈر ایک پینی کے فرق سے پوری قطار کے آگے آ سکتا ہے، اور قیمت کا فیصلہ لائن سے زیادہ اہمیت اختیار کر جاتا ہے۔

استفسار کریںاوسط کوٹڈ اسپریڈ اور ایک سینٹ اسپریڈ پر وقت کا دورانیہ، وسطِ دن 10 جون 2026
ہر عدد کے پیچھے موجود درست 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
Run this yourself

اسی سیشن کے چار وسط مدتی گھنٹوں کے دوران، چھ ناموں میں سب سے تنگ spread والے نام، KO، کا اوسط spread 1.18 سینٹ رہا اور اس نے اپنی 82.5% اپ ڈیٹس پر ایک سینٹ کا spread دکھایا۔ سب سے چوڑا spread رکھنے والا نام، MSFT، اوسطاً 8.46 سینٹ رہا، جس نے اپنی 1.1% اپ ڈیٹس پر ایک سینٹ کا spread دکھایا۔ پہلے نام پر کیلیبریٹ کیا گیا کیو ماڈل دوسرے نام کے بارے میں کوئی مفید معلومات نہیں دیتا۔ وہ آرڈرز جو کوٹس کے درمیان رہتے ہیں، جنہیں midpoint peg orders کہا جاتا ہے، انہی اصولوں کے تحت اپنی الگ لائن بناتے ہیں۔

اپنے بیک ٹیسٹ کے لیے چار تشخیصات

  1. اسی ناموں پر انہی گھنٹوں کے دوران اپنے لائیو fill ریٹ کا سیمولیٹڈ fill ریٹ سے موازنہ کریں۔ ایسا سمیلیٹر جو 70 فیصد آرڈرز کو fill کرتا ہے جبکہ لائیو مارکیٹ میں صرف 40 فیصد fill ہوتے ہیں، وہ آپ کے مفروضے کو بیان کر رہا ہے، مارکیٹ کو نہیں۔
  2. سیمولیٹڈ fills کو دو حصوں میں تقسیم کریں: وہ جہاں پرائس لیول بعد میں برقرار رہا، اور وہ جو تب ہوئے جب لیول مکمل طور پر ختم ہو گیا۔ دوسرے قسم کی طرف جھکاؤ کا مطلب ہے کہ سمیلیٹر آپ کو fills تب دیتا ہے جب قیمت آپ کے لیول کو عبور کر رہی ہوتی ہے۔
  3. مفروضے کو بریکٹ کریں۔ ہر کینسلشن کو قطار کے سامنے سے لے کر دوبارہ رن کریں، پھر ہر کینسلشن کو قطار کے پیچھے سے لے کر۔ یہ دونوں رنز آپ کے منتخب کردہ p(x) کے ارد گرد ایماندارانہ ایرر بارز ہیں۔
  4. پیمائش کریں کہ آپ کی قیمت کتنی بار آپ کی فیڈ کی ڈیپتھ سے باہر رہی۔ وہاں ہونے والی fills خود ساختہ تھیں۔ Look-ahead bias in backtesting اسی ناکامی کو دوسرے زاویے سے بیان کرتا ہے: ایک ایسا نتیجہ جو ایسی معلومات پر مبنی ہو جو حکمتِ عملی کے پاس کبھی تھی ہی نہیں۔

ماڈلنگ کب روکیں اور آرڈر ڈیٹا کب خریدیں

مارکیٹ بائی آرڈر ڈیٹا (MBO) ہر انفرادی آرڈر کے لیے ایک پیغام رکھتا ہے، اس کے پہنچنے سے لے کر ایگزیکیوٹ یا کینسل ہونے تک، ہر ایک کو اس کی اپنی شناخت کے ساتھ ٹیگ کیا جاتا ہے۔ اس فیڈ کو دوبارہ چلائیں تو آپ کی لائن میں جگہ ایک اندازہ نہیں بلکہ ایک گنتی ہوگی، بشرطیکہ آپ اپنے آرڈر کے وینیو تک پہنچنے میں ایک حقیقت پسندانہ تاخیر کا حساب رکھیں۔ یہ ڈیپتھ فیڈ سے زیادہ مہنگا ہے اور اسے اسٹور کرنا بہت زیادہ جگہ لیتا ہے۔

تشخیص 3 فیصلہ کن اصول ہے۔ اگر سامنے اور پیچھے دونوں بریکٹس حکمتِ عملی کو منافع بخش بناتے ہیں، تو درمیانی مفروضہ کافی ہوگا۔ اگر حکمتِ عملی ایک بریکٹ کے تحت منافع کماتی ہے اور دوسرے کے تحت نقصان، تو کیو ماڈل ہی اصل حکمتِ عملی ہے، اور اندازوں کا دفاع کرنے سے بہتر ہے کہ آرڈر بائی آرڈر فیڈ خرید لی جائے۔

پرو-راٹا (Pro-rata) وینیوز سوال بدل دیتے ہیں

کچھ فیوچرز اور آپشنز مارکیٹس آنے والے آرڈر کو قیمت پر موجود آرڈرز میں سائز کے تناسب سے تقسیم کرتی ہیں، نہ کہ پہنچنے کی ترتیب سے۔ وہاں وقت کی اہمیت بہت کم ہوتی ہے، اور کوٹ کیا گیا سائز ہی اصل طاقت بن جاتا ہے: اپنے سائز کو دوگنا کرنے سے ہر fill میں آپ کا حصہ تقریباً دوگنا ہو جاتا ہے۔ ناکامی کا رخ بھی اسی طرف مڑ جاتا ہے، یعنی اپنی ضرورت سے زیادہ سائز کوٹ کرنا۔ Why options orders do not get filled اس بات کا احاطہ کرتا ہے کہ آپشنز بک کی ریٹیل سائیڈ سے یہ کیسا دکھائی دیتا ہے۔

اکثر پوچھے گئے سوالات

ٹریڈنگ میں کیو پوزیشن کیا ہے؟

کیو پوزیشن ایک ہی وینیو پر ایک ہی قیمت پر موجود آرڈرز کے درمیان آپ کا درجہ ہے۔ پرائس-ٹائم پرائیورٹی بک پر، آپ کے آرڈر کے ٹریڈ ہونے سے پہلے آپ سے آگے موجود آرڈرز کا ٹریڈ ہونا یا کینسل ہونا ضروری ہے۔

کیا آپ Level 2 ڈیٹا سے کیو پوزیشن کا حساب لگا سکتے ہیں؟

بالکل نہیں۔ Level 2 ہر پرائس لیول پر کل سائز دکھاتا ہے جس میں آرڈر کی شناخت نہیں ہوتی، لہذا جب سائز بغیر کسی پرنٹ کے غائب ہوتا ہے تو آپ یہ نہیں بتا سکتے کہ وہ شیئرز آپ سے آگے تھے یا پیچھے۔ آپ نمبر کا اندازہ لگا سکتے ہیں اور اس کی حد مقرر کر سکتے ہیں۔ درست اعداد و شمار کے لیے آرڈر بائی آرڈر ڈیٹا کی ضرورت ہوتی ہے۔

بیک ٹیسٹڈ fill ریٹس عام طور پر بہت زیادہ کیوں ہوتے ہیں؟

عام مفروضہ کینسلشنز کو قطار میں یکساں طور پر پھیلاتا ہے، جبکہ حقیقی کینسلشنز لائن کے پچھلے حصے میں زیادہ ہوتی ہیں۔ ایک یکساں ماڈل آپ کے سیمولیٹڈ آرڈر کو حقیقی لائن سے زیادہ تیزی سے آگے بڑھاتا ہے، جو لائیو ٹریڈنگ کے مقابلے میں زیادہ اور بہتر fills کی صورت میں ظاہر ہوتا ہے۔

MBO ڈیٹا کیا ہے؟

مارکیٹ بائی آرڈر ڈیٹا ہر انفرادی آرڈر کو اس کے پہنچنے سے لے کر ایگزیکیوشن یا کینسلشن تک کے پیغامات دیتا ہے۔ یہ وہ فیڈ ہے جہاں لائن میں آپ کی جگہ گننے کے قابل ہوتی ہے نہ کہ ماڈل کرنے کے قابل، جو کہ ایک ٹک کے spread پر کام کرنے والی حکمتِ عملیوں کے لیے سب سے اہم ہے۔

کیا پرو-راٹا وینیوز پر کیو پوزیشن اہمیت رکھتی ہے؟

کم۔ پرو-راٹا ایلوکیشن آنے والے آرڈر کو سائز کے لحاظ سے تقسیم کرتی ہے، لہذا پہلے پہنچنے سے آپ کو کچھ خاص فائدہ نہیں ہوتا اور کوٹ کیا گیا سائز ہی کام کرتا ہے۔ کسی بھی کیو ماڈلنگ سے پہلے یہ چیک کرنا ضروری ہے کہ وینیو کون سا ایلوکیشن ماڈل استعمال کرتا ہے۔


یہاں ہر پینل اس SQL کو ظاہر کرتا ہے جس نے اسے تخلیق کیا۔ ٹکر (ticker) تبدیل کریں، تاریخ بدلیں، اور Strasmore ٹرمینل پر ان ناموں کے بارے میں وہی سوال پوچھیں جن میں آپ ٹریڈ کرتے ہیں۔