Adakah gap saham sentiasa diisi? Analisis data pasaran
Adakah gap saham sentiasa diisi? Tidak pada tempoh masa tetap. Lihat kadar pengisian untuk sesi sama, lima, dua puluh dan enam puluh sesi bagi saham besar berserta kod SQL.
Adakah gap saham sentiasa diisi? Tidak dalam tempoh masa yang cukup singkat untuk didagangkan, dan dakwaan ini hanya bertahan apabila tiada sesiapa yang menetapkan tempoh masa tersebut. Gap ialah jarak antara harga buka hari ini dan harga tutup sesi biasa semalam, manakala "fill" (pengisian) ialah detik apabila harga didagangkan semula melepasi harga tutup tersebut. Keseluruhan hujah ini bergantung kepada berapa lama pembaca sanggup menunggu untuk ia berlaku.
Apa yang dikira sebagai gap, dan apa yang dikira sebagai fill
Gap diukur berdasarkan harga buka berbanding harga tutup sebelumnya. Sesi semalam berakhir pada satu harga, hari ini dibuka pada harga lain, dan perbezaannya ialah gap. Ia bukan jarak dari harga tinggi atau rendah intraday semalam. Itu adalah sasaran yang berbeza dan jauh lebih mudah, dan menukar satu dengan yang lain adalah cara "gap" secara senyap-senyap menjadi sesuatu yang ditutup menjelang waktu makan tengah hari pada mana-mana hari biasa. Gap kecil muncul dalam hampir setiap sesi: dagangan dalam zon waktu lain, perubahan indeks, berita syarikat tertentu, dan pelarasan ex-dividend semuanya menggerakkan harga saksama semasa pasaran AS ditutup. Mengapa saham mengalami gap semalaman merangkumi punca penetapan harga semula semalaman itu.
Fill ialah detik pertama saham didagangkan semula melepasi harga tutup sebelumnya. Definisi itu tidak lengkap tanpa tarikh akhir yang ditetapkan. Dalam tempoh masa yang tidak terhad, saham yang cair akan melepasi hampir mana-mana tahap yang dinamakan oleh pembaca pada satu ketika, yang menjadikan kenyataan "gap sentiasa diisi" tidak boleh disangkal dan bukannya benar. Setiap angka di bawah membawa tempoh masa yang dinyatakan.
Satu sampel digunakan sepanjang halaman ini: lapan saham large-cap AS, hari gap dari Januari 2021 hingga Februari 2026, fill diuji terhadap harga tinggi dan rendah satu minit sesi biasa. Gap di bawah 0.25% digugurkan sebagai pembundaran.
Adakah gap saham sentiasa diisi pada hari yang sama?
Mulakan dengan saiz. Kumpulkan setiap gap mengikut saiznya, kemudian tanya sama ada harga tutup sebelumnya disentuh semula sebelum sesi yang sama berakhir.
SQL tepat di sebalik setiap nombor
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) ASCGap terkecil dalam sampel, 0.25% hingga 0.5%, ditutup pada sesi yang sama sebanyak 74.6% daripada jumlah keseluruhan merentasi 2381 kejadian. Gap sebanyak 4% atau lebih ditutup pada sesi yang sama sebanyak 14.8% daripada jumlah keseluruhan. Cerun ke bawah pada carta adalah pengajaran utama: semakin kecil gap, semakin kerap saham kembali melintasinya pada hari tersebut, yang merupakan cara lain untuk mengatakan bahawa gap kecil hanyalah gangguan (noise) dan gangguan akan berbalik.
Berapa lama masa yang diambil untuk gap diisi?
Lanjutkan tarikh akhir dan kadar fill hanya akan meningkat. Tempoh masa yang lebih panjang menambah fill dan tidak pernah mengurangkannya. Persoalannya ialah berapa banyak daripada jumlah keseluruhan yang tiba cukup lewat sehingga tidak berguna.
SQL tepat di sebalik setiap nombor
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)) ASCMerentasi 2191 gap sebanyak 1% atau lebih, 34% diisi dalam sesi yang sama dan 88.7% telah diisi dalam tempoh 60 sessions. Angka kedua adalah yang biasanya dipetik, dengan tempoh masa ditinggalkan. Enam puluh sesi adalah kira-kira tiga bulan dagangan, tempoh pegangan yang lama untuk posisi yang berasaskan gangguan satu hari, dan gap yang diisi pada hari ke-47 selepas saham bergerak jauh ke arah bertentangan terlebih dahulu masih dikira sebagai diisi dalam statistik tersebut.
Gap gangguan dan gap maklumat adalah dua populasi berbeza
Gap pada hari yang tenang dengan volum biasa adalah pelarasan harga yang kecil. Gap pada berita pendapatan atau tawaran pengambilalihan membawa perubahan dalam nilai syarikat, dan tiada harga lama untuk kembali semula. Volum memisahkan kedua-duanya dengan baik: penetapan harga semula yang ingin didagangkan oleh seluruh pasaran mencatatkan banyak kali ganda daripada perolehan biasa.
SQL tepat di sebalik setiap nombor
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) ASCGap sebanyak 1% atau lebih pada volum di bawah 1.5 kali ganda perolehan biasa saham diisi pada sesi yang sama sebanyak 35.9% daripada jumlah keseluruhan. Gap dengan saiz yang sama pada tiga kali ganda volum biasa atau lebih diisi pada sesi yang sama sebanyak 15.3% daripada jumlah keseluruhan, dan 45.8% dalam tempoh 20 sesi, merentasi 59 daripadanya. Kumpulan volum tinggi adalah tempat di mana gap pendapatan dan gap tawaran berada. Mengambil purata kedua-dua kumpulan menjadi satu angka tidak menggambarkan kedua-duanya dengan tepat.
Mengapa minit-minit pertama sesi memesongkan statistik gap
Fill yang direkodkan pada 9:31 pagi adalah sesuatu yang rapuh. Harga buka datang daripada lelongan, satu transaksi kelompok tunggal yang menetapkan satu harga untuk setiap pesanan yang beratur semalaman, dan penerangan lelongan pembukaan kami membincangkan mekanismenya. Pada minit-minit selepas transaksi itu, spread sebut harga berada pada tahap paling luas hari itu dan satu transaksi kecil boleh mencatatkan harga tinggi atau rendah yang tidak pernah didagangkan pada saiz tersebut. Spread melebar pada waktu buka merangkumi sebab mengapa sebut harga begitu nipis di sana.
Carta di bawah menunjukkan bentuk pada pita bakul itu sendiri: purata julat tinggi-rendah satu minit dalam basis points (satu basis point ialah satu peratus daripada satu peratus), mengikut baldi masa lima belas minit, sepanjang 2025.
SQL tepat di sebalik setiap nombor
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 ASCBaldi pembukaan mencatatkan purata 24.4 bps julat seminit berbanding 6.9 bps dalam baldi 12:30, pada 303.9 ribu saham seminit berbanding 69.6 ribu. Fill yang dicap dalam baldi pertama itu bergantung pada harga yang paling tidak boleh dipercayai pada hari tersebut. Angka sesi yang sama di atas termasuk minit-minit tersebut, yang sedikit memihak kepada angka yang lebih tinggi, dan peringatan itu terpakai kepada setiap statistik fill hari yang sama, termasuk yang ini.
Apa yang perlu diperiksa sebelum menganggap gap sebagai dagangan
- Tempoh masa. Kadar fill tanpa tarikh akhir yang ditetapkan bukanlah statistik.
- Populasi. Sama ada gap berita dipisahkan daripada gap yang tenang, dan bagaimana garisan itu dilukis.
- Pengukuran. Sama ada fill diuji terhadap julat dagangan sebenar, dan sama ada minit-minit pertama sesi dikira.
- Yang terselamat. Sama ada sampel hanya memegang saham yang masih didagangkan hari ini, yang secara senyap-senyap memadamkan gap yang tidak pernah diisi.
Versi jujur bagi dakwaan ini lebih sempit daripada slogan tersebut. Gap kecil pada volum biasa sering berbalik dengan cepat. Gap besar pada volum tinggi adalah penetapan harga semula yang kerap bertahan selama berbulan-bulan. Untuk pandangan langsung tentang nama yang mengalami gap, halaman penggerak saham terbesar minggu ini menjejaki minggu semasa, dan bagaimana pasaran pulih daripada kejatuhan menggunakan disiplin tempoh masa yang sama terhadap penurunan indeks.
Soalan Lazim
Adakah gap saham sentiasa diisi?
Tidak. Dalam sampel di sini, 88.7% daripada gap sebanyak 1% atau lebih didagangkan semula melepasi harga tutup sebelumnya dalam tempoh 60 sessions, yang meninggalkan sebahagian daripadanya tidak diisi selepas kira-kira tiga bulan dagangan. Versi "sentiasa" hanya berfungsi tanpa had masa yang ditetapkan, yang pada ketika itu ia berhenti menjadi sesuatu yang boleh diuji.
Berapa lama masa yang diambil untuk gap diisi?
Ia bergantung pada gap tersebut. Di sini, 34% daripada gap sebanyak 1% atau lebih diisi dalam sesi yang sama, dan baki fill tiba sepanjang minggu dan bulan berikutnya. Gap kecil tertumpu dalam baldi hari yang sama, dan gap volum tinggi adalah yang paling perlahan.
Apakah perbezaan antara gap biasa dan gap breakaway?
Perbendaharaan kata carta memisahkan gap mengikut konteks. Gap biasa dibuka pada hari biasa dengan volum biasa dan tiada berita khusus, manakala gap breakaway dibuka pada volum tinggi bersama maklumat baharu, selalunya keluar daripada julat harga yang telah dipegang oleh saham tersebut untuk seketika. Pemisahan volum dalam panel di atas adalah versi yang boleh diukur bagi perbezaan yang sama.
Mengapa statistik fill gap sangat berbeza antara sumber?
Empat pilihan mengubah angka tersebut dengan ketara: tempoh masa fill, bakul saham, tempoh yang diliputi, dan sama ada gap diukur daripada harga tutup sebelumnya atau daripada harga tinggi dan rendah sebelumnya. Kadar fill yang dipetik tanpa salah satu daripada empat perkara ini tidak boleh dibandingkan dengan yang lain.
Bagaimana angka ini diukur
Sesi dibina daripada bar satu minit dalam waktu dagangan biasa dalam waktu New York. Harga buka ialah harga buka bar sesi biasa yang pertama, harga tutup ialah harga tutup bar terakhir, dan harga tinggi serta rendah hari tersebut adalah ekstrem bagi bar-bar tersebut. Setiap gap diukur berbanding harga tutup sesi sebelumnya bagi ticker yang sama.
Tempoh masa 5, 20 dan 60 sesi termasuk hari gap itu sendiri. Hari gap berhenti pada akhir Februari 2026 manakala pita berjalan sehingga Jun 2026, jadi setiap gap dalam panel tempoh masa mempunyai sekurang-kurangnya enam puluh sesi kemudian yang tersedia dan tiada satu pun yang dinilai sebagai tidak diisi kerana kekurangan data.
Volum biasa dalam panel ketiga ialah purata volum sesi biasa sepanjang 20 sesi yang berakhir dua hari sebelum gap, yang mengekalkan hari gap dan hari sebelumnya di luar penanda aras mereka sendiri.
Bakul tersebut terdiri daripada lapan large cap yang cair. Nama yang lebih nipis mengalami gap dengan lebih kerap dan diisi secara berbeza, jadi kadar ini tidak terpakai kepada small cap tanpa menjalankan ujian yang sama ke atasnya.
Setiap panel di sini dihantar dengan SQL tepat di bawahnya. Untuk menjalankan ujian yang sama pada ticker yang anda ikuti, ajukan soalan dalam bahasa Inggeris mudah pada terminal Strasmore.