Strasmore Research
学習 Matt Connor著者: Matt Connor ・更新: 2026-07-24 · data as of July 24, 2026 · refreshed weekly

空売り残高が遅延する理由

空売り残高のデータが常に古いのは、FINRAによる月二回の集計と報告の仕組みによるものです。その詳細なサイクルを解説します。

空売り残高(Short interest)のデータは、構造的な理由により常に古い情報となります。これはリアルタイムのフィードではないためです。ブローカーは、FINRAが指定する決済日(月中と月末の月2回)に、口座内の空売り株式数をスナップショットとして取得します。その後、各社は合計値をFINRAに報告します。FINRAは全加盟企業の報告をまとめ、約8営業日後に集計結果を公表します。ベンダーやデータベースを経由して画面に表示されるまでの時間を加味すると、その日利用可能な最新の 空売り残高 は、1週間から4週間前のポジションを示しています。本ページでは、そのタイムラグを断定するのではなく、測定します。

レポートの遅延が発生する仕組み

このサイクルは4つのステップで構成され、各ステップで日数が加算されます。

  1. 決済日。 FINRAは決済日のスケジュールを公開しています。月の中旬と月末の2回です。各決済日に、すべてのブローカー・ディーラーは顧客口座および自己勘定口座のショート・ポジションを記録します。これらは取引日ではなく決済日です。T+1決済では、月曜日の取引は火曜日に決済されます。したがって、決済日にカウントされるのは、その時までに取引が完了しているポジションです。
  2. 報告期限。 各加盟企業は、銘柄ごとのショート合計額を数営業日以内にFINRAに提出します。この段階では情報は公開されません。これは規制当局への提出書類であり、市場データフィードではありません。
  3. 集計。 FINRAは、全銘柄について数千社分の報告書を合算し、一つのファイルを作成します。決済日ごとに銘柄ごとの単一の数値が記録されます。日中の履歴、取引所の詳細、企業別の内訳は含まれません。
  4. 配信。 ファイルは、対象となる決済日から約8営業日後に公開されます。その後、ベンダーがデータを取得し、取引所が再公開し、本ページの基盤となるようなデータウェアハウスがデータを取り込みます。

数値が意図的に隠されているわけではありません。遅延は、収集期間、集計期間、および配信工程の合計です。各ステップはストリーム形式ではなく、カレンダーに基づいたバッチ処理で行われます。

決済日から何日間のラグがありますか?

この倉庫が逐次的なデリバリーとして受け取ったすべての決済日を、決済日と、そのデータが最初にここに表示された日の対として示します。

クエリ逐次決済の履歴:特定の日付時点の数値と、数日後の記録値
各数値の背後にある正確なSQL
WITH first_arrival AS (
    SELECT settlement_date,
           toDate(min(_ingest_time)) AS arrived
    FROM global_markets.stocks_short_interest
    GROUP BY settlement_date
),
bulk_days AS (
    SELECT arrived
    FROM first_arrival
    GROUP BY arrived
    HAVING count() > 5
)
SELECT settlement_date,
       toString(arrived) AS arrived_here,
       dateDiff('day', settlement_date, arrived) AS publication_lag_days
FROM first_arrival
WHERE arrived NOT IN (SELECT arrived FROM bulk_days)
ORDER BY settlement_date

記録されている最新の決済日は 2026-06-30 で、2026-07-11 にここに到着しました。これは、対象となるポジションの記録から 11 日後のことです。その前の決済は 16 日を要しました。全期間を通じた傾向は一定ではなく、幅があります。

クエリパイプラインのラグ:各行の数値と、意図的に除外されたバックフィル分
各数値の背後にある正確なSQL
WITH first_arrival AS (
    SELECT settlement_date,
           toDate(min(_ingest_time)) AS arrived
    FROM global_markets.stocks_short_interest
    GROUP BY settlement_date
),
bulk_days AS (
    SELECT arrived
    FROM first_arrival
    GROUP BY arrived
    HAVING count() > 5
),
organic AS (
    SELECT settlement_date,
           dateDiff('day', settlement_date, arrived) AS lag
    FROM first_arrival
    WHERE arrived NOT IN (SELECT arrived FROM bulk_days)
)
SELECT count() AS settlements_measured,
       min(lag) AS fastest_lag_days,
       round(quantileDeterministic(0.5)(lag, cityHash64(settlement_date)), 1) AS median_lag_days,
       max(lag) AS slowest_lag_days,
       (SELECT count() FROM first_arrival WHERE arrived IN (SELECT arrived FROM bulk_days)) AS settlements_bulk_loaded,
       (SELECT toString(max(arrived)) FROM bulk_days) AS bulk_load_date
