Locked and Crossed Market
Locked market(잠긴 시장)과 Crossed market(교차 시장)의 정의를 알아보고 Reg NMS 규제 및 발생 빈도를 분석합니다.
Locked market(매수-매도 호가 불일치 시장)는 주식의 최고 매수 호가(best bid)가 최고 매도 호가(best ask)와 동일한 상태, 즉 bid-ask spread(매수-매도 호가 스프레드)가 정확히 zero(0)인 순간을 의미합니다. Crossed market(교차 시장)은 이보다 더 나아가 최고 매수 호가가 최고 매도 호가보다 높은 상태를 말합니다. 미국 시장 규정에 따라 거래소는 이러한 상태를 표시할 수 없으나, consolidated quote record(통합 시세 기록)에는 두 경우 모두 빈번하게 나타납니다. 이 페이지에서는 두 상태의 정의와 관련 규정을 설명하고, 각 상태가 발생하는 빈도를 측정합니다.
Locked market(잠긴 시장)란 무엇인가?
모든 미국 주식은 두 가지 가격을 동시에 가집니다. 구매자가 지불할 의사가 있는 최고가인 bid(매수 호가)와 판매자가 수용할 의사가 있는 최저가인 ask(매도 호가)입니다. 일반적으로 ask는 bid보다 높게 형성됩니다. 이 두 가격 사이의 차이를 bid-ask spread(매수-매도 스프레드)라고 하며, 이는 즉각적인 거래를 위해 발생하는 내재적 비용입니다.
Locked market(잠긴 시장)은 이 차이가 0이 되는 순간을 의미합니다. 예를 들어, 주식의 bid가 $10.00이고 ask가 $10.05라면 5센트의 스프레드가 존재합니다. 만약 최저 ask가 bid와 동일한 $10.00로 하락하면, 해당 호가는 $10.00 / $10.00로 locked(잠김) 상태가 됩니다.
단일 거래소 내에서는 이러한 상태가 유지될 수 없습니다. $10.00의 매수 호가와 $10.00의 매도 호가가 만나면 즉시 거래가 체결되기 때문입니다. Locked quote(잠긴 호가)는 거래소 간의 차이에서만 발생합니다. 미국 주식은 동시에 십여 개 이상의 거래소에서 거래됩니다. 이때 브로커리지 앱이 보여주는 호가인 NBBO(National Best Bid and Offer, 전국 최우선 매수-매도 호가)는 모든 거래소의 최적 bid와 ask를 통합하여 보여줍니다. 한 거래소의 bid가 $10.00이고 다른 거래소의 ask가 $10.00인 경우, 각 거래소의 호가창은 잠기지 않은 상태를 유지하더라도 전국 단위의 호가는 locked 상태가 됩니다.
Crossed market(교차 시장)이란 무엇인가?
Crossed market(교차 시장)은 일반적인 구조와 반대로 형성됩니다. 최우선 매수 호가(best bid)가 최우선 매도 호가(best ask)보다 높은 상태를 의미합니다. 예를 들어 매수 호가는 $10.02이고 매도 호가는 $10.00인 경우입니다. 이론상으로는 누구나 $10.00에 매수하여 $10.02에 매도함으로써 주당 두 센트의 수익을 위험 없이 얻을 수 있습니다. 이러한 무위험 수익이 존재하는 한 교차 호가는 지속될 수 없습니다. 대부분의 주식에 대해 양방향 호가를 제시하는 market makers(시장 조성자)와 같은 전문 기업들이 차익거래 기회가 발생하는 즉시 이를 실행하여 양측 호가를 모두 소진하기 때문입니다. 데이터에 남는 교차 기록은 한 거래소의 업데이트와 다른 거래소의 업데이트 사이에 발생하는 일시적인 현상입니다.
Reg NMS가 locked 및 crossed quotes를 금지하는 이유
이 금지 규정은 미국 증권거래소 간 거래를 위한 SEC(Securities and Exchange Commission, 증권거래위원회) 규정집인 Regulation NMS(2005년 채택)에 포함되어 있습니다. Rule 610(d)에 따라 각 거래소는 정규 거래 시간 동안 회원사가 protected quotes(다른 거래소의 자동 최우선 매수 및 매도 호가)와 일치하거나 이를 교차하는 호가를 표시하는 것을 방지해야 합니다. 이는 매수 호가가 타인의 매도 호가와 일치할 경우 즉시 거래가 이루어져야 하며, 해당 호가가 모순된 상태로 게시되지 않고 주문이 전달 및 체결되도록 하기 위함입니다.
아래 데이터와 관련하여 규정의 한계점 하나를 유의해야 합니다. 이 규정은 호가의 '존재'가 아닌 '표시'를 규제합니다. 각 거래소는 자체 호가창에 표시되는 내용을 통제합니다. 통합 기록은 여러 거래소에서 실시간으로 전송되는 피드를 통해 취합됩니다. 따라서 개별 참여자가 규정을 위반하지 않더라도 통합 NBBO(National Best Bid and Offer) 상에는 locked 상태가 나타날 수 있습니다.
Locked 및 Crossed Quote가 여전히 기록되는 이유
속도 문제입니다. 거래소는 마이크로초 단위로 호가를 업데이트하며, 통합 피드(consolidated feed)는 모든 업데이트 시마다 데이터를 재구성합니다. 다음 두 가지 일반적인 상황이 발생하면 locked 및 crossed 기록이 생성됩니다.
- 경합(Races). 한 거래소의 매수 호가(bid)가 $10.00로 상승하는 동안 다른 거래소의 매도 호가(ask)는 여전히 $10.00를 표시하는 경우입니다. 데이터가 결합된 NBBO(National Best Bid and Offer)는 느린 측의 업데이트가 이루어질 때까지 locked 상태로 나타납니다. 동일한 경합 상황에서 가격이 1센트 초과하여 형성되면 crossed 상태로 나타납니다.
- 지연 및 단방향 기록(Stale and one-sided records). 일부 기록은 매수 호가만 있고 매도 호가가 없거나, 그 반대인 경우처럼 한쪽 측면만 포함합니다. 아래 통계에서 볼 수 있듯이, 거래량이 적은 종목(thin names)은 하루 중 상당 시간을 이 상태로 보냅니다.
이 페이지의 집계 규칙: locked = 매수 호가와 매도 호가가 동일하며 양측 모두 양수임; crossed = 매수 호가가 양수인 매도 호가보다 높음; one-sided = 어느 한쪽이 0이거나 누락됨. 데이터는 임의로 삭제되지 않으며, one-sided 기록은 별도의 열에 표시됩니다.
Locked market와 crossed market는 얼마나 자주 발생하는가?
전체 거래 내역을 기준으로 살펴보겠습니다. 2026-07-14 — 당사 조사 기간 중 가장 최근에 종료된 세션 내의 모든 상장 종목에 대한 모든 NBBO(National Best Bid and Offer) 업데이트를 기준으로 합니다.
모든 수치 뒤에 숨겨진 정확한 SQL
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)해당 세션에서는 477백만 건의 호가 업데이트가 발생했습니다. 그중 9.7백만 건은 locked market(매수와 매도 호가가 동일한 상태)이었고, 67천 건은 crossed market(매수 호가가 매도 호가보다 높은 상태)이었습니다. 이는 전체 업데이트 10,000건당 총 204.9건에 해당하며, locked market이 crossed market보다 145대 일의 비율로 더 많이 발생했습니다. 한쪽 호가 정보가 누락된 기록은 10,000건당 2.8건이었습니다. 7월 7일 시장 요약에서도 측정된 모든 스프레드 옆에 동일한 수치가 기재되어 있습니다.
시장 전체의 발생률은 매우 다양한 종목들을 혼합한 결과입니다. 아래 표는 최근 종료된 세션(연장 거래 포함) 동안 검증된 10개 종목에 대해 조사를 재실행한 결과입니다. 여기에는 8개의 대형주와 유동성이 매우 낮은 두 개의 소형주인 Nathan's Famous (NATH) 및 Seneca Foods (SENEA)가 포함되며, 각 종목의 일반적인 호가 스프레드도 함께 표시됩니다.
모든 수치 뒤에 숨겨진 정확한 SQL
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스프레드 열을 발생률과 비교해 보십시오. 일반적인 호가 스프레드가 1센트인 Coca-Cola는 10,000건의 업데이트당 215.9건의 locked 또는 crossed 호가를 기록했습니다. NVDA(2센트)는 10,000건당 91건, SPY(2센트)는 52.2건이었습니다. 일반적인 연장 거래 호가 스프레드가 44센트인 AMD는 10,000건당 단 5.9건에 그쳤습니다. locked market은 두 거래소의 호가가 동일한 시점에 동일한 가격으로 일치할 때 발생합니다. 일반적인 호가 스프레드가 넓을수록 해당 상태에 도달하는 데 더 오랜 시간이 걸립니다.
유동성이 낮은 종목은 발생 빈도가 매우 낮습니다. Nathan's Famous는 8.4천 건의 업데이트 중 locked market 0건, crossed market 0건을 기록했으며, Seneca Foods는 40.5천 건 중 0건과 0건을 기록했습니다. 해당 종목들의 다른 열을 보면, 한쪽 호가 정보가 누락된 기록은 SPY의 0건 대비 Nathan's Famous는 10,000건당 41.5건, Seneca Foods는 17건이었습니다. locked 및 crossed market은 호가 체결이 빠르고 스프레드가 좁은 곳에서 발생하며, 한쪽 호가 누락 기록은 호가 공급이 부족한 곳에서 발생합니다.
Locked quote와 crossed quote는 언제 집중되는가?
명칭 센서스는 위치를 나타내고, 시계는 시점을 나타냅니다. 다음은 동부 표준시 기준 04:00부터 20:00까지 30분 단위로 집계한 검증된 데이터 세트의 locked-or-crossed(호가 불일치 또는 교차) 비율이며, 각 구간별 업데이트 트래픽도 함께 포함되어 있습니다.
모든 수치 뒤에 숨겨진 정확한 SQL
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비율은 거래 세션 전반에 걸쳐 상승합니다. 05:00 premarket(장전 시간외 거래) 구간은 0.59 million(백만) 건의 업데이트 중 10,000건당 3를 기록했습니다. opening auction(개장 경매)로 시작되는 정규 거래 첫 30분인 09:30 구간은 9.98 million 건의 업데이트 중 10,000건당 24.9를 기록했습니다. 이후 비율은 장 마감까지 상승하여, closing auction(종가 경매) 직전인 15:30 구간에서 10,000건당 109.9에 도달합니다. 한 수신 행이 그 형태를 보여줍니다:
모든 수치 뒤에 숨겨진 정확한 SQL
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)
)전체 관찰 기간 동안 검증된 데이터 세트는 locked(호가 불일치) 기록 257.2 thousand(천) 건과 crossed(교차) 기록 25.6 thousand(천) 건을 기록했습니다. 이는 crossed 기록 하나당 locked 기록이 10.1개임을 의미합니다. 종가 전 30분간의 비율인 109.9 per 10,000은 개장 후 30분간의 비율인 24.9보다 4.4배 높았으며, 정오 시간대의 48.5보다는 2.3배 높았습니다.
표시 금지 규정은 오전 09:30 이전에는 적용되지 않지만, 정규 거래 트래픽의 일부인 premarket trading(장전 시간외 거래)를 포함한 04:00–09:30 전체 구간의 비율은 10,000건당 10.9에 불과했습니다. 종가 전 30분간의 비율은 이보다 10.1배 높았습니다. 이러한 기록은 규정이 가장 느슨한 곳이 아니라, 호가 제출이 빠르고 밀집된 곳에서 발생합니다.
데이터 참고 사항: 관찰 기간 및 범위
- 전체 테이프 센서스는 모든 상장 종목을 포함하여 UTC 기준 하루 전체를 대상으로 합니다. 검증된 데이터 세트 패널은 연장 거래(동부 표준시 04:00–20:00)를 포함하여 최근 완료된 세션의 이동 창을 대상으로 합니다. 모든 관찰 기간은 갱신일로부터 3일 전 시점에서 종료됩니다. quote warehouse(호가 저장소)의 전방부에는 one-to-two-day(1~2일)의 데이터 수집 지연이 존재합니다.
- 10개 종목 테이블은 시장 전체 순위가 아닌 검증된 데이터 세트입니다. 오후 04:00 이후의 시간 구간은 정규 거래 트래픽의 극히 일부만을 대상으로 합니다(업데이트 횟수 열이 차트로 표시된 이유입니다).
- 이 수치들은 지속 시간이 아닌 기록의 개수입니다. 단일 세션의 SPY 테이프에 대한 나노초 간격, crossed 및 zero-bid(매수 호가 부재) 수신 등 업데이트당 정밀 분석 결과는 6월 29일 미세구조 심층 분석에서 확인할 수 있습니다.
FAQ
주식 시장의 Locked Market(매수-매도 호가 일치)란 무엇인가?
Locked Market(매수-매도 호가 일치)은 최우선 매수 호가(Best Bid)와 최우선 매도 호가(Best Ask)가 동일하여 스프레드(Spread)가 0이 되는 상태를 의미한다. 이는 서로 다른 거래소 간에 한 거래소의 매수 호가와 다른 거래소의 매도 호가가 일치할 때 발생한다. Regulation NMS(미국 시장 구조 규제)는 정규 거래 시간 동안 이러한 호가를 표시하는 것을 금지하고 있다.
매수 호가가 매도 호가보다 높은 것은 무엇을 의미하는가?
매수 호가가 매도 호가보다 높은 상태를 Crossed Market(매수-매도 호가 교차)라고 한다. 단일 거래소의 호가창에서는 이러한 상태가 유지될 수 없으며, 중첩된 주문은 즉시 체결된다. 따라서 Crossed NBBO(National Best Bid and Offer, 전국 최우선 매수-매도 호가)는 대부분 두 거래소의 호가가 업데이트되는 시점이 미세하게 달라 발생하는 현상이다.
Locked Market과 Crossed Market은 불법인가?
일반 투자자에게는 해당되지 않는다. Regulation NMS의 Rule 610(d)에 따라 거래소는 정규 거래 시간 동안 회원사가 호가를 일치시키거나 교차하여 표시하는 것을 방지해야 한다. 통합 피드(Consolidated Feed)에 나타나는 일시적인 기록은 각 거래소의 업데이트 시점이 서로 다르기 때문에 발생하는 흔적이다.
Locked Market과 Crossed Market은 얼마나 자주 발생하는가?
정기적으로 발생한다. 2026-07-14 하루에만 9.7 million(백만) 건의 Locked Market과 67 thousand(천) 건의 Crossed Market 기록이 통합 테이프(Consolidated Tape)에 기록된다. 이는 전체 업데이트 건수 10,000건당 204.9의 비율이다. 이 발생률은 호가 스프레드가 좁은 종목에서 더 높게 나타나며, 장 초반보다 장 마감 직전에 더 높게 나타난다.
이 페이지의 모든 수치는 저장된 쿼리(Query)를 통해 산출된다. Lock 또는 Cross의 정확한 집계 방식을 확인하려면 각 패널 하단의 SQL을 확장하여 확인하면 된다. 거래 중인 종목에 대해 동일한 통계를 확인하려면 Strasmore 터미널에 영어로 요청하면 된다.