Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

MBO বনাম MBP অর্ডার বুক ডেটা: পার্থক্য ও ব্যাখ্যা

MBO এবং MBP ডেটার মূল পার্থক্য হলো ইভেন্ট স্ট্রিম বনাম প্রাইস লেভেলের সমষ্টি। প্রতিটি ডেটা ফরম্যাটের কার্যকারিতা, ব্যবহারের ক্ষেত্র এবং পরিচালনার খরচ সম্পর্কে বিস্তারিত জানুন।

MBO বনাম MBP অর্ডার বুক ডেটা হলো একটি বড় পার্থক্য, যা একটি ছোট লেবেলের আড়ালে ঢাকা থাকে। দুইজন ভেন্ডরই আপনাকে "Level 2" নামে কিছু বিক্রি করতে পারে: MBP (market by price) প্রতিটি প্রাইস লেভেলে থাকা মোট সাইজ পাঠায়, যেখানে MBO (market by order) প্রতিটি অর্ডারকে তার নিজস্ব আইডি (ID) সহ একটি আলাদা ইভেন্ট হিসেবে পাঠায়। একটি হলো বুকের সারসংক্ষেপ; অন্যটি হলো সেই লেজার যা থেকে বুকটি তৈরি হয়, এবং এটি বহন করার জন্য বহুগুণ বেশি ট্র্যাফিকের প্রয়োজন হয়।

MBP এবং MBO অর্ডার বুক ডেটাতে আসলে কী থাকে

MBP বা market by price হলো একত্রিত (aggregated) ডেপথ। প্রতিটি আপডেটে একটি সাইড, একটি প্রাইস লেভেল, সেখানে থাকা মোট ডিসপ্লেড সাইজ এবং কখনও কখনও তার পেছনে থাকা অর্ডারের সংখ্যা উল্লেখ থাকে। MBP-10 হিসেবে বিক্রি হওয়া একটি প্রোডাক্ট আপনাকে প্রতিটি সাইডের সেরা দশটি প্রাইস লেভেল দেয়, যা ট্রেডিং প্ল্যাটফর্মের ল্যাডার এবং প্রতিটি ডেপথ চার্টে সিঁড়ির মতো দেখায়।

MBO বা market by order হলো একটি ইভেন্ট স্ট্রিম। প্রতিটি মেসেজে একটি অর্ডারের নাম থাকে: এর আইডি, সাইড, প্রাইস, ডিসপ্লেড সাইজ এবং এর সাথে কী ঘটেছে। এখানে কিছুই আগে থেকে একত্রিত করা থাকে না। যদি একই প্রাইসে চল্লিশটি অর্ডার থাকে, তবে চল্লিশটি আলাদা মেসেজ তাদের সেখানে রাখে এবং সেই লেভেলের মোট পরিমাণ জানার জন্য আপনাকে চল্লিশটি অর্ডারই মেমরিতে রাখতে হয়।

আমাদের Level 1 বনাম Level 2 মার্কেট ডেটা গাইড-এ ব্রোকারের কাছে রিটেইল টায়ার লেবেলগুলোর অর্থ কী তা আলোচনা করা হয়েছে। ভেন্ডর যখন "Level 2" বলে, তখন বক্সের ভেতরে কী থাকে তার সঠিক নাম হলো MBO এবং MBP, এবং স্কিমা নামটিই জিজ্ঞাসা করা উচিত।

MBO ফিড যে মেসেজ অ্যাকশনগুলো বহন করে

MBO ফিড হলো অর্ডার আইডিগুলোর ওপর প্রয়োগ করা অ্যাকশনের একটি শ্রেণিবিন্যাস। চারটি অ্যাকশন সবচেয়ে বেশি ট্র্যাফিক বহন করে:

  • Add: একটি নতুন অর্ডার একটি নতুন আইডি নিয়ে প্রাইস লেভেলে যুক্ত হয়।
  • Modify: একটি বিদ্যমান আইডি তার প্রাইস বা সাইজ পরিবর্তন করে। সাইজ বাড়ানো বা প্রাইস পরিবর্তন করলে অর্ডারটি নতুন লেভেলের কিউ-এর শেষে চলে যায়; সাইজ কমালে সাধারণত এটি তার আগের অবস্থানেই থাকে।
  • Cancel: একটি আইডি বুক থেকে সম্পূর্ণ বা আংশিকভাবে চলে যায়।
  • Trade বা fill: একটি অ্যাগ্রেসিভ অর্ডার এক বা একাধিক বিদ্যমান আইডির বিপরীতে এক্সিকিউট হয়, যা তাদের সাইজ কমিয়ে দেয় বা বুক থেকে সরিয়ে ফেলে।