FROM organic

8 件の逐次デリバリーされた決済において、最短の記録は決済日から 10 日後、最長は 26 日後でした。中央値は 14 日です。これはタイトルにある「2週間前」のデータであり、想定ではなく実測値に基づいています。

これらのクエリの除外対象に注意してください。倉庫の履歴は、公開速度の記録ではありません。2026-03-16 に、このデータベースはアーカイブのバックフィルとして 197 件の決済を一括で読み込みました。それらの行のインジェスト・タイムスタンプは、公開日ではなくバックフィルの日付を示しており、そこから算出される「ラグ」は、当社の読み込みスケジュールの影響を受けたものです。真のパイプラインを測定しているのは、アーカイブ構築後に1件ずつ到着した決済のみであり、それが上記の行です。

現在のサイクル状況

タイムラグは、データの乖離に最も顕著に現れます。決済日は、既に発生しているものの、まだ公表されていない場合があります。このパネルは、最新の受領データを示しています。

クエリ現在のサイクル:最新の記録値と、現在処理中の数値
各数値の背後にある正確なSQL
WITH (SELECT max(settlement_date) FROM global_markets.stocks_short_interest) AS latest
SELECT toString(latest) AS latest_settlement_on_file,
       (SELECT count() FROM global_markets.stocks_short_interest
        WHERE settlement_date = latest) AS securities_in_that_print,
       (SELECT dateDiff('day', latest, toDate(min(_ingest_time))) FROM global_markets.stocks_short_interest
        WHERE settlement_date = latest) AS its_publication_lag_days,
       (SELECT count() FROM global_markets.stocks_short_interest
        WHERE settlement_date > latest AND settlement_date <= latest + 16) AS next_settlement_rows_on_file,
       (SELECT count(DISTINCT date) FROM global_markets.stocks_short_volume
        WHERE date > latest) AS daily_short_volume_files_since,
       (SELECT dateDiff('day', latest, max(date)) FROM global_markets.stocks_short_volume) AS days_from_settlement_to_newest_daily_file

現在記録されている最新の空売り残高は、2026-06-30 決済分です。これは 22207 の銘柄を対象とし、事後 11 日の遅延が発生しています。次回のサイクルにおける決済データは、0 行にわたります。これは未公表であり、上記の遅延は通常の範囲内です。当該カラムは、意図的にゼロに制限されています。データが公表されると制限が解除され、古いデータを表示し続けるのではなく、更新のためにページが保持されます。これは、6月のまとめ で示された、一サイクル前のトリガーと同じ仕組みです。

一方、日次の空売り取引高ファイルは、当該決済日以降に 12 回公表されています。最新のデータは、最新の空売り残高スナップショットよりも 17 日新しい状態です。2つの FINRA データセットには、それぞれ異なる時間軸が存在します。

データの更新待ち期間中の値動き

遅延期間中に価格が動いている場合のみ、その遅延は意味を持ちます。実際、価格は動いています。このパネルでは、最新の決済値を取得し、各銘柄の決済日における定期セッション終値と、データが実際に到着した日の終値を比較します。

クエリブラインド・ウィンドウ:決済日から空売り残高の公表日までの5銘柄の動き
各数値の背後にある正確なSQL
WITH latest AS (SELECT max(settlement_date) AS d FROM global_markets.stocks_short_interest),
arrived AS (
    SELECT toDate(min(_ingest_time)) AS a
    FROM global_markets.stocks_short_interest
    WHERE settlement_date = (SELECT d FROM latest)
),
daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(toFloat64(close), window_start) AS rth_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL', 'TSLA', 'NVDA', 'GME', 'MU')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= (SELECT d FROM latest)
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= (SELECT a FROM arrived)
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60
          + toMinute(toTimeZone(window_start, 'America/New_York')) BETWEEN 570 AND 959
    GROUP BY ticker, session
)
SELECT si.ticker AS ticker,
       round(si.short_interest / 1e6, 1) AS shares_short_m,
       round(argMin(d.rth_close, d.session), 2) AS close_at_settlement,
       round(argMax(d.rth_close, d.session), 2) AS close_when_published,
       round((argMax(d.rth_close, d.session) / argMin(d.rth_close, d.session) - 1) * 100, 1) AS move_while_pending_pct,
       count() AS sessions_in_window
FROM global_markets.stocks_short_interest AS si
INNER JOIN daily AS d ON d.ticker = si.ticker
WHERE si.settlement_date = (SELECT d FROM latest)
GROUP BY si.ticker, si.short_interest
ORDER BY abs(move_while_pending_pct) DESC, si.ticker ASC

