Strasmore Research
Edukacja Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-07-24 · data as of July 24, 2026 · refreshed weekly

Rynek zablokowany i skrzyżowany analiza

Wyjaśnienie pojęć locked market oraz crossed market. Analiza przyczyn występowania tych zjawisk oraz zgodności z regulacjami Reg NMS w handlu akcjami.

Rynek zablokowany (locked market) występuje, gdy najlepsza oferta kupna odpowiada najlepszej ofercie sprzedaży — spread bid-ask wynosi dokładnie zero. Rynek skrzyżowany (crossed market) to sytuacja, w której najlepsza oferta kupna jest wyższa od najlepszej oferty sprzedaży. Zgodnie z amerykańskimi przepisami giełdy mają zakaz publikowania takich ofert, jednak oba zjawiska regularnie pojawiają się w skonsolidowanym rejestrze kwotowań. Niniejsza strona definiuje oba pojęcia, wyjaśnia obowiązujące zasady oraz mierzy częstotliwość ich występowania.

Czym jest rynek zablokowany?

Każda akcja na rynku US posiada jednocześnie dwie ceny: bid, czyli najwyższą cenę, jaką zapłaci kupujący, oraz ask, czyli najniższą cenę, jaką zaakceptuje sprzedający. Cena ask zazwyczaj jest wyższa od bid; różnica między nimi to spread bid-ask, czyli wbudowany koszt natychmiastowego zawierania transakcji.

Rynek zostaje zablokowany w momencie, gdy ta różnica spada do zera: akcja wyceniana na 10,00 USD bid / 10,05 USD ask posiada pięciocentowy spread, a jeśli najlepsza cena ask spadnie do 10,00 USD przy zachowaniu ceny bid, wycena zostaje zablokowana na poziomie 10,00 USD / 10,00 USD.

Na pojedynczej giełdzie taki stan nie może wystąpić — zlecenie kupna po 10,00 USD spotyka się ze zleceniem sprzedaży po 10,00 USD i transakcja zostaje natychmiast zrealizowana. Zablokowana wycena występuje wyłącznie między różnymi platformami handlowymi. Akcje w USA są przedmiotem obrotu na ponad kilkunastu giełdach jednocześnie, a NBBO — czyli krajowa najlepsza oferta kupna i sprzedaży, którą wyświetla aplikacja maklerska — łączy najlepsze ceny bid i ask ze wszystkich tych rynków. Bid na poziomie 10,00 USD na jednej giełdzie oraz ask na poziomie 10,00 USD na innej blokują krajową wycenę, mimo że żadna z tych giełd nie wykazuje zablokowanego arkusza zleceń.

Czym jest rynek skrzyżowany?

Rynek skrzyżowany odwraca standardowy układ: najlepsza oferta kupna znajduje się powyżej najlepszej oferty sprzedaży — na przykład bid na poziomie 10,02 USD przy ask na poziomie 10,00 USD. Teoretycznie każdy mógłby kupić akcje po 10,00 USD, sprzedać po 10,02 USD i zarobić dwa centy na akcji bez ryzyka. Takie nieuzasadnione zyski sprawiają, że skrzyżowana kwotacja nie może przetrwać: profesjonalne podmioty — w tym market makerzy podający oferty kupna i sprzedaży dla większości akcji — realizują arbitraż natychmiast po jego wystąpieniu, co skutkuje wycofaniem obu ofert. W danych pozostaje jedynie chwilowy błąd: skrzyżowany zapis powstały między aktualizacją z jednego miejsca obrotu a drugim.

Dlaczego Reg NMS zakazuje ofert typu locked i crossed

Zakaz ten wynika z Regulation NMS, czyli zbioru przepisów SEC (przyjętych w 2005 roku) dotyczących handlu na amerykańskich giełdach akcji. Zasada 610(d) wymaga, aby każda giełda uniemożliwiała swoim członkom publikowanie ofert, które tworzą sytuację locked lub crossed względem protected quotes — czyli automatycznych najlepszych ofert kupna i sprzedaży na innych giełdach — w trakcie regularnych godzin handlu. Cel: jeśli cena kupna jest równa cenie sprzedaży innego podmiotu, transakcja powinna zostać natychmiast zrealizowana, a nie wyświetlana jako sprzeczna oferta.

Jedna z granic tej zasady ma znaczenie dla poniższych danych: reguluje ona wyświetlanie, a nie samo istnienie ofert. Każdy rynek kontroluje to, co prezentuje jego własny arkusz zleceń; skonsolidowany zapis jest tworzony w czasie rzeczywistym z wielu źródeł danych przesyłanych jednocześnie. Zablokowany NBBO może pojawić się w takim zapisie, mimo że żaden pojedynczy uczestnik rynku nie złamał zasady.