MBP-তে এই শব্দভাণ্ডারের কিছুই নেই। একটি MBP আপডেট হলো একটি লেভেল সম্পর্কে বিবৃতি: এই প্রাইসে এখন এতটুকু সাইজ আছে। সাইজটি ক্যান্সেল বা ফিল—যেভাবেই চলে যাক না কেন, আপডেটটি দেখতে একই রকম। নিচের প্যানেলটি সবচেয়ে পাতলা বুকের ওপর সেই লিমিট দেখায়, যা হলো কনসোলিডেটেড টপ অফ বুক, প্রতি সাইডে একটি প্রাইস লেভেল এবং এই নামকরণে MBP-1।

কুয়েরিটপ-অফ-বুক মেসেজের মধ্যে পরিবর্তন (AAPL, ১৬ জুন, ২০২৬, সকাল ১০:০০ থেকে ১০:৩০ ET)
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH
    ordered AS
    (
        SELECT
            row_number() OVER (ORDER BY sip_timestamp, sequence_number) AS msg_index,
            bid_price,
            bid_size,
            lagInFrame(bid_price) OVER (ORDER BY sip_timestamp, sequence_number) AS prev_bid_price,
            lagInFrame(bid_size)  OVER (ORDER BY sip_timestamp, sequence_number) AS prev_bid_size
        FROM global_markets.cache_stocks_quotes
        WHERE ticker = 'AAPL'
          AND sip_timestamp >= '2026-06-16 14:00:00'
          AND sip_timestamp <  '2026-06-16 14:30:00'
          AND bid_price > 0
    ),
    classified AS
    (
        SELECT multiIf(
            bid_price != prev_bid_price, 'best bid price changed',
            bid_size  >  prev_bid_size,  'size joined at the best bid',
            bid_size  <  prev_bid_size,  'size left the best bid',
            'bid untouched, ask side updated') AS message_type
        FROM ordered
        WHERE msg_index > 1
    )
SELECT
    message_type,
    count()                                        AS message_count,
    round(100 * count() / sum(count()) OVER (), 1) AS share_pct
FROM classified
GROUP BY message_type
ORDER BY indexOf(['best bid price changed', 'size joined at the best bid', 'size left the best bid', 'bid untouched, ask side updated'], message_type)
Run this yourself

সেই আধা ঘণ্টায়, 17.6% সংখ্যক মেসেজ সেরা বিডকে অন্য প্রাইসে সরিয়েছে, 17.4% অপরিবর্তিত বিডে সাইজ যোগ করেছে, 12% অপরিবর্তিত বিড থেকে সাইজ সরিয়েছে এবং 53% বিডকে অপরিবর্তিত রেখে অন্য সাইডকে সরিয়েছে। প্রতিটি গ্রুপ একটি প্রাইস লেভেল সম্পর্কে একটি নেট বিবৃতি। কোনোটিই কোনো অর্ডারের নাম উল্লেখ করে না এবং কোনো গাণিতিক হিসাবই সেই আইডি পুনরুদ্ধার করতে পারে না যা অনুপস্থিত।

প্রতিটি স্কিমা কী উত্তর দিতে পারে এবং কী পারে না

MBP-10 সেই প্রশ্নগুলোর উত্তর দেয় যা "সেখানে কত সাইজ ছিল" হিসেবে করা হয়: ল্যাডারের আকৃতি, বুক ইমব্যালেন্স, মিড-এর কাছাকাছি থাকা লিকুইডিটি, এবং ডেপথ চার্ট। এই সবকিছুর জন্য একত্রিত লেভেলই যথেষ্ট।

MBO সেই প্রশ্নগুলোর উত্তর দেয় যা "এই অর্ডারের সাথে কী ঘটেছে" হিসেবে করা হয়: আপনি যোগ দেওয়ার সময় আপনার আগে কত সাইজ ছিল, ক্যান্সেল হওয়ার আগে অর্ডারগুলো কতক্ষণ টিকে থাকে, এবং প্রাইস সরে যাওয়ার আগে টাচ-এ থাকা একটি প্যাসিভ অর্ডার ট্রেড হওয়ার সম্ভাবনা কতটুকু। এই পরিমাণগুলো একত্রিত আকারে থাকে না, এবং অর্ডারগুলোকে যোগ করে একটি লেভেল টোটাল তৈরি করলে সেই ক্রমটি নষ্ট হয়ে যায় যা তাদের সংজ্ঞায়িত করেছিল।