対象期間は8取引セッションです。5銘柄の中で最も大きく動いたのはMUで、決済日の終値$1151.01から、空売り残高データが利用可能になった日の$978.69へと変化しました。これは-15%の変化であり、その期間中の開示された空売りポジションは、定義上31.7百万株で固定されています。最も動きが小さかったGMEでも、-1.9%の変化がありました。

これが遅延が持つ実質的な意味です。「Xの空売り残高」と報じる見出しは、直近の決済時点のポジションを示しています。上記の期間中の動きは、その数値には反映されません。空売り勢が上昇局面で買い戻したのか、あるいは下落局面でポジションを増やしたのかは、この数値からは判別できず、次回の更新まで不明なままです。

Days to cover:古い数値に基づく計算

Days to cover(空売り残高を平均出来高で割ったもの)は、多くの読者が実際に目にする指標ですが、二重の情報の遅れを含んでいます。分子は決済日に固定されており、分母となる出来高も、ファイル自体が数週間前に算出したものだからです。GameStopは、知名度が高く、流動性の高い銘柄の一つであるため、この問題が顕著に現れます。

クエリGMEのカバー日数:記録上の数値と、公表待ち期間中の出来高に基づく再計算値
各数値の背後にある正確なSQL
WITH latest AS (SELECT max(settlement_date) AS d FROM global_markets.stocks_short_interest),
arrived AS (
    SELECT toDate(min(_ingest_time)) AS a
    FROM global_markets.stocks_short_interest
    WHERE settlement_date = (SELECT d FROM latest)
),
tape AS (
    SELECT count(DISTINCT toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
           sum(toFloat64(volume)) AS shares
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'GME'
      AND toDate(toTimeZone(window_start, 'America/New_York')) > (SELECT d FROM latest)
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= (SELECT a FROM arrived)
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60
          + toMinute(toTimeZone(window_start, 'America/New_York')) BETWEEN 570 AND 959
)
SELECT toString((SELECT d FROM latest)) AS settlement,
       round(si.short_interest / 1e6, 1) AS shares_short_m,
       round(si.avg_daily_volume / 1e6, 2) AS file_adv_m,
       round(si.days_to_cover, 2) AS reported_days_to_cover,
       round(tape.shares / tape.sessions / 1e6, 2) AS tape_adv_since_settlement_m,
       round(si.short_interest / (tape.shares / tape.sessions), 2) AS days_to_cover_on_recent_volume,
       round(abs(si.short_interest / (tape.shares / tape.sessions) - si.days_to_cover), 2) AS days_of_difference,
       tape.sessions AS sessions_measured
FROM global_markets.stocks_short_interest AS si, tape
WHERE si.ticker = 'GME'
  AND si.settlement_date = (SELECT d FROM latest)

表を左から右へ読んでください。2026-06-30の決済時点で、GameStopの空売り残高は55.9百万株でした。この数値に、平均出来高5.2百万株を組み合わせると、スクリーナーに表示される10.75日のDays to coverが算出されます。

ここで、分母を実数値に置き換えてみます。データが更新されるまでの7の通常取引セッションにおいて、GameStopのコンソリデーテッド・テープにおける1日平均出来高は3.09百万株でした。同じ空売り残高をこの出来高で計算すると、18.08となります。これは、分子を同じままにした場合、公表された比率の7.33日という数値と比較して、7.33日となります。変化したのは出来高の想定値のみです。Days to coverは、決済からの経過時間を示すリアルタイムの指標ではなく、二つの古い入力値から作成された、過去の比率として扱う必要があります。

ショートスクイーズ:タイムラグがもたらす実害

多くの人がこの問題を検索する理由は、ショートスクイーズにあります。スクイーズでは空売りポジションが焦点となりますが、その正確な数量をリアルタイムで把握することは不可能です。2021年初頭のGameStopがその典型例です。以下の表は、各決済日の通常取引終了時と、その8取引日後の終値を比較したものです。これは、FINRAが目標とする約8営業日の開示期間に基づいています。

クエリGME(2020-21年冬):各空売り残高の公表前の価格変動(実勢価格)
各数値の背後にある正確なSQL
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(toFloat64(close), window_start) AS cl
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'GME'
      AND window_start >= toDateTime('2020-12-01 00:00:00')
      AND window_start < toDateTime('2021-03-15 00:00:00')
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60
          + toMinute(toTimeZone(window_start, 'America/New_York')) BETWEEN 570 AND 959
    GROUP BY session
),
ranked AS (
    SELECT session, cl, row_number() OVER (ORDER BY session) AS n
    FROM daily
)
SELECT toString(si.settlement_date) AS settlement,
       round(si.short_interest / 1e6, 1) AS shares_short_m,
       round(r0.cl, 2) AS close_at_settlement,
       round(r8.cl, 2) AS close_8_sessions_later,
       round((r8.cl / r0.cl - 1) * 100, 1) AS move_while_pending_pct
