Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

L2データからキューポジションを推定する方法

キューポジションはパッシブ注文の約定率を左右する重要な指標です。集計されたL2データからこの順位を推定する手法と、より詳細なMBOデータが必要となる境界線について解説します。一万株の注文が並ぶ中で、自身の注文がいつ約定するかを判断するための論理的なアプローチを学びましょう。

キューポジションとは、同一価格に並ぶ注文の中での順位を指す。価格優先・時間優先の取引所では、この順位がパッシブ注文(指値注文)でスプレッドを獲得できるか、あるいは全く約定しないかを決定する。集計された市場データからはこの数値は得られない。Level 2ブックは各価格の合計数量を示すのみで、個別の注文までは特定できないからだ。以下では、一般的なトレーダーが利用可能なデータからキューポジションを推定する方法と、その推定が通用しなくなる境界線について解説する。

キューポジションが優位性のすべてである理由

パッシブ注文はブックに残り、他の誰かがスプレッドを越えてぶつけてくるのを待つ。価格優先・時間優先の原則に基づき、マッチングエンジンはまず価格、次に到着時間の順で注文をランク付けする。もし10,000株の買い注文が10.00ドルにあり、その背後に100株を追加した場合、あなたの番が来るには先にその10,000株が約定するか取り消される必要がある。同じ価格で注文を取り消して再入力すれば、列の最後尾に戻ることになる。

この順位が経済性を決定する。先頭に近いほど頻繁に約定し、スプレッドと流動性提供リベート(メイカー・テイカー手数料とリベートを参照)を獲得できる。最後尾に近いほど、先行するすべての注文が約定した後にしか自分の番は回ってこない。これは一方向のフローが大量に流入した時に発生する。最後尾での約定は、価格がその水準を突き抜ける直前に集中する。同じ価格、同じ注文であっても、結果は正反対となる。

Level 2データで示せること、示せないこと

Level 1は最良気配値と各数量を示す。Level 2(マーケット・バイ・プライスとも呼ばれる)は板の深さを追加し、各価格水準の合計数量をリスト化する。両者とも集計データであり、Level 1とLevel 2の市場データ比較でその詳細を比較している。10.00ドルの買い注文が10,000株から8,500株に減少した場合、フィードは1,500株が消えたことのみを報告する。それが約定したのか、1件の注文が消えたのか、40件なのか、あるいは列のどこに位置していたのかは不明である。

約定は可視化された半分であり、テープにはすべての取引が数量とともに記録されるため、約定分は正確に差し引ける。残りは取り消しであり、ここから推測が始まる。以下のパネルは、2026年6月10日(水)の流動性の高い銘柄の通常セッションにおいて、コンソリデーションされた最良気配値のメッセージ数とテープ上の約定数を比較したものである。

クエリ板情報と約定の比率、AAPL、2026年6月10日
各数値の背後にある正確なSQL
SELECT
    q.et_time                            AS et_time,
    q.quote_updates                      AS quote_updates,
    t.trades                             AS trades,
    round(q.quote_updates / t.trades, 1) AS updates_per_trade