কিউ পজিশন এর সবচেয়ে স্পষ্ট উদাহরণ, এবং এটি শুধুমাত্র price-time priority বনাম pro-rata matching-এর অধীনে অর্থবহ, যেখানে অর্ডারের আগমনের ক্রম নির্ধারণ করে কে আগে ট্রেড করবে। প্রিন্ট সাইজই একে গুরুত্বপূর্ণ করে তোলে: একটি লেভেল অনেকগুলো ছোট এক্সিকিউশনের মাধ্যমে পূর্ণ হয়, একটি বড় এক্সিকিউশনের মাধ্যমে নয়।

কুয়েরিএকই সময়ের মধ্যে ট্রেড সাইজের মিশ্রণ (AAPL, ১৬ জুন, ২০২৬, সকাল ১০:০০ থেকে ১০:৩০ ET)
প্রতিটি সংখ্যার পেছনের সঠিক SQL
SELECT
    multiIf(size < 100,  '1 to 99 shares',
            size < 200,  '100 to 199 shares',
            size < 500,  '200 to 499 shares',
            size < 1000, '500 to 999 shares',
            '1000 or more shares')                 AS trade_size_bucket,
    count()                                        AS trade_count,
    round(100 * count() / sum(count()) OVER (), 1) AS share_pct,
    round(avg(size))                               AS avg_shares
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
  AND sip_timestamp >= '2026-06-16 14:00:00'
  AND sip_timestamp <  '2026-06-16 14:30:00'
  AND size > 0
GROUP BY trade_size_bucket
ORDER BY min(size)
Run this yourself

100 শেয়ারের নিচে প্রিন্ট, যা একটি অড লট, সেই উইন্ডোতে মোট ট্রেডের 92.3% অংশ ছিল, এবং সবচেয়ে বড় বাকেট, 1000 or more shares, ছিল 0.1%। 4,000 শেয়ার প্রদর্শনকারী একটি লেভেলে সেই সাইজের প্রিন্টগুলো পাঠালে, সবার শেষে কিউ-তে যোগ দেওয়া একটি অর্ডার ট্রেড না হয়েই কয়েক ডজন এক্সিকিউশনের মধ্য দিয়ে যেতে পারে। MBP আপনাকে 4,000 দেখায়। MBO আপনাকে লাইনটি দেখায়।

কোনো স্কিমাই হিডেন সাইজ দেখায় না। একটি iceberg order একটি ছোট অংশ প্রদর্শন করে এবং প্রতিবার সেই অংশটি ফিল হয়ে গেলে নতুন আইডি নিয়ে রিফ্রেশ হয়, তাই রিজার্ভ সাইজ কোনো মেসেজেই দেখা যায় না।

MBO থেকে বুক পুনর্গঠন করা একটি স্টেট মেশিন

একটি MBP ফিড আপনাকে সরাসরি উত্তর দেয়। একটি MBO ফিড আপনাকে ইনপুট দেয় এবং আশা করে যে আপনি তা সঠিকভাবে ব্যবহার করবেন:

  1. একটি স্ন্যাপশট থেকে শুরু করুন, অথবা একটি খালি বুক এবং ভেন্যুর ক্লিয়ার মেসেজ থেকে।
  2. অর্ডার আইডি অনুযায়ী প্রতিটি অ্যাড, মডিফাই, ক্যান্সেল এবং ফিল কঠোর ক্রমানুসারে প্রয়োগ করুন।
  3. প্রাইস লেভেল অনুযায়ী দ্বিতীয় একটি ইনডেক্স বজায় রাখুন, কারণ আপনার স্ট্র্যাটেজি সেটিই পড়ে।
  4. সিকোয়েন্স নম্বরগুলো পর্যবেক্ষণ করুন এবং কোনো একটি মিস হলে নতুন স্ন্যাপশট থেকে পুনরায় সিঙ্ক করুন।

ব্যর্থতার ধরনটি খুব শান্ত। একটি ক্যান্সেল মেসেজ মিস করলে একটি ফ্যান্টম অর্ডার সেশনের বাকি সময় আপনার বুকে থেকে যাবে, যা সেই লেভেলের সাইজকে বাড়িয়ে দেবে, কিন্তু কোথাও কোনো এক্সেপশন দেখা দেবে না। MBP অনেক বেশি নমনীয়: প্রতিটি আপডেট একটি লেভেলের মোট সাইজ পুনরায় জানায়, তাই কোনো ভুল ভ্যালু কয়েক মেসেজের মধ্যেই ওভাররাইট হয়ে যায়।

MBO শুধুমাত্র সরাসরি ভেন্যু ফিডে থাকে, প্রতি এক্সচেঞ্জে একটি বুক, যার অর্থ হলো সেগুলোকে চালানো এবং মার্জ করা। কনসোলিডেটেড টেপ হলো একটি সারসংক্ষেপ, যার বিভাজন SIP বনাম direct exchange feeds-এ বর্ণিত হয়েছে।

