Differenza tra locked e crossed market
Analisi tecnica di locked e crossed market. Scopri come il bid-ask spread si azzera o si inverte e come la normativa Reg NMS gestisce queste anomalie.
Un mercato locked si verifica quando il miglior bid di un titolo è uguale al miglior ask — ovvero un bid-ask spread pari esattamente a zero. Un mercato crossed è una condizione più estrema: il miglior bid è superiore al miglior ask. Le regole del mercato statunitense vietano alle borse di mostrare entrambe le situazioni, eppure entrambe compaiono regolarmente nei record delle quotazioni consolidate. Questa pagina definisce entrambi i concetti, spiega la normativa e misura la frequenza con cui si presentano.
Cos'è un mercato locked?
Ogni azione statunitense presenta due prezzi contemporaneamente: il bid, il prezzo massimo offerto da un acquirente, e l'ask, il prezzo minimo accettato da un venditore. L'ask si trova solitamente sopra il bid; la differenza tra i due è lo bid-ask spread, ovvero il costo intrinseco per eseguire un trade immediato.
Un mercato locked si verifica quando questo scarto si azzera: un'azione quotata a $10.00 bid / $10.05 ask presenta uno spread di cinque centesimi; se il miglior ask scende a $10.00 mentre il bid rimane invariato, la quotazione risulta locked a $10.00 / $10.00.
Su una singola exchange tale stato non può persistere: un ordine di acquisto a $10.00 che incontra un ordine di vendita a $10.00 viene eseguito istantaneamente. Una quotazione locked può esistere solo tra diverse sedi di negoziazione. Le azioni USA sono scambiate simultaneamente su oltre una dozzina di exchange, e l'NBBO — il national best bid and offer, la quotazione visualizzata dalla vostra app di brokerage — aggrega il miglior bid e ask di tutte le sedi. Un bid a $10.00 su una sede e un ask a $10.00 su un'altra bloccano la quotazione nazionale, anche se nessuna delle due sedi mostra un order book locked.
Cos'è un mercato incrociato?
Un mercato incrociato inverte la disposizione ordinaria: il miglior bid si trova sopra il miglior ask — ad esempio un bid di $10.02 contro un ask di $10.00. Sulla carta, chiunque potrebbe comprare a $10.00, vendere a $10.02 e incassare due centesimi per azione senza rischio. Questo denaro gratuito è il motivo per cui un quote incrociato non può durare: le società professionali — tra cui i market makers che quotano entrambi i lati della maggior parte degli stock — approfittano dell'arbitrage non appena diventa reale, e l'esecuzione consuma entrambi i quote. Ciò che rimane nei dati è il flicker: un record incrociato catturato tra l'aggiornamento di un venue e quello di un altro.
Perché il Reg NMS vieta le quote locked e crossed
Il divieto è contenuto nel Regulation NMS, il regolamento della SEC (adottato nel 2005) per il trading sulle borse azionarie statunitensi. La Rule 610(d) impone a ogni borsa di impedire ai propri membri di visualizzare quote che creino un lock o un cross rispetto alle protected quotes — ovvero i migliori bid e ask automatizzati su altre borse — durante l'orario regolare di negoziazione. L'obiettivo è che un bid uguale all'ask di un altro operatore possa essere scambiato immediatamente; il regolamento richiede che l'ordine venga instradato ed eseguito, anziché rimanere visualizzato come una contraddizione persistente.
Un limite contenuto nella norma è rilevante per i dati riportati di seguito: esso regola la visualizzazione, non l'esistenza degli ordini. Ogni sede controlla ciò che viene mostrato dal proprio book; il registro consolidato viene assemblato tra le varie sedi in tempo reale, tramite flussi di dati concorrenti. Un NBBO locked può apparire nel registro consolidato senza che alcun singolo partecipante abbia violato la norma.
Perché i quote locked e crossed compaiono ancora nel tape
La velocità. Gli exchange aggiornano i quote in microsecondi e il feed consolidato si ricostruisce ad ogni aggiornamento. Due eventi comuni inseriscono record locked e crossed nel feed:
- Races. Un exchange alza il suo bid a $10.00 mentre un altro mostra ancora un ask a $10.00. Unendo i dati, l'NBBO risulta locked finché il lato più lento non si aggiorna; la stessa race che supera il prezzo di un centesimo risulta crossed.
- Record stale e one-sided. Alcuni record contengono solo un lato — un bid senza ask, o viceversa. I titoli con bassa liquidità passano molto più tempo in questa condizione, come mostra il censimento qui sotto.
Le regole di conteggio di questa pagina: locked = bid uguale ad ask, entrambi i lati positivi; crossed = bid superiore a un ask positivo; one-sided = uno dei due lati è zero o mancante. Nulla viene eliminato silenziosamente — i record one-sided hanno una propria colonna dedicata.
Con quale frequenza si verificano mercati locked e crossed?
Partiamo dall'intero tape: ad ogni aggiornamento NBBO, per ogni simbolo quotato, su 2026-07-14 — la sessione completata più recente nella nostra finestra di censimento.
L'esatto SQL dietro ogni numero
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)Quella sessione ha registrato 477 milioni di aggiornamenti delle quotazioni: 9.7 milioni di quote locked e 67 mila di quote crossed — per un totale di 204.9 ogni 10.000 aggiornamenti, con i casi locked che superano i crossed con un rapporto di 145 a uno. I record privi di un lato (side) sono stati 2.8 ogni 10.000. Il riepilogo di mercato del 7 luglio riporta gli stessi conteggi accanto a ogni spread misurato.
Il tasso relativo all'intero mercato combina migliaia di titoli molto diversi. La tabella seguente ripropone il censimento su un set selezionato di dieci titoli — otto ticker comuni più due small cap con scarsa liquidità, Nathan's Famous (NATH) e Seneca Foods (SENEA) — su recenti sessioni completate, inclusi gli extended hours, con il tipico spread quotato per ogni titolo riportato accanto.
L'esatto SQL dietro ogni numero
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 tickerConfronta la colonna dello spread con il tasso. Coca-Cola, solitamente quotata con uno spread di 1 centesimi, ha mostrato una quotazione locked o crossed in 215.9 casi ogni 10.000 aggiornamenti; Nvidia (2 centesimi) ha registrato 91 ogni 10.000 e SPY (2 centesimi) 52.2. AMD, il cui tipico spread durante la sessione estesa era di 44 centesimi, è arrivata a soli 5.9 ogni 10.000. Un lock si verifica quando due venue raggiungono lo stesso penny nello stesso istante — più ampio è lo spread tipico, maggiore è il tempo necessario per tale coincidenza.
I titoli poco liquidi registrano valori minimi: Nathan's Famous ha prodotto 0 record locked e 0 record crossed su 8.4 mila aggiornamenti, Seneca Foods 0 e 0 su 40.5 mila. La loro colonna è l'altra: i record a lato singolo (one-sided) sono stati di 41.5 ogni 10.000 per Nathan's Famous e 17 per Seneca Foods, contro 0 per SPY. I record locked e crossed si verificano dove la quotazione è veloce e compressa; i record a lato singolo si verificano dove la quotazione è scarsa.
When do locked and crossed quotes cluster?
The name census says where; the clock says when. Here is the checked set's locked-or-crossed rate by 30-minute Eastern Time bucket, 4:00 a.m. to 8:00 p.m., with each bucket's update traffic alongside.
L'esatto SQL dietro ogni numero
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_timeThe rate climbs across the session. The 05:00 premarket bucket measured 3 per 10,000 on 0.59 million updates; the 09:30 bucket — regular trading's first half hour, opened by the opening auction — ran 24.9 per 10,000 on 9.98 million updates. From there the rate builds into the close, reaching 109.9 per 10,000 in the 15:30 bucket, the run-up to the closing auction. One receipt row pins the shape:
L'esatto SQL dietro ogni numero
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)
)Across the whole window the checked set printed 257.2 thousand locked records against 25.6 thousand crossed — 10.1 locked for every crossed. The closing half hour's rate, 109.9 per 10,000, ran 4.4 times the opening half hour's 24.9 and 2.3 times the noon hour's 48.5.
The display ban does not even apply before 9:30 a.m., yet the whole 4:00–9:30 stretch — premarket trading, quoting on a fraction of regular-hours traffic — showed just 10.9 per 10,000, and the closing half hour ran 10.1 times that rate. These records collect where quoting runs fast and tight, not where the rulebook is loosest.
Data notes: window and scope
- The whole-tape census covers one full UTC calendar day, every listed symbol included; the checked-set panels cover a rolling window of recent completed sessions, extended hours (4:00 a.m.–8:00 p.m. ET) included. Every window ends three days behind the refresh date — the quote warehouse carries a one-to-two-day ingest lag at its front edge.
- The ten-name table is a checked set, not a market-wide ranking; clock buckets after 4:00 p.m. run on a small fraction of regular-hours traffic (the update-count column is charted for that reason).
- These are counts of records, not durations. Per-update forensics — nanosecond gaps, plus crossed and zero-bid receipts on a single session's SPY tape — live in the June 29 microstructure deep-dive.
FAQ
Cos'è un mercato locked nelle azioni?
Un mercato locked è una quotazione in cui il miglior bid è uguale al miglior ask — uno spread pari a zero. Si verifica tra diversi exchange — il bid di un venue coincide con l'ask di un altro — e la Regulation NMS impedisce agli exchange di mostrare quotazioni che creino tale condizione durante l'orario regolare.
Cosa significa quando il bid è superiore all'ask?
Un bid superiore all'ask indica un mercato crossed. Il book di un singolo exchange non può presentarsi in questo modo — gli ordini sovrapposti vengono eseguiti immediatamente — e un NBBO crossed è quasi sempre il risultato di quotazioni di due venue catturate durante un aggiornamento.
I mercati locked e crossed sono illegali?
Non per un investitore retail. La Rule 610(d) della Regulation NMS obbliga gli exchange a impedire ai propri membri di mostrare quotazioni locking o crossing durante l'orario regolare. I record transitori nel feed consolidato sono artefatti dovuti a venue che si aggiornano in istanti leggermente diversi.
Con quale frequenza si verificano mercati locked e crossed?
Routine: 9.7 milioni di record locked e 67 mila record crossed raggiungono il tape consolidato solo su 2026-07-14 — 204.9 di ogni 10.000 aggiornamenti. Il tasso è molto più elevato per i titoli con quotazioni strette rispetto a quelli con scarsa liquidità, e aumenta verso la chiusura rispetto all'apertura.
Ogni numero su questa pagina è generato da una query memorizzata — espandi la SQL sotto ogni pannello per vedere esattamente come viene conteggiato un lock o un cross. Per eseguire lo stesso censimento sui titoli che scambi, richiedilo in inglese semplice sul terminale Strasmore.