Strasmore Research
Học tập Matt ConnorBởi Matt Connor · Cập nhật 2026-07-23 · data as of July 23, 2026 · refreshed weekly

Thế nào là locked market và crossed market

Tìm hiểu định nghĩa về locked market và crossed market, lý do Reg NMS cấm hai trạng thái này và tần suất chúng xuất hiện trên dữ liệu thị trường.

Thị trường bị khóa (locked market) là thời điểm giá chào mua tốt nhất bằng với giá chào bán tốt nhất — tức là spread bằng chính xác không. Thị trường bị chéo (crossed market) diễn ra nghiêm trọng hơn: giá chào mua tốt nhất cao hơn giá chào bán tốt nhất. Các quy định của thị trường Mỹ cấm các sàn giao dịch hiển thị cả hai trạng thái này, nhưng chúng vẫn thường xuyên xuất hiện trong hồ sơ báo giá hợp nhất. Trang này định nghĩa cả hai trạng thái, giải thích quy định và đo lường tần suất xuất hiện của chúng.

Thị trường bị khóa (locked market) là gì?

Mỗi cổ phiếu tại Mỹ luôn có hai mức giá cùng một lúc: bid (giá mua), là mức giá cao nhất mà người mua sẵn sàng trả, và ask (giá bán), là mức giá thấp nhất mà người bán chấp nhận. Thông thường, giá ask sẽ cao hơn giá bid; khoảng cách giữa chúng là bid-ask spread, chi phí mặc định khi giao dịch ngay lập tức.

Thị trường bị khóa là thời điểm khoảng cách này bằng không: một cổ phiếu có giá bid $10.00 / ask $10.05 có spread là năm cent, và nếu giá ask tốt nhất giảm xuống $10.00 trong khi giá bid vẫn giữ nguyên, báo giá sẽ bị khóa ở mức $10.00 / $10.00.

Trên một sàn giao dịch duy nhất, trạng thái này không thể tồn tại — một lệnh mua ở mức $10.00 gặp lệnh bán ở mức $10.00 sẽ được khớp ngay lập tức. Một báo giá bị khóa chỉ có thể tồn tại giữa các sàn giao dịch với nhau. Cổ phiếu Mỹ được giao dịch trên hơn một chục sàn cùng một lúc, và NBBO — giá bid và ask tốt nhất quốc gia, mức giá mà ứng dụng môi giới của bạn hiển thị — sẽ kết nối mức bid và ask tốt nhất từ tất cả các sàn đó. Một mức bid $10.00 tại sàn này và một mức ask $10.00 tại sàn khác sẽ làm khóa báo giá quốc gia, trong khi không có sàn nào hiển thị sổ lệnh bị khóa.

Thị trường bị chéo (crossed market) là gì?

Một thị trường bị chéo đảo ngược trật tự thông thường: mức giá mua (bid) tốt nhất nằm cao hơn mức giá bán (ask) tốt nhất — ví dụ, giá bid là 10,02 USD trong khi giá ask là 10,00 USD. Trên lý thuyết, bất kỳ ai cũng có thể mua ở mức 10,00 USD, bán ở mức 10,02 USD và thu lợi hai cent mỗi cổ phiếu mà không gặp rủi ro. Khoản lợi nhuận không rủi ro này chính là lý do khiến một báo giá bị chéo không thể tồn tại lâu: các công ty chuyên nghiệp — bao gồm cả các market makers đang báo giá cho cả hai chiều của hầu hết các cổ phiếu — sẽ thực hiện nghiệp vụ arbitrage ngay khi cơ hội xuất hiện, và việc thực hiện này sẽ triệt tiêu cả hai mức giá. Những gì còn lại trong dữ liệu chỉ là sự biến động nhất thời: một bản ghi bị chéo nằm giữa khoảng thời gian cập nhật của sàn giao dịch này và sàn giao dịch khác.

Tại sao Reg NMS cấm các báo giá bị khóa (locked) và bị chéo (crossed)

Quy định này nằm trong Regulation NMS, bộ quy tắc của SEC (được thông qua năm 2005) dành cho giao dịch trên các sàn chứng khoán Hoa Kỳ. Quy tắc 610(d) yêu cầu mỗi sàn giao dịch phải ngăn chặn các thành viên hiển thị các báo giá bị khóa hoặc bị chéo so với protected quotes — tức là các mức giá mua và bán tốt nhất tự động trên các sàn khác — trong giờ giao dịch bình thường. Mục tiêu là: nếu một mức giá bid bằng với mức giá ask của bên khác, giao dịch đó có thể được thực hiện ngay lập tức, và bộ quy tắc muốn lệnh đó được định tuyến và khớp lệnh, thay vì hiển thị như một sự mâu thuẫn đang tồn tại.