ব্যান্ডউইথে অতিরিক্ত ডিটেইলের খরচ

মেসেজ কাউন্ট হলো পার্থক্য পরিমাপের সৎ উপায়। নিচের প্যানেলটি পাঁচটি পরিচিত নামের জন্য একই আধা ঘণ্টায় কনসোলিডেটেড টপ-অফ-বুক মেসেজ এবং প্রকৃত প্রিন্টের তুলনা করে।

কুয়েরিটপ-অফ-বুক মেসেজ বনাম প্রিন্টস, ১৬ জুন, ২০২৬, সকাল ১০:০০ থেকে ১০:৩০ ET
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH
    quote_load AS
    (
        SELECT ticker, count() AS quote_messages
        FROM global_markets.cache_stocks_quotes
        WHERE ticker IN ('SPY', 'AAPL', 'NVDA', 'MSFT', 'KO')
          AND sip_timestamp >= '2026-06-16 14:00:00'
          AND sip_timestamp <  '2026-06-16 14:30:00'
        GROUP BY ticker
    ),
    trade_load AS
    (
        SELECT ticker, count() AS trades
        FROM global_markets.stocks_trades
        WHERE ticker IN ('SPY', 'AAPL', 'NVDA', 'MSFT', 'KO')
          AND sip_timestamp >= '2026-06-16 14:00:00'
          AND sip_timestamp <  '2026-06-16 14:30:00'
        GROUP BY ticker
    )
SELECT
    q.ticker                              AS ticker,
    round(q.quote_messages / 1000, 1)     AS quote_messages_thousands,
    round(t.trades / 1000, 2)             AS trades_thousands,
    round(q.quote_messages / t.trades, 1) AS quotes_per_trade_ratio
FROM quote_load AS q
INNER JOIN trade_load AS t ON t.ticker = q.ticker
ORDER BY quotes_per_trade_ratio DESC
Run this yourself

SPY প্রতি প্রিন্টে সবচেয়ে বেশি কোট ট্র্যাফিক বহন করেছে, প্রতি ট্রেডের জন্য 9.6 মেসেজ এবং ত্রিশ মিনিটে 510 হাজার মেসেজ। পাঁচটি নামের মধ্যে বিস্তৃতি অনেক বেশি: প্যানেলের নিচে, MSFT প্রতি প্রিন্টে 0.7 কোট মেসেজ চালিয়েছে, যা প্রতি ট্রেডের জন্য এক মেসেজেরও কম। মনে রাখবেন সেই কলামটি কী গণনা করে: প্রতি সাইডে একটি প্রাইস লেভেল, এমন একটি ফিডে যা ইতিমধ্যে প্রতিটি ভেন্যুকে একটি সেরা বিড এবং অফারে একত্রিত করেছে। একটি দশ-লেভেলের ডেপথ প্রোডাক্ট একে বহুগুণ বাড়িয়ে দেয়, এবং একটি পার-অর্ডার ফিড একে আরও বাড়ায়, কারণ প্রতিটি ভেন্যুর প্রতিটি লেভেলের পেছনে থাকা প্রতিটি অর্ডার তার নিজস্ব অ্যাড, মডিফাই এবং ক্যান্সেল তৈরি করে, তা সে ট্রেড হোক বা না হোক। একই গাণিতিক হিসাব the size of the options quote feed-এ বৃহত্তর পরিসরে দেখা যায়।

কোন অর্ডার বুক ফিড একটি স্ট্র্যাটেজির প্রয়োজন?

অধিকাংশ কাজ MBP-10-এ চলে। ডেপথ চার্ট, ইমব্যালেন্স ফিচার, লিকুইডিটি-অ্যাট-প্রাইস পরিমাপ, এক্সিকিউশন কস্ট মডেল এবং কত সাইজ কোথায় ছিল তা নিয়ে প্রায় সব গবেষণামূলক প্রশ্নের উত্তর একত্রিত লেভেল থেকেই পাওয়া সম্ভব, যা মেসেজ ভলিউমের একটি ক্ষুদ্র অংশ।

