Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Cách ước tính vị trí trong hàng đợi từ dữ liệu Level 2

Vị trí trong hàng đợi quyết định liệu lệnh thụ động có khớp được spread hay không. Bạn có thể ước tính từ dữ liệu sổ lệnh tổng hợp hoặc cân nhắc mua dữ liệu MBO.

Vị trí trong hàng đợi (queue position) là thứ tự của bạn trong danh sách các lệnh đang chờ tại một mức giá. Trên các sàn giao dịch áp dụng ưu tiên giá-thời gian (price-time priority), vị trí này quyết định liệu một lệnh thụ động (passive order) có khớp được spread hay không bao giờ được thực thi. Dữ liệu thị trường tổng hợp sẽ không cung cấp con số này cho bạn: bảng Level 2 chỉ hiển thị tổng khối lượng tại mỗi mức giá, chứ không cho biết đó là của ai. Dưới đây là cách ước tính vị trí trong hàng đợi từ dữ liệu mà hầu hết các nhà giao dịch đang có, và cách nhận biết khi nào việc ước tính không còn đủ chính xác.

Tại sao vị trí trong hàng đợi là lợi thế cốt lõi

Một lệnh thụ động nằm trong sổ lệnh (book) và chờ đợi người khác giao dịch đối ứng vào lệnh đó. Theo ưu tiên giá-thời gian, hệ thống khớp lệnh xếp hạng các lệnh chờ theo giá trước và thời gian đến sau. Nếu đã có 10.000 cổ phiếu đặt mua ở mức 10,00 đô la và bạn đặt thêm 100 cổ phiếu phía sau, thì 10.000 cổ phiếu đó phải khớp hoặc hủy trước khi đến lượt bạn. Nếu bạn hủy và đặt lại lệnh ở cùng mức giá, bạn sẽ bị đẩy về cuối hàng.

Thứ tự xếp hạng này quyết định hiệu quả kinh tế. Ở gần đầu hàng, bạn giao dịch thường xuyên và thu được spread cộng với bất kỳ khoản hoàn phí cung cấp thanh khoản nào, chủ đề của phí và hoàn phí maker-taker. Ở gần cuối hàng, bạn chỉ giao dịch sau khi tất cả những người phía trước đã khớp lệnh, điều này thường xảy ra khi có dòng lệnh một chiều với khối lượng lớn. Các lệnh khớp ở cuối hàng thường tập trung vào những khoảnh khắc ngay trước khi giá quét qua mức giá của bạn. Cùng một mức giá, cùng một lệnh, nhưng kết quả kinh doanh lại trái ngược.

Dữ liệu Level 2 có thể và không thể hiển thị những gì

Level 1 là giá mua và giá bán tốt nhất cùng với khối lượng tại mỗi mức. Level 2, còn gọi là dữ liệu thị trường theo giá (market by price), bổ sung độ sâu: danh sách các mức giá với tổng khối lượng đang chờ tại mỗi mức. Cả hai đều là dữ liệu tổng hợp, và so sánh dữ liệu thị trường Level 1 và Level 2 phân tích chi tiết sự khác biệt. Khi lệnh mua ở mức 10,00 đô la giảm từ 10.000 xuống 8.500 cổ phiếu, nguồn dữ liệu chỉ báo cáo 1.500 cổ phiếu đã biến mất. Nó không cho biết số đó đã khớp lệnh, một lệnh đã rút hay bốn mươi lệnh đã rút, hoặc chúng đã nằm ở vị trí nào trong hàng đợi.

Các lệnh khớp (executions) là phần có thể nhìn thấy: băng điện tử (tape) in ra mọi giao dịch kèm khối lượng, vì vậy bạn có thể trừ chính xác số đó. Phần còn lại là hủy lệnh (cancellation), và hủy lệnh chính là nơi bắt đầu của việc phỏng đoán. Bảng dưới đây đếm số lượng thông báo tại đỉnh sổ lệnh hợp nhất so với các lệnh in trên băng điện tử cho một cổ phiếu có tính thanh khoản cao trong một phiên giao dịch thông thường, thứ Tư ngày 10 tháng 6 năm 2026.