Một ranh giới trong quy tắc này có ý nghĩa quan trọng đối với dữ liệu dưới đây: nó điều chỉnh việc hiển thị, không phải sự tồn tại của lệnh. Mỗi sàn giao dịch kiểm soát những gì sổ lệnh của chính họ hiển thị; hồ sơ hợp nhất được tập hợp từ nhiều sàn theo thời gian thực, dựa trên các luồng dữ liệu truyền về liên tục. Một NBBO bị khóa có thể xuất hiện trong hồ sơ đó mà không cần bất kỳ bên tham gia đơn lẻ nào vi phạm quy tắc.

Tại sao các báo giá bị khóa (locked) và bị chéo (crossed) vẫn xuất hiện trên bảng điện

Tốc độ. Các sàn giao dịch cập nhật báo giá trong vài micro giây, và nguồn dữ liệu hợp nhất sẽ tái thiết lập sau mỗi lần cập nhật. Hai sự kiện thông thường sau đây khiến các bản ghi bị khóa và bị chéo xuất hiện:

  • Sự chênh lệch tốc độ (Races). Một sàn giao dịch tăng giá bid lên 10.00 USD trong khi sàn khác vẫn hiển thị giá ask là 10.00 USD. Khi được ghép lại, NBBO sẽ hiển thị trạng thái locked cho đến khi phía chậm hơn cập nhật; trường hợp tương tự nếu giá vượt quá một cent sẽ hiển thị là crossed.
  • Bản ghi cũ hoặc chỉ có một phía. Một số bản ghi chỉ có một phía — giá bid không có giá ask, hoặc ngược lại. Các mã cổ phiếu có thanh khoản thấp thường xuyên rơi vào tình trạng này hơn, như số liệu thống kê dưới đây cho thấy.

Quy tắc tính toán trên trang này: locked = giá bid bằng giá ask, cả hai phía đều dương; crossed = giá bid cao hơn giá ask dương; one-sided = một trong hai phía bằng không hoặc bị thiếu. Không có dữ liệu nào bị loại bỏ âm thầm — các bản ghi one-sided sẽ có cột riêng.

Tần suất xảy ra tình trạng locked và crossed market là bao nhiêu?

Bắt đầu với toàn bộ dữ liệu: mỗi lần cập nhật NBBO, cho mọi mã niêm yết, vào 2026-07-14 — phiên giao dịch hoàn chỉnh gần nhất trong cửa sổ thống kê của chúng tôi.

Truy vấnThống kê toàn bộ tape: các bản ghi locked, crossed và one-sided qua mỗi NBBO update trong phiên
Câu lệnh SQL chính xác đằng sau mỗi con số
WITH (
    SELECT max(toDate(toTimeZone(window_start, 'America/New_York')))
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY' AND window_start < toDateTime(today() - 3)
) AS census_day
SELECT
    formatDateTime(census_day, '%Y-%m-%d') AS session_date,
    round(count() / 1e6, 0) AS updates_m,
    round(countIf(bid_price = ask_price AND bid_price > 0) / 1e6, 2) AS locked_m,
    round(countIf(bid_price > ask_price AND ask_price > 0) / 1e3, 1) AS crossed_k,
    round(countIf(bid_price = ask_price AND bid_price > 0) / toFloat64(greatest(countIf(bid_price > ask_price AND ask_price > 0), 1)), 0) AS locked_per_crossed,
    round(countIf(bid_price >= ask_price AND ask_price > 0 AND bid_price > 0) / toFloat64(count()) * 1e4, 1) AS locked_or_crossed_per_10k,
    round(countIf(bid_price <= 0 OR ask_price <= 0) / toFloat64(count()) * 1e4, 1) AS one_sided_per_10k
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= toDateTime(census_day)
  AND sip_timestamp < toDateTime(census_day + 1)

Phiên đó có 477 triệu cập nhật báo giá: 9.7 triệu lệnh locked và 67 ngàn lệnh crossed — tổng cộng chiếm 204.9 trong mỗi 10.000 cập nhật, với số lượng lệnh locked nhiều hơn crossed theo tỷ lệ 145-to-one. Các bản ghi thiếu một phía (side) là 2.8 trên mỗi 10.000. Bản tóm tắt thị trường ngày 7 tháng 7 cũng hiển thị các con số tương tự bên cạnh mỗi spread mà nó đo lường.