Dlaczego zablokowane i rozbieżne kwotowania nadal pojawiają się w danych

Szybkość. Giełdy aktualizują kwotowania w mikrosekundach, a skonsolidowany kanał danych jest przebudowywany przy każdej aktualizacji. Dwa zwykłe zdarzenia wprowadzają do niego zablokowane i rozbieżne wpisy:

  • Wyścigi cenowe. Jedna giełda podnosi bid do 10.00 USD, podczas gdy inna nadal wyświetla ask na poziomie 10.00 USD. Po połączeniu danych, NBBO wskazuje stan zablokowany, dopóki wolniejsza strona nie dokona aktualizacji; ten sam wyścig z przekroczeniem ceny o jeden cent wskazuje stan rozbieżny.
  • Nieaktualne i jednostronne wpisy. Niektóre wpisy zawierają tylko jedną stronę — bid bez odpowiadającego mu ask lub odwrotnie. W przypadku mało płynnych walorów zjawisko to występuje znacznie częściej w ciągu dnia, co pokazuje poniższe zestawienie.

Zasady liczenia stosowane na tej stronie: zablokowane = bid jest równy ask, obie strony są dodatnie; rozbieżne = bid jest wyższy od dodatniego ask; jednostronne = jedna ze stron wynosi zero lub jest nieobecna. Żadne dane nie są usuwane po cichu — wpisy jednostronne otrzymują własną kolumnę.

How often do locked and crossed markets happen?

Start with the whole tape: every NBBO update, for every listed symbol, on 2026-07-14 — the most recent completed session in our census window.

ZapytanieZestawienie tape: rekordy typu locked, crossed i one-sided dla wszystkich aktualizacji NBBO w sesji
Dokładny kod SQL dla każdej liczby
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)

That session carried 477 million quote updates: 9.7 million locked and 67 thousand crossed — together 204.9 of every 10,000 updates, locked outnumbering crossed 145-to-one. Records missing a side ran 2.8 per 10,000. The July 7 market recap discloses the same counts beside every spread it measures.

The market-wide rate blends thousands of very different names. The table below reruns the census on a checked set of ten — eight household tickers plus two genuinely thin small caps, Nathan's Famous (NATH) and Seneca Foods (SENEA) — over recent completed sessions, extended hours included, with each name's typical quoted spread alongside.

ZapytanieZestawienie według symboli: 8 płynnych tickerów i 2 mało płynnych small cap, ostatnie sesje
Dokładny kod SQL dla każdej liczby
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

Read the spread column against the rate. Coca-Cola, typically quoted 1¢ wide, showed a locked or crossed quote on 215.9 of every 10,000 updates; Nvidia (2¢) ran 91 per 10,000 and SPY (2¢) 52.2. AMD, whose typical extended-day quote sat 44¢ wide, came in at just 5.9 per 10,000. A lock takes two venues arriving at the same penny at the same instant — the wider the typical quote, the longer that trip.

The thin names barely register: Nathan's Famous printed 0 locked and 0 crossed records across 8.4 thousand updates, Seneca Foods 0 and 0 across 40.5 thousand. Their column is the other one: one-sided records ran 41.5 per 10,000 in Nathan's Famous and 17 in Seneca Foods, against 0 in SPY. Locked and crossed records live where quoting is fast and tight; one-sided records live where quoting is scarce.

Kiedy występują skupiska ofert zablokowanych i krzyżujących się?

Liczebność zestawienia wskazuje miejsce; czas wskazuje moment. Poniżej przedstawiono weryfikowany wskaźnik ofert zablokowanych lub krzyżujących się w 30-minutowych przedziałach czasu Eastern Time, od 4:00 do 20:00, wraz z odpowiadającym im natężeniem ruchu aktualizacji.

ZapytanieRekordy locked-or-crossed na 10 000 aktualizacji w 30-minutowych przedziałach ET, zestaw sprawdzony, uwzględnia godziny pozagiełdowe
Dokładny kod SQL dla każdej liczby
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

Wskaźnik rośnie w trakcie sesji. Przedmarkowy przedział o 05:00 odnotował 3 na 10 000 przy 0.59 milionach aktualizacji; przedział o 09:30 — pierwsza półgodzina handlu regulowanego, rozpoczynająca się przez aukcję otwarcia — wyniósł 24.9 na 10 000 przy 9.98 milionach aktualizacji. Następnie wskaźnik rośnie aż do zamknięcia, osiągając 109.9 na 10 000 w przedziale o 15:30, czyli tuż przed aukcją zamknięcia. Jeden wiersz danych obrazuje ten trend:

