株価のギャップは必ず埋まる?データで検証
株価のギャップは必ず埋まるのでしょうか。大型株八銘柄を対象に、同一セッション、五・二十・六十セッション後のギャップ埋め率をSQLとともに検証します。
株価のギャップは必ず埋まるのでしょうか。短期売買に使えるほど短い期間では、必ずしも埋まりません。この主張がほぼ成立してしまうのは、誰も期間を明示しない場合です。ギャップとは、当日の寄り付きと前日の通常取引終値の差です。ギャップが埋まるとは、株価がその前日終値を再び通過することです。結局のところ、どれだけ長く待つかが論点になります。
ギャップとギャップ埋めの定義
ギャップは、当日の寄り付きと前日終値を比較して測定します。前日の取引がある価格で終わり、当日は別の価格で始まった場合、その差がギャップです。前日の場中高値や安値からの距離ではありません。それは別の、はるかに達成しやすい目標です。両者を入れ替えると、「ギャップ」が通常の日でも昼までに埋まるものになってしまいます。小幅なギャップは、ほぼすべての取引日に発生します。米国市場が閉まっている間も、他の時間帯の取引、指数の銘柄変更、個別銘柄ニュース、権利落ち調整によって適正価格が動くためです。株価が翌朝ギャップを形成する理由では、この夜間の価格再評価の背景を説明しています。
ギャップが埋まるとは、株価が前日終値を再び通過する最初の時点を指します。ただし、この定義には期限も必要です。期限を無制限にすれば、流動性の高い銘柄は読者が指定したほぼすべての水準を、いずれ再び通過します。そのため「ギャップは必ず埋まる」は真実ではなく、反証不能な主張になります。以下の数値にはすべて明示した期間があります。
分析対象は一貫しています。米国の大型株八銘柄について、2021年1月から2026年2月までのギャップ発生日を調べ、通常取引時間の一分足の高値と安値でギャップ埋めを判定しました。0.25%未満のギャップは丸め誤差として除外しています。
株価のギャップは同じ取引日に必ず埋まるのか
まずはギャップの大きさから見ます。すべてのギャップを規模別に分類し、同じ取引日が終わる前に前日終値へ再び到達したかを調べます。
各数値の背後にある正確なSQL
WITH sessions AS
(
SELECT
ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMin(toFloat64(open), window_start) AS session_open,
argMax(toFloat64(close), window_start) AS session_close,
toFloat64(max(high)) AS session_high,
toFloat64(min(low)) AS session_low
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'JPM', 'KO', 'WMT', 'XOM')
AND window_start >= '2021-01-01'
AND window_start < '2026-07-01'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
GROUP BY ticker, d
),
gapped AS
(
SELECT
d,
session_open,
session_high,
session_low,
lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY d ASC
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prior_close
FROM sessions
),
measured AS
(
SELECT
abs(100 * (session_open / prior_close - 1)) AS gap_pct,
toUInt8(if(session_open > prior_close,
session_low <= prior_close,
session_high >= prior_close)) AS filled_same_session
FROM gapped
WHERE prior_close > 0
AND d <= toDate('2026-02-28')
AND abs(100 * (session_open / prior_close - 1)) >= 0.25
)
SELECT
multiIf(gap_pct < 0.5, '0.25 to 0.5%',
gap_pct < 1, '0.5 to 1%',
gap_pct < 2, '1 to 2%',
gap_pct < 4, '2 to 4%',
'4% or more') AS gap_bucket,
count() AS gap_days,
round(100 * avg(filled_same_session), 1) AS same_session_fill_pct
FROM measured
GROUP BY gap_bucket
ORDER BY min(gap_pct) ASC分析対象で最も小さい0.25%から0.5%のギャップは、74.6%の割合で同じ取引日に埋まりました。対象は2381件です。4%以上のギャップが同じ取引日に埋まった割合は14.8%でした。グラフの右肩下がりが示す点は明確です。ギャップが小さいほど、株価は日中にその水準を再び通過しやすくなります。言い換えれば、小幅なギャップはノイズであり、ノイズは反転しやすいということです。
ギャップが埋まるまでの期間はどれくらいか
期限を延ばせば、ギャップ埋め率は上昇するか、少なくとも低下しません。長い期間を設定すると、埋まるケースが追加され、すでに埋まったケースが除外されることはありません。重要なのは、全体のどれだけが遅れて到達し、取引には役立たないものになるかです。
各数値の背後にある正確なSQL
WITH sessions AS
(
SELECT
ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMin(toFloat64(open), window_start) AS session_open,
argMax(toFloat64(close), window_start) AS session_close,
toFloat64(max(high)) AS session_high,
toFloat64(min(low)) AS session_low
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'JPM', 'KO', 'WMT', 'XOM')
AND window_start >= '2021-01-01'
AND window_start < '2026-07-01'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
GROUP BY ticker, d
),
paths AS
(
SELECT
d,
session_open,
session_high,
session_low,
lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY d ASC
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prior_close,
min(session_low) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) AS low_5,
max(session_high) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) AS high_5,
min(session_low) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 19 FOLLOWING) AS low_20,
max(session_high) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 19 FOLLOWING) AS high_20,
min(session_low) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 59 FOLLOWING) AS low_60,
max(session_high) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 59 FOLLOWING) AS high_60
FROM sessions
),
gaps AS
(
SELECT
session_open > prior_close AS gap_up,
prior_close,
session_low,
session_high,
low_5,
high_5,
low_20,
high_20,
low_60,
high_60
FROM paths
WHERE prior_close > 0
AND d <= toDate('2026-02-28')
AND abs(100 * (session_open / prior_close - 1)) >= 1
),
flags AS
(
SELECT arrayJoin([
(1, '1 session', toUInt8(if(gap_up, session_low <= prior_close, session_high >= prior_close))),
(2, '5 sessions', toUInt8(if(gap_up, low_5 <= prior_close, high_5 >= prior_close))),
(3, '20 sessions', toUInt8(if(gap_up, low_20 <= prior_close, high_20 >= prior_close))),
(4, '60 sessions', toUInt8(if(gap_up, low_60 <= prior_close, high_60 >= prior_close)))
]) AS f
FROM gaps
)
SELECT
tupleElement(f, 2) AS horizon,
count() AS gaps_measured,
round(100 * avg(tupleElement(f, 3)), 1) AS filled_pct
FROM flags
GROUP BY horizon
ORDER BY min(tupleElement(f, 1)) ASC1%以上のギャップ2191件では、34%が同じ取引日中に埋まり、88.7%が60 sessions以内に埋まりました。通常引用されるのは後者ですが、期間は省かれがちです。60セッションはおよそ3か月の取引期間に相当します。一日の価格かい離を前提としたポジションとしては長い保有期間です。47日目にギャップが埋まっても、その前に株価が大きく反対方向へ動いていれば、この統計ではギャップ埋めとして計上されます。
ノイズギャップと情報ギャップは異なる母集団
出来高が通常どおりの静かな日に生じるギャップは、小幅な価格調整です。一方、決算ニュースや買収提案に伴うギャップは、企業価値に対する見方の変化を反映します。戻るべき以前の価格が残っていない場合もあります。両者は出来高でかなり適切に区別できます。市場全体が価格を再評価する場合、通常の出来高を大きく上回る約定が何度も成立します。
各数値の背後にある正確なSQL
WITH sessions AS
(
SELECT
ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMin(toFloat64(open), window_start) AS session_open,
argMax(toFloat64(close), window_start) AS session_close,
toFloat64(max(high)) AS session_high,
toFloat64(min(low)) AS session_low,
sum(toFloat64(volume)) AS session_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'JPM', 'KO', 'WMT', 'XOM')
AND window_start >= '2021-01-01'
AND window_start < '2026-07-01'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
GROUP BY ticker, d
),
paths AS
(
SELECT
d,
session_open,
session_high,
session_low,
session_volume,
lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY d ASC
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prior_close,
avg(session_volume) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN 21 PRECEDING AND 2 PRECEDING) AS normal_volume,
min(session_low) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 19 FOLLOWING) AS low_20,
max(session_high) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 19 FOLLOWING) AS high_20
FROM sessions
),
measured AS
(
SELECT
session_volume / normal_volume AS volume_ratio,
toUInt8(if(session_open > prior_close, session_low <= prior_close, session_high >= prior_close)) AS filled_same_session,
toUInt8(if(session_open > prior_close, low_20 <= prior_close, high_20 >= prior_close)) AS filled_20_sessions
FROM paths
WHERE prior_close > 0
AND normal_volume > 0
AND d >= toDate('2021-03-01')
AND d <= toDate('2026-02-28')
AND abs(100 * (session_open / prior_close - 1)) >= 1
)
SELECT
multiIf(volume_ratio < 1.5, 'Under 1.5x normal',
volume_ratio < 3, '1.5x to 3x normal',
'3x or more') AS volume_regime,
count() AS gap_days,
round(100 * avg(filled_same_session), 1) AS same_session_fill_pct,
round(100 * avg(filled_20_sessions), 1) AS within_20_sessions_fill_pct
FROM measured
WHERE isFinite(volume_ratio)
GROUP BY volume_regime
ORDER BY min(volume_ratio) ASC通常の出来高の1.5倍未満で生じた1%以上のギャップは、35.9%の割合で同じ取引日に埋まりました。通常の出来高の3倍以上で生じた同規模のギャップは、15.3%が同じ取引日に埋まり、45.8%が20セッション以内に埋まりました。対象は59件です。出来高の大きいグループには、決算ギャップや買収関連のギャップが含まれます。両グループを一つの数値に平均すると、どちらの特徴も表せません。
取引開始直後がギャップ統計をゆがめる理由
午前9時31分に記録されたギャップ埋めは、信頼性が低い可能性があります。寄り付き価格はオークションで決まります。夜間に受け付けた注文を一括して交差させ、すべての注文に一つの価格を付ける仕組みです。寄り付きオークションの解説では、その仕組みを説明しています。その直後は、気配スプレッドが一日の中で最も広くなり、一つの小口約定だけで、まとまった数量が一度も取引されていない高値や安値が記録されることがあります。寄り付きにスプレッドが拡大する理由では、気配が薄くなる背景を説明しています。
下のグラフは、対象銘柄の約定データにおける値動きの形を示しています。2025年までのデータについて、15分単位の時間帯別に、一分間の高値・安値レンジの平均をベーシスポイントで示しました。1ベーシスポイントは1%の100分の1です。
各数値の背後にある正確なSQL
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 15 MINUTE), '%H:%i') AS et_time,
round(10000 * avg(toFloat64(high) / toFloat64(low) - 1), 1) AS avg_range_bps,
round(avg(toFloat64(volume)) / 1000, 1) AS avg_volume_k
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'JPM', 'KO', 'WMT', 'XOM')
AND window_start >= '2025-01-01'
AND window_start < '2026-01-01'
AND toFloat64(low) > 0
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
GROUP BY et_time
ORDER BY et_time ASC寄り付きの時間帯では、一分当たりのレンジが平均24.4ベーシスポイントでした。12:30時間帯では6.9ベーシスポイントです。出来高は一分当たり303.9千株に対し、後者では69.6千株でした。最初の時間帯に記録されたギャップ埋めは、その日の中で最も信頼性の低い価格に基づいています。上記の同日埋め率にはこの時間帯も含まれるため、数値はやや高めに出ています。この注意点は、今回を含むすべての同日ギャップ埋め統計に当てはまります。
ギャップを取引機会とみなす前に確認すべき点
- 期間。期限のないギャップ埋め率は統計ではありません。
- 母集団。ニュースによるギャップと静かな日のギャップを分けたか、その基準をどう設定したか。
- 測定方法。実際の約定レンジでギャップ埋めを判定したか、取引開始直後を含めたか。
- 生き残り銘柄。現在も取引されている銘柄だけをサンプルにしていないか。そうすると、いまだに埋まっていないギャップがひそかに除外されます。
正確な主張は、一般的な標語より限定的です。通常の出来高で生じた小幅なギャップは、頻繁かつ速やかに反転します。出来高の大きい大幅なギャップは価格の再評価であり、数か月にわたって維持されることが多くあります。現在どの銘柄にギャップが生じているかを確認するには、今週の株価上昇・下落銘柄で今週の動きを追えます。市場が暴落から回復する仕組みでは、指数の下落局面にも同じ期間設定の考え方を適用しています。
よくある質問
株価のギャップは必ず埋まるのか
いいえ。この分析では、1%以上のギャップのうち88.7%が60 sessions以内に前日終値を再び通過しました。つまり、およそ3か月の取引期間後も相当数が埋まっていません。「必ず」という表現が成立するのは、期限を設けない場合だけです。その場合、検証できる主張ではなくなります。
ギャップが埋まるまでの期間はどれくらいか
ギャップによって異なります。今回の分析では、1%以上のギャップの34%が同じ取引日に埋まり、残りはその後数週間から数か月にわたって埋まりました。小幅なギャップは同日埋めに集中し、出来高の大きいギャップは最も時間がかかります。
コモンギャップとブレイクアウェイギャップの違いは何か
チャート用語では、ギャップを発生状況で分類します。コモンギャップは、特定のニュースがなく、通常の出来高で進む通常の日に生じます。ブレイクアウェイギャップは、新しい情報とともに大きな出来高を伴って生じ、しばらく維持されていた価格レンジから離れることが多くあります。上のパネルに示した出来高による分類は、この違いを測定可能な形にしたものです。
情報源によってギャップ埋め統計が大きく異なるのはなぜか
四つの選択が数値を大きく左右します。ギャップ埋めの期間、対象銘柄、対象期間、そしてギャップを前日終値から測るか、前日の高値・安値から測るかです。この四つのいずれかが欠けたギャップ埋め率は、別の数値と比較できません。
数値の測定方法
取引セッションは、ニューヨーク時間の通常取引時間内における一分足から構成しました。寄り付き価格は通常取引時間の最初の足の始値、終値は最後の足の終値、その日の高値と安値は各足の極値です。各ギャップは、同じティッカーの前回セッション終値を基準に測定しました。
5、20、60セッションの期間にはギャップ発生日自体を含めています。ギャップ発生日は2026年2月末までとし、約定データは2026年6月まで使用しました。そのため、期間パネルのすべてのギャップについて、少なくとも後続60セッションを利用でき、データ不足によって未達と判定されたギャップはありません。
第三のパネルにおける通常の出来高は、ギャップ発生日の2日前までに終了する直近20セッションの通常取引時間の平均出来高です。これにより、ギャップ発生日とその前日が自身の基準値に含まれないようにしています。
対象は流動性の高い大型株八銘柄です。流動性の低い銘柄はギャップが生じる頻度も埋まり方も異なるため、同じ検証を小型株で再実施しない限り、これらの比率を小型株に適用することはできません。
ここで使用した各パネルには、直下に完全なSQLを掲載しています。追跡している銘柄で同じ検証を実行する場合は、Strasmore terminalで質問を平易な英語で入力してください。