Tỷ lệ toàn thị trường là sự kết hợp từ hàng ngàn mã rất khác nhau. Bảng dưới đây thực hiện lại thống kê trên một nhóm gồm mười mã đã được kiểm tra — gồm tám ticker phổ biến cùng hai mã small cap có thanh khoản thấp là Nathan's Famous (NATH) và Seneca Foods (SENEA) — trong các phiên hoàn chỉnh gần đây, bao gồm cả giờ giao dịch ngoài phiên (extended hours), kèm theo spread báo giá điển hình của mỗi mã.

Truy vấnThống kê theo tên: 8 ticker thanh khoản cao và 2 small cap thanh khoản thấp, các phiên vừa hoàn tất
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT ticker,
       round(count() / 1e3, 1) AS updates_k,
       round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price), bid_price > 0 AND ask_price >= bid_price) * 100, 1) AS median_spread_cents,
       countIf(bid_price = ask_price AND bid_price > 0) AS locked_records,
       countIf(bid_price > ask_price AND ask_price > 0) AS crossed_records,
       round(countIf(bid_price >= ask_price AND ask_price > 0 AND bid_price > 0) / toFloat64(count()) * 1e4, 1) AS locked_or_crossed_per_10k,
       round(countIf(bid_price <= 0 OR ask_price <= 0) / toFloat64(count()) * 1e4, 1) AS one_sided_per_10k
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'QQQ', 'AAPL', 'NVDA', 'MSFT', 'TSLA', 'KO', 'AMD', 'NATH', 'SENEA')
  AND sip_timestamp >= toDateTime(today() - 10)
  AND sip_timestamp < toDateTime(today() - 3)
GROUP BY ticker
ORDER BY ticker

Hãy so sánh cột spread với tỷ lệ tương ứng. Coca-Cola, với spread điển hình là 1¢, có báo giá locked hoặc crossed ở mức 215.9 trên mỗi 10.000 cập nhật; Nvidia (2¢) là 91 trên 10.000 và SPY (2¢) là 52.2. AMD, với spread điển hình trong giờ extended là 44¢, chỉ ở mức 5.9 trên 10.000. Một lệnh lock xảy ra khi hai sàn giao dịch cùng khớp tại một mức giá cent vào cùng một thời điểm — spread điển hình càng rộng thì xác suất này càng thấp.

Các mã có thanh khoản thấp hầu như không đáng kể: Nathan's Famous ghi nhận 0 lệnh locked và 0 lệnh crossed trong tổng số 8.4 ngàn cập nhật, Seneca Foods là 00 trong 40.5 ngàn cập nhật. Cột của họ là cột còn lại: các bản ghi một phía (one-sided) là 41.5 trên mỗi 10.000 ở Nathan's Famous và 17 ở Seneca Foods, so với 0 ở SPY. Các bản ghi locked và crossed thường xuất hiện ở nơi có báo giá nhanh và spread hẹp; các bản ghi một phía xuất hiện ở nơi thanh khoản khan hiếm.

Khi nào các báo giá bị khóa (locked) và bị chéo (crossed) tập trung?

Dữ liệu thống kê cho biết địa điểm; thời gian cho biết thời điểm. Dưới đây là tỷ lệ báo giá bị khóa hoặc bị chéo của tập hợp dữ liệu đã kiểm tra theo từng khung 30 phút giờ Eastern, từ 4:00 sáng đến 8:00 tối, kèm theo lưu lượng cập nhật của mỗi khung.

Truy vấnSố bản ghi locked-or-crossed mỗi 10.000 updates theo khung 30 phút ET, tập hợp kiểm tra, bao gồm cả extended hours
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
       round(countIf(bid_price >= ask_price AND ask_price > 0 AND bid_price > 0) / toFloat64(count()) * 1e4, 1) AS locked_or_crossed_per_10k,
       round(count() / 1e6, 2) AS updates_m
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'QQQ', 'AAPL', 'NVDA', 'MSFT', 'TSLA', 'KO', 'AMD', 'NATH', 'SENEA')
  AND sip_timestamp >= toDateTime(today() - 10)
  AND sip_timestamp < toDateTime(today() - 3)
GROUP BY et_time
HAVING et_time >= '04:00' AND et_time < '20:00'
ORDER BY et_time

