ロックとクロスした市場の違いとは
ロックされた市場とクロスした市場の定義を解説します。Reg NMSによる禁止規定や発生頻度についてもデータに基づき説明します。
ロックされた市場(locked market)とは、銘柄の最良気配の買値(best bid)が最良気配の売値(best ask)と一致する状態、つまりスプレッドがちょうどゼロの状態を指します。クロスした市場(crossed market)はさらに進んだ状態で、最良の買値が最良の売値を上回っている状態を指します。米国市場の規則では、取引所がこれらの状態を表示することは禁止されていますが、統合クオート記録には両方の状態が頻繁に記録されています。本ページでは、両者の定義、規則の解説、およびそれぞれの発生頻度について説明します。
ロックされた市場とは何か?
米国のすべての株式には、同時に2つの価格が存在します。買い手が支払う最高価格であるbid(ビッド)と、売り手が受け入れる最低価格であるask(アスク)です。通常、askはbidよりも高い値に設定されます。この差はbid-ask spreadと呼ばれ、即時取引にかかるコストとなります。
ロックされた市場とは、この差がゼロになる状態を指します。例えば、bidが10.00ドル、askが10.05ドルの銘柄は5セントのスプレッドがありますが、もしaskが10.00ドルまで下落し、bidが維持された場合、価格は10.00ドル / 10.00ドルでロックされます。
単一の取引所内では、このような状態は起こり得ません。10.00ドルの買い注文と10.00ドルの売り注文が一致した場合、その場で約定するためです。ロックされた引用価格(クオート)は、取引所間でのみ発生します。米国の株式は同時に十数もの取引所で取引されており、証券アプリに表示されるNBBO(National Best Bid and Offer:全国最良気配)は、すべての取引所から最良のbidとaskを統合したものです。ある取引所のbidが10.00ドルで、別の取引所のaskも10.00ドルである場合、個々の取引所の板にはロックは現れませんが、全国的な引用価格はロックされます。
クロスした市場とは何か?
クロスした市場とは、通常の仕組みが逆転した状態を指します。最良気配の買値(bid)が、最良気配の売値(ask)よりも高い状態です。例えば、買値が10.02ドル、売値が10.00ドルの場合などが該当します。理論上は、10.00ドルで買い、10.02ドルで売ることで、1株あたり2セントの利益をリスクなしで得ることが可能です。このような利益機会が存在するため、クロスした気配が継続することはありません。多くの銘柄で両側の気配を提示している マーケットメーカー などの専門業者は、裁定機会が発生した瞬間に取引を行い、その結果として両方の気配が消滅します。データ上に残るクロスした記録は、ある取引所と別の取引所の更新の間に生じる、一時的な現象に過ぎません。
なぜReg NMSはロック・クロス・クオートを禁止しているのか
この禁止規定は、米国証券取引所間の取引に関するSECの規則集であるRegulation NMS(2005年採択)に定められています。Rule 610(d)は、各取引所に対し、通常の取引時間中に、他の取引所のprotected quotes(自動化された最良気配値)とロックまたはクロスする気配値を表示することを禁止しています。その目的は、他者のアスクと等しいビッドが存在する場合、それを表示として残すのではなく、即座にルーティングして約定させることにあります。
以下のデータに関連する重要な境界条件があります。この規則は「表示」を規制するものであり、「存在」を規制するものではありません。各取引所は自社のオーダーブックの表示内容を管理します。一方、コンソリデーテッド・レコード(統合記録)は、各取引所から送られる高速なフィードをリアルタイムで集約して作成されます。そのため、個々の参加者が規則に違反していなくても、統合されたNBBOがロック状態として表示されることがあります。
ロックおよびクロスしたクオートが依然として記録される理由
速度の問題です。取引所はマイクロ秒単位でクオートを更新し、コンソリデーテッド・フィードは更新のたびに再構築されます。以下の2つの事象により、ロックおよびクロスしたレコードが混入します。
- レース(競り合い)。 ある取引所がビッドを10.00ドルに引き上げている間に、別の取引所がまだ10.00ドルのアスクを表示している状態です。これらが統合されると、遅い側の更新が行われるまでNBBOは「ロック」と表示されます。同様のレースで価格が1セント上回った場合は「クロス」と表示されます。
- 古いデータおよび片側のレコード。 一部のレコードには片側の情報しか含まれていません。つまり、アスクのないビッド、あるいはその逆の状態です。以下の統計が示す通り、流動性の低い銘柄ではこの状態が長時間続きます。
本ページにおけるカウント規則:locked = ビッドとアスクが等しく、両方の値がプラス。crossed = ビッドがプラスのアスクを上回っている状態。one-sided = いずれかの値がゼロまたは欠落している状態。データが黙って削除されることはありません。片側のレコードには専用の列が用意されています。
ロックおよびクロスした市場はどの程度の頻度で発生するか?
まず市場全体から見ていきます。2026-07-14(当社の調査期間における直近の完了セッション)における、全上場銘柄の全NBBO更新データに基づきます。
各数値の背後にある正確な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百万件、クロス状態が67千件で、更新10,000件につき合計204.9件発生しました。ロックとクロスの比率は145対一でした。また、片側の情報が欠落した記録は、更新10,000件につき2.8件でした。詳細は 7月7日の市場概況 に記載されている各スプレッドの数値と同様です。
市場全体の発生率は、性質の異なる数千もの銘柄を混合したものです。以下の表は、直近の完了セッション(時間外取引を含む)において、主要な8銘柄と流動性の低い小型株2銘柄(Nathan's Famous (NATH) および Seneca Foods (SENEA))の計10銘柄に絞って調査を再実施した結果です。各銘柄の典型的な見積スプレッドも併記しています。
各数値の背後にある正確な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スプレッドの値と発生率を比較してください。Coca-Colaは通常1セント幅のスプレッドですが、更新10,000件につき215.9件のロックまたはクロスが発生しました。Nvidia (2セント) は10,000件につき91件、SPY (2セント) は52.2件でした。AMDは、時間外の典型的な見積幅が44セントであるのに対し、10,000件につきわずか5.9件でした。ロック状態は、2つの取引所が同時に同じ1セントの価格を提示することで発生します。典型的な見積幅が広いほど、その発生確率は低くなります。
流動性の低い銘柄では、発生は極めて稀です。Nathan's Famousは8.4千件の更新のうち、ロックが0件、クロスが0件でした。Seneca Foodsは40.5千件の更新のうち、ロックが0件、クロスが0件でした。もう一つの指標である片側の情報が欠落した記録は、SPYの0件に対し、Nathan's Famousでは10,000件につき41.5件、Seneca Foodsでは17件でした。ロックおよびクロスした記録は、見積が速くスプレッドが狭い銘柄で見られ、片側の情報が欠落した記録は、見積が少ない銘柄で見られます。
ロックおよびクロスした引用価格が集中するタイミングはいつか?
銘柄名が場所を、時刻がタイミングを示します。以下は、米国東部時間の午前4時から午後8時までの30分ごとのバケットにおける、検証済みデータセットのロックまたはクロスした引用価格の割合と、各バケットの更新トラフィックです。
各数値の背後にある正確な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割合はセッションを通じて上昇します。午前5時のプレマーケット・バケットでは、0.59百万件の更新に対し、1万件あたり3でした。オープニング・オークションで始まる通常取引の最初の30分間である午前9時30分のバケットでは、9.98百万件の更新に対し、1万件あたり24.9でした。その後、割合は引けに向けて上昇し、クロージング・オークション前の15時30分のバケットで、1万件あたり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)
)全期間を通じて、検証済みデータセットでは、ロックされたレコードが257.2千件、クロスしたレコードが25.6千件でした。これは、クロスしたレコード1件に対し、ロックされたレコードが10.1件であることを意味します。引け前の30分間の割合は109.9(1万件あたり)であり、これは開始後30分間の24.9の4.4倍、正午の時間の48.5の2.3倍でした。
表示禁止ルールは午前9時30分前には適用されませんが、午前4時から9時30時までの全期間(プレマーケット取引、通常取引トラフィックのわずかな割合での引用)の割合は、わずか1万件あたり10.9であり、引け前の30分間はその10.1倍でした。これらのレコードは、ルールが最も緩い場所ではなく、引用が速く、かつタイトに行われる場所で発生します。
データに関する注記:期間と範囲
- 全テープの調査は、上場されているすべてのシンボルを含む、UTCカレンダーの丸一日間を対象としています。検証済みデータセットのパネルは、延長時間(米国東部時間午前4時〜午後8時)を含む、直近の完了したセッションのローリングウィンドウを対象としています。すべてのウィンドウは、更新日の3日前のデータで終了します。引用ウェアハウスの最前面には、1日から2日の取り込み遅延があります。
- 10銘柄のテーブルは検証済みデータセットであり、市場全体のランキングではありません。午後4時以降の時刻バケットは、通常取引トラフィックのわずかな割合に基づいています(更新件数の列がグラフ化されているのはそのためです)。
- これらはレコードの件数であり、継続時間ではありません。単一セッションのSPYテープにおけるナノ秒単位のギャップ、およびクロスした引用やゼロ・ビッドの受信に関する詳細な調査は、6月29日のマイクロストラクチャ深掘り調査に記載されています。
FAQ
株式市場におけるロック(Locked Market)とは何ですか?
ロックとは、最良気配の買い値(Bid)と売り値(Ask)が一致し、スプレッドがゼロの状態を指します。これは、ある取引所の買い値と別の取引所の売り値が一致することで発生します。Regulation NMSにより、通常の取引時間中にこのような気配値を表示することは禁止されています。
買い値が売り値より高い状態とは何を意味しますか?
買い値が売り値を上回る状態は、クロス(Crossed Market)と呼ばれます。単一の取引所内でこのような状態は発生しません。注文が重なった場合は即座に約定するためです。クロスしたNBBOは、ほぼ常に、更新タイミングがわずかに異なる2つの取引所の気配値が混在したものです。
ロックやクロスは違法ですか?
一般の投資家にとっては違法ではありません。Regulation NMSのRule 610(d)により、取引所は通常の取引時間中に、ロックまたはクロスした気配値を表示することを禁止されています。コンソリデーテッド・フィードに記録される一時的なデータは、各取引所の更新タイミングのずれによるものです。
ロックやクロスはどの程度の頻度で発生しますか?
定期的に発生します。2026-07-14日だけで、9.7百万件のロックと67千件のクロスがコンソリデーテッド・テープに記録されています。これは更新件数10,000件につき204.9件の割合です。この発生率は、流動性の低い銘柄よりも、スプレッドの狭い銘柄で高く、取引開始時よりも取引終了間際の方が高くなります。
このページの数値はすべて保存されたクエリから生成されています。ロックやクロスの集計方法を確認するには、各パネルの下にあるSQLを展開してください。取引している銘柄について同様の統計が必要な場合は、Strasmoreターミナルで英語で指示してください。