FROM global_markets.stocks_short_interest AS si
INNER JOIN ranked AS r0 ON r0.session = si.settlement_date
INNER JOIN ranked AS r8 ON r8.n = r0.n + 8
WHERE si.ticker = 'GME'
  AND si.settlement_date >= toDate('2020-12-15')
  AND si.settlement_date <= toDate('2021-02-26')
ORDER BY si.settlement_date

2021-01-15の決済データを確認してください。株価が$35.49のとき、空売り残高は61.8百万株でした。その8セッション後、つまりデータが一般に公開される頃には、GameStopの終値は$197.44に達し、456.3%の変動を見せていました。公開日にその空売り残高を目にした人は、すでにその価格では存在しない銘柄の状態を見ていたことになります。

次のデータでは、状況が逆転しています。2021-01-29の決済では、空売り残高は21.4百万株となり、ポジションの大部分が解消され、株価は$328.24でした。その8セッション後には$51.19-84.4%に達していました。買い戻しは、データが公開される前にすでに完了していました。スクイーズの二つの側面、すなわちポジションの集中と解消の双方が、事後的に開示されていたのです。

日次データとその限界

FINRAは毎日、ショートボリューム(空売り取引量)を公表しています。これは、翌朝に報告される、その日の総取引量に占める空売り実行の割合です。このデータはほぼリアルタイムですが、性質が異なります。ショートボリュームは「保有ポジション」ではなく、「取引フロー」をカウントしたものです。その多くは、市場終了時までにフラットになるマーケットメーカーのヘッジ取引です。そのため、空売りポジション(ショート・インタレスト)に変化がなくても、特定の銘柄のショートボリュームが1週間毎日高い数値を示すことがあります。これら2つのデータセットの違いは、道路を走行する交通量と、終着地点に停車している車の違いに似ています。詳細はこちらで説明されています。

米国では、空売りポジションの数値は毎日開示されません。ベンダーが提供する日次の数値は、証券貸借データやフローデータに基づいた「推定値」であり、モデルによる算出結果であって、公式な開示情報ではありません。実際に開示される数値は、月に2回しか公表されず、報告も遅れます。

FAQ

なぜ空売り残高データは2週間前のものなのですか?

ブローカーはFINRAの月2回の決済日にのみ空売りポジションをスナップショットとして記録します。その後数営業日後に合計値を提出し、FINRAは決済日から約8営業日後に集計ファイルを公開します。このデータベースにライブ配信された決済データにおいて、全工程には10から26日を要し、中央値は14日でした。

空売り残高はブローカーによってどのように計算・報告されるのですか?

各ブローカー・ディーラーは、決済日時点での顧客口座および自己勘定口座の空売り株数を集計し、銘柄ごとに合計してFINRAに提出します。FINRAは全加盟企業からの報告を銘柄ごとに合算します。2026-06-30の印刷物における22207がこれに該当します。これはポジションの規制上の集計であり、取引回数を数えたものではありません。

NYSE、Nasdaq、OTC銘柄で報告サイクルは異なりますか?

いいえ、異なります。米国の上場市場全体に、同じ月2回の決済スケジュールと、同じ集計・公開サイクルが適用されます。各取引所は独自の集計を行うのではなく、FINRAのファイルから再公開しています。上場市場がどこであるかは、空売り残高の鮮度に影響しません。

空売り残高の割合(パーセンテージ)は、どの程度なら良い、あるいは悪いと言えますか?

銘柄の良し悪しを判断する基準となる閾値は存在しません。また、高い数値が将来を予測するものでもありません。混雑度(crowding)の指標が示すのは、銘柄の取引可能量に対する空売りポジションの大きさです。GameStopの最新の印刷物では、報告されたDays to cover(空売り決済までの日数)は10.75ですが、流動性の高い銘柄の多くは一桁台の低い数値です。分布については現在の混雑度リーダーを参照してください。

報告の遅延はショートスクイーズにおいて重要ですか?

遅延が最も影響を与えるのがこの場面です。2021-01-15のGameStopの決済において、測定から公開に近い8セッション経過までの間に、株価は456.3%動きました。そして2021-01-29の印刷物までに、空売りポジションはすでに21.4百万株まで減少していました。スクイーズによる混雑は、事象が発生した後にのみ公開データで確認されます。


上記のパネルには、生成に使用されたSQLが含まれています。各パネルを展開して数値を監査するか、Strasmoreターミナルで決済カレンダーを実行してください。