Tỷ lệ này tăng dần trong suốt phiên giao dịch. Khung giờ tiền thị trường lúc 05:00 ghi nhận 3 trên 10.000 trên 0.59 triệu cập nhật; khung giờ 09:30 — nửa giờ đầu của phiên giao dịch chính thức, bắt đầu bằng đấu giá mở cửa — đạt 24.9 trên 10.000 trên 9.98 triệu cập nhật. Từ đó, tỷ lệ tăng dần cho đến khi đóng cửa, đạt 109.9 trên 10.000 trong khung giờ 15:30, giai đoạn chuẩn bị cho đấu giá đóng cửa. Một dòng dữ liệu mẫu cho thấy xu hướng:

Truy vấnBảng tổng hợp: tổng số locked so với crossed, và tỷ lệ theo từng giai đoạn phiên (premarket, open, noon, close — ET)
Câu lệnh SQL chính xác đằng sau mỗi con số
SELECT
    round(countIf(is_locked) / 1e3, 1) AS locked_k,
    round(countIf(is_crossed) / 1e3, 1) AS crossed_k,
    round(countIf(is_locked) / toFloat64(greatest(countIf(is_crossed), 1)), 1) AS locked_per_crossed,
    round(countIf((is_locked OR is_crossed) AND et_minute BETWEEN 240 AND 569) / toFloat64(countIf(et_minute BETWEEN 240 AND 569)) * 1e4, 1) AS premarket_per_10k,
    round(countIf((is_locked OR is_crossed) AND et_minute BETWEEN 570 AND 599) / toFloat64(countIf(et_minute BETWEEN 570 AND 599)) * 1e4, 1) AS opening_half_hour_per_10k,
    round(countIf((is_locked OR is_crossed) AND et_minute BETWEEN 720 AND 779) / toFloat64(countIf(et_minute BETWEEN 720 AND 779)) * 1e4, 1) AS midday_hour_per_10k,
    round(countIf((is_locked OR is_crossed) AND et_minute BETWEEN 930 AND 959) / toFloat64(countIf(et_minute BETWEEN 930 AND 959)) * 1e4, 1) AS closing_half_hour_per_10k,
    round((countIf((is_locked OR is_crossed) AND et_minute BETWEEN 930 AND 959) / toFloat64(countIf(et_minute BETWEEN 930 AND 959)))
        / (countIf((is_locked OR is_crossed) AND et_minute BETWEEN 570 AND 599) / toFloat64(countIf(et_minute BETWEEN 570 AND 599))), 1) AS close_to_open_ratio,
    round((countIf((is_locked OR is_crossed) AND et_minute BETWEEN 930 AND 959) / toFloat64(countIf(et_minute BETWEEN 930 AND 959)))
        / (countIf((is_locked OR is_crossed) AND et_minute BETWEEN 720 AND 779) / toFloat64(countIf(et_minute BETWEEN 720 AND 779))), 1) AS close_to_midday_ratio,
    round((countIf((is_locked OR is_crossed) AND et_minute BETWEEN 930 AND 959) / toFloat64(countIf(et_minute BETWEEN 930 AND 959)))
        / (countIf((is_locked OR is_crossed) AND et_minute BETWEEN 240 AND 569) / toFloat64(countIf(et_minute BETWEEN 240 AND 569))), 1) AS close_to_premarket_ratio
FROM (
    SELECT
        bid_price = ask_price AND bid_price > 0 AS is_locked,
        bid_price > ask_price AND ask_price > 0 AS is_crossed,
        toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York')) AS et_minute
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('SPY', 'QQQ', 'AAPL', 'NVDA', 'MSFT', 'TSLA', 'KO', 'AMD', 'NATH', 'SENEA')
      AND sip_timestamp >= toDateTime(today() - 10)
      AND sip_timestamp < toDateTime(today() - 3)
)

Trong toàn bộ khoảng thời gian, tập hợp dữ liệu đã kiểm tra ghi nhận 257.2 ngàn bản ghi bị khóa so với 25.6 ngàn bản ghi bị chéo — cứ mỗi bản ghi bị chéo thì có 10.1 bản ghi bị khóa. Tỷ lệ trong nửa giờ cuối cùng là 109.9 trên 10.000, gấp 4.4 lần tỷ lệ của nửa giờ đầu là 24.9 và gấp 2.3 lần tỷ lệ của khung giờ giữa trưa là 48.5.