FROM
(
    SELECT
        formatDateTime(toStartOfHour(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
        count() AS quote_updates
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'AAPL'
      AND sip_timestamp >= '2026-06-10 12:00:00'
      AND sip_timestamp <  '2026-06-10 20:00:00'
    GROUP BY et_time
) AS q
INNER JOIN
(
    SELECT
        formatDateTime(toStartOfHour(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS trade_hour,
        count() AS trades
    FROM global_markets.stocks_trades
    WHERE ticker = 'AAPL'
      AND sip_timestamp >= '2026-06-10 12:00:00'
      AND sip_timestamp <  '2026-06-10 20:00:00'
    GROUP BY trade_hour
) AS t ON q.et_time = t.trade_hour
ORDER BY et_time
Run this yourself

08:00時台は寄り付き前であり、最良気配値は1約定あたり0.8回変化した。これは約定数よりもメッセージ数が少ないことを意味する。通常セッションに入ると比率は逆転する。15:00時台には、その1時間だけで233433件のメッセージが発生し、最良気配値は1約定あたり1.6回変化した。オープンマーケットにおいて価格水準に起こる変化の大半は、約定を伴わない注文の到着と取り消しであり、その一つひとつがあなたの列での順位を動かすが、集計フィードはその詳細を伝えない。

一様取り消し仮定と、それがもたらす過大評価

標準的な初期モデルでは、取り消しはキュー全体に均等に分布すると仮定する。xを分母に対する自身の位置(自分の前にある数量をその価格の合計数量で割ったもの)とする。一様モデルでは、取り消された注文が自分の前にあった確率をxとし、p(x) = xと定義する。10,000株のキューの半ばに位置し、約定なしで1,000株が取り消された場合、モデル上では500位前進したとみなされる。

実際のキューは偏っている。長く残っている注文は待機を厭わない参加者のものである傾向がある一方、直前に追加された注文は数秒で消える一時的な気配である可能性が高い。取り消しは列の後方、つまりあなたに近い場所や背後に集中する。1,000株の取り消しのうち、自分の前にあったのはおそらく200株程度だが、モデルは500株分を前進させてしまう。これを一日中繰り返すと、シミュレーション上のキューは現実よりも速く進む。この誤差は常に「実際の注文よりも多くの約定を、より良いタイミングで獲得する」という方向に偏る。

キューが消化される仕組み

取り消しは目に見えない形で順位を動かす。取引は、約定数量という形で目に見える形で順位を動かす。

クエリAAPLの約定サイズ別内訳、2026年6月10日
各数値の背後にある正確なSQL
SELECT
    multiIf(size < 100,  'under 100 shares',
            size = 100,  'exactly 100 shares',
            size <= 499, '101 to 499 shares',
            size <= 999, '500 to 999 shares',
                         '1000 shares or more')             AS trade_size_group,
    round(100 * count() / sum(count()) OVER (), 1)          AS share_of_prints_pct,
    round(100 * sum(size) / sum(sum(size)) OVER (), 1)      AS share_of_shares_pct
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
  AND sip_timestamp >= '2026-06-10 14:00:00'
  AND sip_timestamp <  '2026-06-10 20:00:00'
GROUP BY trade_size_group
ORDER BY min(size)
Run this yourself

このセッションにおいて、単元未満の約定は件数ベースで90%、数量ベースで42.5%を占めた。1,000株以上のブロック取引は件数で0.2%、出来高で19.9%であった。キューは小さな単位で消化されるため、2,000位と3,500位の間の距離は、数百件の約定を待つ時間に相当する。2件の大きな取引の後に約定を付与するシミュレーターは、テープ上の大半の動きを無視していることになる。

見えない注文

深度フィードには制限がある。10段階の価格水準を受信している際、自分の注文が11番目に位置していれば、その注文はデータ外となる。自分の前にある数量も、背後に並ぶ注文も把握できない。その時点で、推定ではなく数値を捏造していることになる。市場を追いかけない注文はすぐに内側から離れていくため、この状況は特殊ではなく日常的である。

クエリ最良気配値と価格推移、AAPL、15分バケット
各数値の背後にある正確なSQL
SELECT
    formatDateTime(toStartOfFifteenMinutes(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
    round(avg(toFloat64(bid_price)), 2) AS best_bid,
    uniqExact(bid_price)                AS bid_levels_touched
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
  AND sip_timestamp >= '2026-06-10 14:00:00'
  AND sip_timestamp <  '2026-06-10 20:00:00'
  AND bid_price > 0
GROUP BY et_time
ORDER BY et_time
Run this yourself

10:00のバケットでは、最良買い気配値は平均290.29ドルで、15分間に187種類の価格を記録した。1セント刻みの銘柄では、それぞれの価格が個別の水準となるため、10段階の表示では10セント分の板しかカバーできない。このようなセッションで放置された注文は、所有者が見ることのできる最も深い水準よりも下に長時間留まる可能性がある。

キューポジションが最も価値を持つ場面

キューポジションが最も重要になるのは、価格改善が不可能な場合である。1セントのスプレッドに張り付いた銘柄では、より良い価格で列に割り込む余地がない。全員が同じティックに積み上がり、到着時間が順位を決定する。スプレッドが数セントある場合、トレーダーは1セント上乗せすることでキュー全体を飛び越えることができ、価格決定が列の順位を上回る。

クエリ平均気配スプレッドおよび一セントスプレッドでの滞留時間、2026年6月10日正午
各数値の背後にある正確なSQL
SELECT
    ticker                                                AS symbol,
    round(avg(toFloat64(ask_price - bid_price)) * 100, 2) AS avg_spread_cents,
    round(100 * countIf(round(toFloat64(ask_price - bid_price) * 100) <= 1) / count(), 1) AS one_cent_pct
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'KO', 'NVDA', 'MSFT', 'BKNG')
  AND sip_timestamp >= '2026-06-10 15:00:00'
  AND sip_timestamp <  '2026-06-10 19:00:00'
  AND bid_price > 0
  AND ask_price > bid_price
GROUP BY ticker
ORDER BY avg_spread_cents
Run this yourself

同じセッションの昼間の4時間を通じ、最もスプレッドが狭いKOは平均1.18セントで、更新の82.5%で1セントのスプレッドを示した。最も広いMSFTは平均8.46セントで、更新の1.1%で1セントのスプレッドであった。前者の銘柄で調整したキューモデルは、後者には全く通用しない。気配値の間に置かれる注文(ミッドポイント・ペグ注文で解説)は、同じルール下で独自の列を形成する。

バックテストのための4つの診断

  1. 同じ銘柄の同じ時間帯において、シミュレーション上の約定率と実際の約定率を比較する。実際の約定率が40%の銘柄でシミュレーターが70%の約定を出すなら、それは市場ではなく、あなたの仮定を記述しているに過ぎない。
  2. シミュレーション上の約定を2つに分ける。価格水準がその後も残った場合と、その水準が完全に消滅した時に発生した場合である。後者に偏っている場合、シミュレーターは価格があなたを突き抜ける瞬間に約定を付与していることになる。
  3. 仮定に幅を持たせる。すべての取り消しがキューの先頭から発生したと仮定した場合と、最後尾から発生したと仮定した場合の双方で再実行する。この2つの実行結果が、選択したp(x)の誠実な誤差範囲となる。
  4. 自分の価格がフィードの深度外にどれだけ留まったかを測定する。そこでの約定は捏造である。バックテストにおける先読みバイアスは、戦略が本来持っていない情報に基づいた結果という、同じ失敗を別の角度から説明している。

モデリングを止め、注文データを購入すべき時

マーケット・バイ・オーダー(MBO)データは、個々の注文が到着した瞬間から約定または取り消される瞬間まで、すべてに固有の識別子を付与して記録する。このフィードを再生すれば、自分の注文が取引所に到達するまでの現実的な遅延を考慮するだけで、列での順位は推定ではなくカウント可能な数値となる。深度フィードよりも高価であり、保存容量も大幅に必要となる。

診断3が判断基準となる。先頭と最後尾の双方の仮定で戦略が利益を出すなら、中間の仮定で十分である。一方の仮定では利益が出て、もう一方では損失が出るなら、そのキューモデルこそが戦略の核心であり、推測を正当化するよりも注文データ(MBO)を購入する方が安上がりである。

プロラタ方式の取引所が問いを変える

一部の先物やオプション市場では、到着順ではなく数量の比率に応じて、流入した注文を各指値注文に分配する。そこでは時間はほとんど重要ではなく、提示した数量がレバレッジとなる。数量を倍にすれば、各約定の取り分も概ね倍になる。失敗のパターンも変化し、保有したい以上の数量を提示する方向へ向かう。オプション注文が約定しない理由では、オプションブックの個人投資家側から見たこの状況を解説している。

FAQ

トレーディングにおけるキューポジションとは何か?

キューポジションとは、同じ取引所の同じ価格に並ぶ注文の中での順位である。価格・時間優先のブックでは、自分の注文が約定するためには、先行する注文が約定するか取り消される必要がある。

Level 2データからキューポジションを計算できるか?

正確にはできない。Level 2は価格水準ごとの合計数量を示すのみで個別の注文は特定できないため、約定なしで数量が減少した際、それが自分の前で消えたのか後ろで消えたのかは判別できない。数値を推定し、その誤差範囲を算出することは可能だが、正確な数値には注文単位のデータが必要である。

なぜバックテストの約定率は高すぎる傾向があるのか?

一般的な仮定では取り消しがキュー全体に均等に分布すると考えるが、実際には取り消しは最後尾に集中する。均等モデルは現実の列の動きよりもシミュレーション上の注文を速く前進させるため、実際の取引よりも多くの、かつ好条件の約定として現れる。

MBOデータとは何か?

マーケット・バイ・オーダー(MBO)データは、個々の注文の到着から約定、取り消しまでの全メッセージを提供する。列での順位をモデルではなくカウントで把握できるフィードであり、1ティックのスプレッドで戦う戦略にとって最も重要である。

プロラタ方式の取引所でもキューポジションは重要か?

重要度は下がる。プロラタ配分は流入注文を数量に応じて分配するため、先に到着してもメリットは少なく、提示数量が重要になる。取引所がどの配分モデルを採用しているかを確認することが、キューモデリングの前提となる。


ここに掲載されたすべてのパネルには、それを生成したSQLが含まれている。Strasmoreターミナルでティッカーを変更し、日付を動かし、あなたが取引する銘柄について同じ問いを立ててみてほしい。