ZapytanieZestawienie: sumy locked vs crossed oraz wskaźnik w podziale na etapy sesji (premarket, open, noon, close — ET)
Dokładny kod SQL dla każdej liczby
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)
)

W całym badanym okresie zweryfikowany zestaw wykazał 257.2 tysięcy rekordów zablokowanych wobec 25.6 tysięcy krzyżujących się — jeden zablokowany na każde 10.1 krzyżujących się. Wskaźnik z ostatniej pół godziny sesji, wynoszący 109.9 na 10 000, był 4.4 razy wyższy niż wskaźnik z pierwszej pół godziny wynoszący 24.9 oraz 2.3 razy wyższy niż wskaźnik z godziny południowej wynoszący 48.5.

Zakaz wyświetlania nie obowiązuje przed 9:30, jednak cały okres od 4:00 do 9:30 — handel przedsesyjny, obejmujący cytowania stanowiące ułamek ruchu w godzinach regulowanych — wykazał zaledwie 10.9 na 10 000, a ostatnia pół godzina sesji osiągnęła wskaźnik 10.1 razy wyższy. Rekordy te gromadzą się tam, gdzie cytowania są szybkie i precyzyjne, a nie tam, gdzie przepisy są najbardziej liberalne.

Uwagi do danych: zakres i ramy czasowe
  • Pełne zestawienie obejmuje jeden pełny dzień kalendarzowy UTC, uwzględniając każdy wymieniony symbol; panele zweryfikowanego zestawu obejmują ruchome okno niedawno zakończonych sesji, w tym godziny rozszerzone (4:00–20:00 ET). Każde okno kończy się trzy dni przed datą odświeżenia — magazyn danych cytowań posiada jednodniowe lub dwudniowe opóźnienie w procesie wprowadzania danych.
  • Tabela dziesięciu nazw to zweryfikowany zestaw, a nie ranking rynkowy; przedziały czasowe po 16:00 opierają się na niewielkim ułamku ruchu z godzin regulowanych (kolumna liczby aktualizacji została wykreślona właśnie z tego powodu).
  • Są to liczby rekordów, a nie czas trwania. Szczegółowa analiza pojedynczych aktualizacji — przerwy liczone w nanosekundach oraz otrzymane oferty krzyżujące się i z zerową ofertą kupna na taśmie SPY z jednej sesji — znajdują się w szczegółowej analizie mikrostruktury z 29 czerwca.

FAQ

Czym jest rynek zablokowany (locked market) na rynku akcji?

Rynek zablokowany to sytuacja, w której najlepsza oferta kupna (bid) jest równa najlepszej ofercie sprzedaży (ask) — co oznacza spread wynoszący zero. Zjawisko to występuje między giełdami, gdy oferta kupna na jednym miejscu spotyka się z ofertą sprzedaży na drugim. Zgodnie z Regulation NMS, giełdy mają zakaz publikowania ofert tworzących taki stan podczas regularnych godzin handlu.

Co oznacza sytuacja, gdy cena kupna jest wyższa od ceny sprzedaży?

Cena kupna wyższa od ceny sprzedaży oznacza rynek skrzyżowany (crossed market). Arkusz zleceń na pojedynczej giełdzie nie może przyjąć takiej formy, ponieważ nakładające się zlecenia są natychmiast realizowane. Skrzyżowany NBBO jest niemal zawsze wynikiem ofert dwóch różnych miejsc handlowych, które aktualizują się w nieco różnych momentach.

Czy rynki zablokowane i skrzyżowane są nielegalne?

Nie dla inwestora indywidualnego. Rule 610(d) Regulation NMS nakłada na giełdy obowiązek zapobiegania publikowaniu ofert typu lock lub cross przez ich członków podczas regularnych godzin handlu. Przejściowe zapisy w skonsolidowanym strumieniu danych są efektem aktualizacji ofert w różnych odstępach czasu.

Jak często występują rynki zablokowane i skrzyżowane?

Regularnie: 9.7 milion rekordów zablokowanych i 67 tysięcy rekordów skrzyżowanych trafia do skonsolidowanego rejestru (consolidated tape) w samym dniu 2026-07-14 — stanowią one 204.9 z każdych 10 000 aktualizacji. Wskaźnik ten jest znacznie wyższy dla spółek o wąskim spreadzie niż dla spółek o niskiej płynności, oraz wyższy w czasie zbliżania się do zamknięcia sesji niż podczas jej otwarcia.


Każda liczba na tej stronie pochodzi z zapytania bazowego — rozwiń kod SQL pod dowolnym panelem, aby zobaczyć dokładny sposób liczenia blokad lub skrzyżowań. Aby przeprowadzić taką samą analizę dla handlowanych przez Ciebie spółek, wpisz odpowiednią prośbę w języku angielskim na terminalu Strasmore.

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