Lệnh cấm hiển thị thậm chí không áp dụng trước 9:30 sáng, tuy nhiên toàn bộ khoảng thời gian từ 4:00 đến 9:30 — giao dịch tiền thị trường, với lượng báo giá chỉ bằng một phần nhỏ lưu lượng giờ giao dịch chính thức — chỉ đạt 10.9 trên 10.000, và nửa giờ cuối cùng có tỷ lệ gấp 10.1 mức đó. Các bản ghi này tập trung ở những nơi việc báo giá diễn ra nhanh và chặt chẽ, chứ không phải ở nơi các quy tắc lỏng lẻo nhất.

Ghi chú dữ liệu: phạm vi và phạm vi bao phủ
  • Thống kê toàn bộ băng dữ liệu bao gồm một ngày lịch UTC đầy đủ, bao gồm mọi mã niêm yết; các bảng dữ liệu đã kiểm tra bao gồm một cửa sổ trượt của các phiên giao dịch gần nhất đã hoàn tất, bao gồm cả giờ mở rộng (4:00 sáng – 8:00 tối ET). Mỗi cửa sổ kết thúc trước ngày làm mới ba ngày — kho lưu trữ báo giá có độ trễ nạp dữ liệu là một-đến-hai ngày ở biên trước.
  • Bảng mười mã là một tập hợp dữ liệu đã kiểm tra, không phải là bảng xếp hạng toàn thị trường; các khung thời gian sau 4:00 chiều chạy trên một phần nhỏ lưu lượng giờ giao dịch chính thức (cột số lượng cập nhật được biểu diễn vì lý do đó).
  • Đây là số lượng bản ghi, không phải thời lượng. Phân tích chi tiết theo từng cập nhật — khoảng cách nano giây, cùng với các bản ghi bị chéo và giá chào mua bằng không trên băng dữ liệu SPY của một phiên duy nhất — có trong phân tích chuyên sâu về vi cấu trúc ngày 29 tháng 6.

FAQ

Thị trường bị khóa (locked market) trong chứng khoán là gì?

Thị trường bị khóa là trạng thái báo giá mà mức giá mua tốt nhất (best bid) bằng với mức giá bán tốt nhất (best ask) — tức là spread bằng không. Tình trạng này xảy ra giữa các sàn giao dịch — khi mức giá mua của sàn này khớp với mức giá bán của sàn khác — và Quy định NMS cấm các sàn giao dịch hiển thị các báo giá tạo ra trạng thái này trong giờ giao dịch bình thường.

Điều gì xảy ra khi giá bid cao hơn giá ask?

Khi giá bid cao hơn giá ask, đó là thị trường bị chéo (crossed market). Sổ lệnh của một sàn giao dịch duy nhất không thể tồn tại ở trạng thái đó — các lệnh chồng lấn sẽ được khớp ngay lập tức — và một NBBO bị chéo hầu như luôn là kết quả từ báo giá của hai sàn giao dịch được ghi nhận tại các thời điểm cập nhật khác nhau.

Thị trường bị khóa và bị chéo có vi phạm pháp luật không?

Không đối với nhà đầu tư thông thường. Quy tắc 610(d) của Quy định NMS bắt buộc các sàn giao dịch phải ngăn chặn các thành viên hiển thị các báo giá bị khóa hoặc bị chéo trong giờ giao dịch bình thường. Các bản ghi tạm thời trong nguồn dữ liệu hợp nhất (consolidated feed) chỉ là hệ quả của việc các sàn giao dịch cập nhật tại các thời điểm khác nhau đôi chút.

Tần suất xảy ra thị trường bị khóa và bị chéo là bao nhiêu?

Xảy ra thường xuyên: 9.7 triệu bản ghi bị khóa và 67 nghìn bản ghi bị chéo xuất hiện trên băng dữ liệu hợp nhất (consolidated tape) chỉ tính riêng trong ngày 2026-07-14 — chiếm 204.9 trong mỗi 10.000 bản cập nhật. Tỷ lệ này ở các mã có báo giá chặt chẽ sẽ cao hơn nhiều so với các mã có thanh khoản thấp, và cao hơn vào thời điểm gần đóng cửa so với lúc mở cửa.


Mọi con số trên trang này đều được truy xuất từ một truy vấn đã lưu — hãy mở rộng mã SQL dưới bất kỳ bảng nào để xem chính xác cách tính toán một trạng thái khóa hoặc chéo. Để thực hiện thống kê tương tự cho các mã bạn đang giao dịch, hãy yêu cầu bằng tiếng Anh trên terminal Strasmore.

#locked market#crossed market#market structure#quotes#liquidity