Hisse senedi boşlukları her zaman dolar mı?
Hisse senedi boşluklarının dolma ihtimalini verilerle inceleyin. Büyük ölçekli şirketler için beş, yirmi ve altmış seanslık doluş oranlarını ve SQL analizlerini keşfedin.
Hisse senedi boşlukları (gap) her zaman dolar mı? İşlem yapmak için yeterince kısa olan hiçbir zaman diliminde bu durum geçerli değildir; bu iddia, genellikle kimse bir vade belirtmediğinde varlığını sürdürür. Boşluk, bugünkü açılış fiyatı ile dünkü normal seans kapanış fiyatı arasındaki mesafedir. Doluş ise fiyatın söz konusu önceki kapanış seviyesine geri döndüğü andır. Tüm tartışma, okuyucunun bu geri dönüş için ne kadar beklemeye istekli olduğu üzerine kuruludur.
Boşluk ve doluş nedir
Boşluk, açılış fiyatının önceki kapanışa göre ölçülmesiyle belirlenir. Dünkü seans bir fiyattan kapanmış, bugünkü ise başka bir fiyattan açılmıştır; aradaki fark boşluktur. Bu, dünkü gün içi en yüksek veya en düşük seviyeden olan mesafe değildir. O, çok daha farklı ve kolay bir hedeftir; birini diğeriyle karıştırmak, "boşluk" kavramının sıradan bir günde öğle yemeğine kadar nasıl sessizce kapandığının açıklamasıdır. Küçük boşluklar neredeyse her seansta görülür: Farklı zaman dilimlerindeki işlemler, endeks değişiklikleri, şirket özelindeki haberler ve ex-dividend düzeltmeleri, ABD piyasası kapalıyken adil fiyatı değiştirir. Hisseler neden gece boşluk bırakır bölümü, bu gecelik yeniden fiyatlamanın kaynağını ele almaktadır.
Doluş, hissenin önceki kapanış fiyatına geri döndüğü ilk andır. Bu tanım, bir vade belirtilmediği sürece eksiktir. Sınırsız bir zaman diliminde, likit bir hisse senedi okuyucunun belirlediği hemen hemen her seviyeyi bir noktada aşar; bu da "boşluklar her zaman dolar" ifadesini doğru olmaktan ziyade yanlışlanamaz kılar. Aşağıdaki her rakam, belirtilen bir vadeye dayanmaktadır.
Bu sayfadaki örneklem, Ocak 2021 ile Şubat 2026 arasındaki boşluk günlerini kapsayan sekiz büyük ölçekli ABD hissesinden oluşmakta olup doluşlar, normal seansın bir dakikalık en yüksek ve en düşük seviyelerine göre test edilmiştir. Yüzde 0,25'in altındaki boşluklar yuvarlama payı olarak elenmiştir.
Hisse senedi boşlukları her zaman aynı gün dolar mı?
Boyutla başlayalım. Her boşluğu büyüklüğüne göre gruplandırın ve ardından önceki kapanışın seans bitmeden tekrar görülüp görülmediğini inceleyin.
Her verinin arkasındaki tam 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Örneklemdeki en küçük boşluklar olan yüzde 0,25 ila yüzde 0,5 arasındaki boşluklar, 2381 adet vakada 74.6% oranında aynı seans içinde kapanmıştır. Yüzde 4 veya daha büyük boşluklar ise aynı seans içinde 14.8% oranında kapanmıştır. Grafikteki aşağı yönlü eğim, dersin özünü oluşturur: Boşluk ne kadar küçükse, hisse senedi gün içinde o seviyeye o kadar sık geri döner; bu da küçük boşlukların gürültüden ibaret olduğunu ve gürültünün tersine döndüğünü gösterir.
Bir boşluğun dolması ne kadar sürer?
Vade uzatıldığında doluş oranı kaçınılmaz olarak artar. Daha uzun bir pencere, doluşları ekler ancak hiçbirini çıkarmaz. Asıl soru, toplamın ne kadarının işe yaramayacak kadar geç gerçekleştiğidir.
Her verinin arkasındaki tam 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)) ASCYüzde 1 veya daha büyük 2191 boşluk genelinde, 34% aynı seans içinde dolmuş, 88.7% ise 60 sessions içinde doluş gerçekleşmiştir. İkinci rakam, genellikle vade belirtilmeden alıntılanan orandır. Altmış seans yaklaşık üç işlem ayına denk gelir; bu, tek günlük bir fiyat sapmasına dayalı bir pozisyon için oldukça uzun bir süredir. Hisse senedi önce aksi yönde büyük bir hareket yaptıktan sonra kırk yedinci günde dolan bir boşluk, bu istatistikte hala "dolmuş" olarak sayılır.
Gürültü boşlukları ve bilgi boşlukları iki ayrı gruptur
Sıradan hacimli ve sakin bir gündeki boşluk, küçük bir fiyatlama düzeltmesidir. Kazanç haberleri veya devralma teklifi üzerine oluşan bir boşluk ise şirketin değerindeki bir değişimi yansıtır ve geri dönülecek eski bir fiyat artık yoktur. Hacim, bu ikisini oldukça iyi ayırır: Tüm piyasanın işlem yapmak istediği bir yeniden fiyatlama, normal cironun katbekat üzerinde gerçekleşir.
Her verinin arkasındaki tam 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) ASCHissenin normal cironun 1,5 katından daha düşük hacimle gerçekleşen yüzde 1 veya üzeri boşluklar, aynı seans içinde 35.9% oranında dolmuştur. Aynı büyüklükteki boşluklar, normal hacmin üç katı veya üzerinde gerçekleştiğinde aynı seans içinde 15.3% oranında dolmuş, 59 adet vakada ise 45.8% oranında yirmi seans içinde doluş gerçekleşmiştir. Yüksek hacimli grup, kazanç boşluklarının ve anlaşma kaynaklı boşlukların bulunduğu yerdir. İki grubu tek bir rakamda ortalamak, hiçbirini doğru tanımlamaz.
Seansın ilk dakikaları boşluk istatistiklerini neden bozar?
Sabah 09:31'de kaydedilen bir doluş, kırılgan bir veridir. Açılış fiyatı, gece boyunca biriken tüm emirler için tek bir fiyat belirleyen toplu bir eşleşme olan açık artırmadan çıkar; açılış açık artırması açıklayıcımız bu mekanizmayı detaylandırır. Bu eşleşmeden sonraki dakikalarda, kotasyon spread'leri günün en geniş seviyesindedir ve tek bir küçük işlem, hiçbir hacmin gerçekleşmediği bir en yüksek veya en düşük seviyeyi kaydedebilir. Spread'ler açılışta genişler bölümü, kotasyonun neden bu kadar sığ olduğunu ele alır.
Aşağıdaki grafik, sepetin kendi verileri üzerindeki durumu göstermektedir: 2025 yılı boyunca, on beş dakikalık zaman dilimlerine göre ortalama bir dakikalık en yüksek-en düşük aralığı (bir baz puan, yüzde birin yüzde biridir).
Her verinin arkasındaki tam 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 ASCAçılış dilimi, dakikada 12:30 baz puanlık aralığa sahip 6.9 baz puanlık dilime kıyasla, dakikada 69.6 bin hisse yerine 303.9 bin hisse ile ortalama 24.4 baz puanlık aralık sergiler. İlk dilim içinde damgalanan bir doluş, günün en güvenilmez fiyatlarına dayanır. Yukarıdaki aynı seans rakamları bu dakikaları içerir, bu da onları biraz yüksek gösterir; bu uyarı, bu istatistik dahil olmak üzere tüm aynı gün doluş verileri için geçerlidir.
Bir boşluğu işlem olarak değerlendirmeden önce kontrol edilmesi gerekenler
- Vade. Vadesi belirtilmeyen bir doluş oranı istatistik değildir.
- Popülasyon. Haber kaynaklı boşlukların sakin günlerdeki boşluklardan ayrılıp ayrılmadığı ve bu ayrımın nasıl yapıldığı.
- Ölçüm. Doluşların gerçek işlem aralıklarına göre test edilip edilmediği ve seansın ilk dakikalarının dahil edilip edilmediği.
- Hayatta kalanlar. Örneklemin sadece bugün hala işlem gören hisseleri içerip içermediği; bu durum, hiç dolmayan boşlukları sessizce eler.
İddianın dürüst versiyonu, slogandan daha dardır. Sıradan hacimli küçük boşluklar sıklıkla ve hızla tersine döner. Yüksek hacimli büyük boşluklar ise genellikle aylarca süren yeniden fiyatlamalardır. Hangi hisselerin boşluk bıraktığına dair canlı bir görünüm için bu haftanın en büyük hisse senedi hareketleri sayfası güncel haftayı takip ederken, piyasalar çöküşlerden nasıl toparlanır bölümü aynı vade disiplinini endeks düşüşlerine uygular.
SSS
Hisse senedi boşlukları her zaman dolar mı?
Hayır. Buradaki örneklemde, yüzde 1 veya daha büyük boşlukların 88.7% kadarı 60 sessions içinde önceki kapanış seviyesine geri dönmüştür; bu da yaklaşık üç işlem ayından sonra bunların önemli bir kısmının dolmadığını gösterir. "Her zaman" ifadesi, yalnızca bir zaman sınırı olmadığında işler; bu noktada ise test edilebilirliğini yitirir.
Bir boşluğun dolması ne kadar sürer?
Bu, boşluğa bağlıdır. Burada, yüzde 1 veya daha büyük boşlukların 34% kadarı aynı seans içinde dolmuş, geri kalan doluşlar ise takip eden haftalar ve aylar içinde gerçekleşmiştir. Küçük boşluklar aynı gün içinde yoğunlaşırken, yüksek hacimli olanlar en yavaş dolanlardır.
Yaygın boşluk (common gap) ile kopuş boşluğu (breakaway gap) arasındaki fark nedir?
Grafik terminolojisi, boşlukları bağlama göre ayırır. Yaygın boşluk, özel bir haberin olmadığı, sıradan hacimli ve sıradan bir günde açılırken; kopuş boşluğu, genellikle hissenin bir süredir koruduğu fiyat aralığının dışına çıkarak, yeni bilgilerle birlikte yüksek hacimde açılır. Yukarıdaki paneldeki hacim ayrımı, bu ayrımın ölçülebilir bir versiyonudur.
Boşluk doluş istatistikleri kaynaklar arasında neden bu kadar farklılık gösterir?
Dört seçim rakamı büyük ölçüde değiştirir: doluş vadesi, hisse senedi sepeti, kapsanan dönem ve boşluğun önceki kapanıştan mı yoksa önceki en yüksek ve en düşük seviyelerden mi ölçüldüğü. Bu dört unsurdan herhangi birini içermeyen bir doluş oranı, bir diğeriyle kıyaslanamaz.
Bu rakamlar nasıl ölçüldü
Seanslar, New York saatine göre normal işlem saatleri içindeki bir dakikalık barlardan oluşturulmuştur. Açılış fiyatı ilk normal seans barının açılışı, kapanış son barın kapanışı, günün en yüksek ve en düşük seviyeleri ise bu barların uç noktalarıdır. Her boşluk, aynı ticker'ın önceki seans kapanışına göre ölçülmüştür.
5, 20 ve 60 seanslık vadeler, boşluğun oluştuğu günü de içerir. Boşluk günleri Şubat 2026 sonunda biterken veri akışı Haziran 2026'ya kadar devam etmektedir; bu nedenle vade panelindeki her boşluk en az altmış sonraki seansa sahiptir ve hiçbiri veri eksikliği nedeniyle dolmamış olarak işaretlenmemiştir.
Üçüncü paneldeki normal hacim, boşluk gününden iki gün önce biten 20 seanslık normal seans hacminin ortalamasıdır; bu, boşluk gününü ve bir önceki günü kendi kıyaslama değerlerinin dışında tutar.
Sepet, sekiz likit büyük ölçekli hisseden oluşmaktadır. Daha sığ hisseler daha sık boşluk bırakır ve farklı şekilde dolar; bu nedenle bu oranlar, aynı test yeniden uygulanmadan küçük ölçekli hisselere aktarılamaz.
Buradaki her panel, altındaki SQL koduyla birlikte sunulur. Takip ettiğiniz bir ticker üzerinde aynı testi çalıştırmak için Strasmore terminalinde sorunuzu yalın bir dille iletmeniz yeterlidir.