Truy vấnSo sánh tin nhắn top of book với lệnh khớp trên tape, AAPL, 10/06/2026
Câu lệnh SQL chính xác đằng sau mỗi con số
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

Giờ 08:00 nằm trước tiếng chuông mở cửa: đỉnh sổ lệnh thay đổi 0.8 lần trên mỗi lệnh in, số lượng thông báo ít hơn số lệnh in. Trong phiên giao dịch chính thức, tỷ lệ này đảo ngược. Trong giờ 15:00, đỉnh sổ lệnh thay đổi 1.6 lần trên mỗi lệnh in, với tổng cộng 233433 thông báo chỉ trong giờ đó. Hầu hết những gì xảy ra với một mức giá trên thị trường mở là các lệnh đến và đi mà không bao giờ khớp, và mỗi sự kiện đó làm thay đổi vị trí của bạn trong hàng đợi một lượng mà không nguồn dữ liệu tổng hợp nào công bố.

Giả định hủy lệnh đồng nhất và sự sai lệch của nó

Cách tiếp cận tiêu chuẩn đầu tiên giả định rằng các lệnh hủy được phân bổ đều trong hàng đợi. Gọi x là độ sâu phân đoạn của bạn: số cổ phiếu phía trước bạn chia cho tổng số cổ phiếu đang chờ tại mức giá của bạn. Mô hình đồng nhất đặt xác suất bất kỳ cổ phiếu nào bị hủy nằm phía trước bạn bằng x, viết là p(x) = x. Nếu bạn đứng ở giữa hàng đợi 10.000 cổ phiếu, thấy 1.000 cổ phiếu bị hủy mà không có lệnh khớp nào, mô hình sẽ đẩy bạn lên trước 500 vị trí.

Các hàng đợi thực tế bị lệch. Một lệnh đã nằm chờ lâu thường thuộc về người kiên nhẫn, trong khi một lệnh vừa mới đặt thường là lệnh "phù du" và biến mất trong vài giây. Các lệnh hủy tập trung về phía cuối hàng, gần bạn và phía sau bạn. Trong số 1.000 cổ phiếu bị hủy đó, có lẽ chỉ 200 cổ phiếu nằm phía trước bạn, trong khi mô hình đã ghi nhận cho bạn 500. Lặp lại điều này cả ngày và hàng đợi mô phỏng sẽ tiến nhanh hơn hàng đợi thực tế. Sai số chỉ chạy theo một hướng: nhiều lệnh khớp hơn, ở những thời điểm tốt hơn so với thực tế.

Cách hàng đợi cạn kiệt

Các lệnh hủy làm bạn di chuyển một cách vô hình. Các lệnh khớp làm bạn di chuyển một cách hữu hình, theo khối lượng của các lệnh in.

Truy vấnPhân bổ quy mô lệnh khớp của AAPL, 10/06/2026
Câu lệnh SQL chính xác đằng sau mỗi con số
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

Các lệnh in dưới một lô chẵn (round lot) chiếm 90% tổng số trong phiên này và 42.5% tổng khối lượng. Các khối lệnh từ một nghìn cổ phiếu trở lên chiếm 0.2% số lệnh in và 19.9% tổng khối lượng. Hàng đợi cạn kiệt theo từng phần nhỏ, vì vậy khoảng cách giữa vị trí 2.000 và 3.500 là hàng trăm lệnh in chờ đợi. Một trình mô phỏng cấp lệnh khớp sau hai giao dịch lớn đã bỏ qua hầu hết dữ liệu trên băng điện tử.

Lệnh mà bạn không thể nhìn thấy

Dữ liệu độ sâu (depth feeds) bị cắt bớt. Nếu bạn nhận được mười mức giá và lệnh của bạn nằm ở mức thứ mười một, lệnh của bạn nằm ngoài dữ liệu: không biết khối lượng phía trước nó, cũng không biết các lệnh tham gia phía sau nó. Tại thời điểm đó, bạn đang tự bịa ra con số thay vì ước tính nó. Tình huống này rất phổ biến, vì một lệnh không đuổi theo thị trường sẽ nhanh chóng rơi khỏi tầm nhìn từ bên trong.