MBO তখন প্রয়োজন যখন উত্তরটি একটি নির্দিষ্ট অর্ডারের ওপর নির্ভর করে: কিউ পজিশন, অর্ডারের স্থায়িত্ব, ক্যান্সেল হওয়ার আচরণ, টাচ-এ প্যাসিভ ফিল হওয়ার সম্ভাবনা। যে স্ট্র্যাটেজি লাইনে 200 শেয়ার নাকি 20,000 শেয়ার গভীরে আছে তার ওপর টিকে থাকে, তা একত্রিত ডেটা থেকে পাওয়া সম্ভব নয়। এর জন্য লাইসেন্স ফি, ব্যান্ডউইথ, স্টোরেজ এবং পুনর্গঠিত বুককে সারাদিন সঠিক রাখার জন্য ইঞ্জিনিয়ারিং খরচ বহন করতে হয়।

এই প্যানেলগুলো কীভাবে তৈরি করা হয়েছে
  • প্রতিটি প্যানেলের পেছনের ফিড হলো কনসোলিডেটেড টপ অফ বুক, প্রতি সাইডে একটি প্রাইস লেভেল, এবং ট্রেড টেপ। এটি কোনো ডেপথ ফিড বা পার-অর্ডার ফিড নয়, তাই এই প্যানেলগুলো MBO স্যাম্পল করার পরিবর্তে মেসেজ-ভলিউমের যুক্তিকে তুলে ধরে।
  • উইন্ডোগুলো একটি নির্দিষ্ট অতীত তারিখের সাথে পিন করা হয়েছে, 16 জুন, 2026 সকাল 10:00 থেকে 10:30 ET, যা 14:00 থেকে 14:30 UTC হিসেবে সংরক্ষিত। পিন করা উইন্ডোগুলো পুনর্গঠনের সময় সংখ্যাগুলোকে স্থিতিশীল রাখে।
  • ক্লাসিফিকেশন প্যানেল প্রতিটি মেসেজকে তার আগেরটির সাথে তুলনা করে লেবেল করে। এটি ক্যান্সেল এবং ফিল-এর মধ্যে পার্থক্য করতে পারে না, যা এই পোস্টের বর্ণিত সীমাবদ্ধতা।

FAQ

MBO এবং MBP মার্কেট ডেটার মধ্যে পার্থক্য কী?

MBP বা market by price প্রতিটি প্রাইস লেভেলে ডিসপ্লেড সাইজ একত্রিত করে এবং প্রতি লেভেলে একটি আপডেট পাঠায়। MBO বা market by order প্রতিটি ব্যক্তিগত অর্ডারকে তার নিজস্ব আইডি সহ পাঠায়, সাথে অ্যাড, মডিফাই, ক্যান্সেল এবং ফিল ইভেন্টগুলোও পাঠায়।

Level 2 ডেটা কি MBO ডেটার মতোই?

সাধারণত না। রিটেইল ব্রোকারে "Level 2" বলতে প্রায় সবসময়ই একত্রিত ডেপথ বোঝায়, অর্থাৎ পাঁচ থেকে বিশটি প্রাইস লেভেল সহ MBP। অল্প কিছু ভেন্ডর একই টায়ার নামের অধীনে পার-অর্ডার ফিড বাজারজাত করে, তাই স্কিমার নামই নির্ধারণ করে যে ওয়্যারে কী পৌঁছাবে।

MBO ফিড MBP ফিডের চেয়ে কতটা বড়?

ভেন্যু এবং সিম্বল অনুযায়ী এটি বহুগুণ বড়। শুধুমাত্র কনসোলিডেটেড টপ অফ বুক উপরের প্যানেলের সবচেয়ে ব্যস্ত নামের জন্য প্রতি প্রিন্টে 9.6 মেসেজ ছিল। একটি পার-অর্ডার ফিড প্রতিটি ভেন্যুর প্রতিটি লেভেলের পেছনে থাকা প্রতিটি অ্যাড, মডিফাই এবং ক্যান্সেল যোগ করে, যার মধ্যে বেশিরভাগ অর্ডারই কখনো ট্রেড হয় না।

MBO ডেটা থেকে কি MBP বুক পুনর্গঠন করা সম্ভব?

হ্যাঁ, এবং এটিই স্বাভাবিক পাইপলাইন: প্রতিটি অর্ডার ইভেন্টকে অর্ডার আইডি দ্বারা চিহ্নিত বুকে প্রয়োগ করুন, তারপর লেভেল টোটাল প্রকাশ করুন। উল্টোটি অসম্ভব: একবার অর্ডারগুলো একটি লেভেল টোটালে যোগ হয়ে গেলে, ব্যক্তিগত আইডি এবং তাদের আগমনের ক্রম হারিয়ে যায়।


এখানে প্রতিটি প্যানেল তার পেছনের সঠিক SQL সহ আসে। অন্য কোনো সিম্বল বা সেশনে একই মেসেজ গণনা করতে, Strasmore টার্মিনালে সাধারণ ইংরেজিতে প্রশ্ন করুন।