Truy vấnGiá bid tốt nhất và các mức giá đã chạm, AAPL, khung 15 phút
Câu lệnh SQL chính xác đằng sau mỗi con số
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

Trong nhóm 10:00, giá mua tốt nhất trung bình là $290.29 và đã đi qua 187 mức giá khác nhau trong vòng mười lăm phút. Mỗi mức giá đó là một cấp độ riêng biệt trên một cổ phiếu được niêm yết theo xu, vì vậy chế độ xem mười cấp độ chỉ bao phủ mười xu của sổ lệnh. Một lệnh để lại ở một mức giá trong phiên giao dịch như thế này có thể dành thời gian dài nằm dưới mức giá sâu nhất mà chủ sở hữu có thể nhìn thấy.

Vị trí trong hàng đợi có giá trị nhất ở đâu

Vị trí trong hàng đợi có giá trị nhất ở nơi không thể cải thiện giá. Một cổ phiếu bị kẹt ở spread một xu không để lại dư địa để nhảy hàng bằng cách đặt giá tốt hơn: mọi người đều xếp chồng lên nhau ở cùng một tick, và thời gian đến sẽ quyết định phần còn lại. Nơi spread rộng vài xu, một nhà giao dịch có thể bước lên trước toàn bộ hàng đợi chỉ với một xu, và quyết định về giá sẽ quan trọng hơn thứ tự trong hàng.

Truy vấnSpread niêm yết trung bình và thời gian duy trì spread 1 cent, giữa ngày 10/06/2026
Câu lệnh SQL chính xác đằng sau mỗi con số
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

Trong bốn giờ giữa phiên của cùng một phiên giao dịch, mã cổ phiếu hẹp nhất trong sáu mã, KO, có spread trung bình 1.18 xu và cho thấy spread một xu trong 82.5% số lần cập nhật. Mã rộng nhất, MSFT, trung bình 8.46 xu, với spread một xu trong 1.1% số lần cập nhật. Một mô hình hàng đợi được hiệu chỉnh trên mã đầu tiên không mang lại thông tin hữu ích cho mã thứ hai. Các lệnh nằm giữa các mức giá chào mua/chào bán, được đề cập trong lệnh chốt điểm giữa (midpoint peg orders), tạo thành hàng đợi riêng của chúng theo cùng các quy tắc.

Bốn chẩn đoán cho quá trình kiểm thử ngược (backtest) của bạn

  1. So sánh tỷ lệ khớp lệnh mô phỏng với tỷ lệ khớp lệnh thực tế của bạn trên cùng các mã trong cùng khung giờ. Một trình mô phỏng khớp 70% số lệnh trong khi thực tế chỉ khớp 40% đang mô tả giả định của bạn, không phải thị trường.
  2. Chia các lệnh khớp mô phỏng thành hai nhóm: nhóm mà mức giá vẫn tồn tại sau đó, và nhóm chỉ xảy ra khi mức giá đó bị quét sạch hoàn toàn. Một nhóm nghiêng về loại thứ hai có nghĩa là trình mô phỏng đang cấp cho bạn lệnh khớp ngay khi giá quét qua vị trí của bạn.
  3. Đóng khung giả định. Chạy lại với mọi lệnh hủy được lấy từ phía trước hàng đợi, sau đó với mọi lệnh hủy được lấy từ phía sau. Hai lần chạy đó là các thanh sai số trung thực xung quanh bất kỳ p(x) nào bạn chọn.
  4. Đo lường tần suất mức giá của bạn nằm ngoài độ sâu mà dữ liệu của bạn cung cấp. Các lệnh khớp ở đó là do bạn tự bịa ra. Độ chệch nhìn trước (look-ahead bias) trong kiểm thử ngược mô tả sự thất bại tương tự từ một góc độ khác: một kết quả dựa trên thông tin mà chiến lược chưa bao giờ có.

Khi nào nên ngừng mô hình hóa và mua dữ liệu lệnh

Dữ liệu theo lệnh (MBO - Market-by-order) mang thông báo cho mọi lệnh cá nhân, từ khoảnh khắc nó đến cho đến khi nó khớp hoặc hủy, mỗi lệnh đều được gắn định danh riêng. Phát lại nguồn dữ liệu đó và vị trí của bạn trong hàng đợi là một con số đếm được thay vì ước tính, khi bạn giả định một độ trễ thực tế cho lệnh của chính mình khi đến sàn. Nó tốn kém hơn dữ liệu độ sâu và tốn nhiều dung lượng lưu trữ hơn.

Chẩn đoán 3 là quy tắc quyết định. Nếu cả hai khung phía trước và phía sau đều làm cho chiến lược có lợi nhuận, thì một giả định ở giữa là đủ. Nếu chiến lược kiếm được tiền theo một khung nhưng thua lỗ theo khung kia, thì mô hình hàng đợi chính là chiến lược, và việc mua dữ liệu theo lệnh sẽ rẻ hơn so với việc bảo vệ một phỏng đoán.

Các sàn giao dịch theo tỷ lệ (pro-rata) thay đổi câu hỏi

Một số thị trường tương lai và quyền chọn chia một lệnh đến theo tỷ lệ khối lượng thay vì theo thứ tự thời gian. Thời gian ở đó ít quan trọng hơn nhiều, và khối lượng niêm yết trở thành đòn bẩy: tăng gấp đôi khối lượng của bạn sẽ tăng gấp đôi phần khớp lệnh của bạn. Chế độ thất bại cũng thay đổi theo, hướng tới việc niêm yết khối lượng lớn hơn mức bạn muốn sở hữu. Tại sao lệnh quyền chọn không được khớp đề cập đến cách nhìn nhận điều này từ phía nhà đầu tư cá nhân trong sổ lệnh quyền chọn.

Câu hỏi thường gặp

Vị trí trong hàng đợi trong giao dịch là gì?

Vị trí trong hàng đợi là thứ hạng của bạn giữa các lệnh đang chờ tại cùng một mức giá trên cùng một sàn. Trên sổ lệnh ưu tiên giá-thời gian, các lệnh phía trước bạn phải khớp hoặc hủy trước khi lệnh của bạn có thể khớp.

Bạn có thể tính toán vị trí trong hàng đợi từ dữ liệu Level 2 không?

Không chính xác. Level 2 hiển thị tổng khối lượng theo mức giá mà không có định danh lệnh, vì vậy khi khối lượng biến mất mà không có lệnh in, bạn không thể biết liệu số cổ phiếu đó nằm phía trước hay phía sau bạn. Bạn có thể ước tính con số và đóng khung ước tính đó. Con số chính xác cần dữ liệu theo từng lệnh (order-by-order).

Tại sao tỷ lệ khớp lệnh trong kiểm thử ngược thường quá cao?

Giả định phổ biến là phân bổ các lệnh hủy đều khắp hàng đợi, trong khi thực tế các lệnh hủy tập trung về phía cuối hàng. Một mô hình đồng nhất đẩy lệnh mô phỏng của bạn lên nhanh hơn thực tế, dẫn đến kết quả là nhiều lệnh khớp hơn và tốt hơn so với giao dịch thực tế.

Dữ liệu MBO là gì?

Dữ liệu theo lệnh (Market-by-order) cung cấp thông báo cho từng lệnh cá nhân, từ khi đến cho đến khi khớp hoặc hủy. Đây là nguồn dữ liệu mà vị trí của bạn trong hàng đợi là con số đếm được thay vì mô hình hóa, điều này quan trọng nhất đối với các chiến lược sống dựa trên spread một tick.

Vị trí trong hàng đợi có quan trọng trên các sàn pro-rata không?

Ít quan trọng hơn. Phân bổ theo tỷ lệ (pro-rata) chia một lệnh đến cho các lệnh đang chờ dựa trên khối lượng, vì vậy đến trước không có nhiều ý nghĩa và khối lượng niêm yết mới là yếu tố quyết định. Việc kiểm tra mô hình phân bổ mà sàn sử dụng cần được thực hiện trước bất kỳ mô hình hóa hàng đợi nào.


Mỗi bảng ở đây đều chứa mã SQL đã tạo ra nó. Hãy thay đổi ticker, thay đổi ngày và đặt câu hỏi tương tự về các mã bạn giao dịch trên thiết bị đầu cuối Strasmore.