Czy luki cenowe na akcjach zawsze są domykane?
Analiza częstotliwości domykania luk cenowych dla spółek o dużej kapitalizacji w horyzoncie pięciu, dwudziestu oraz sześćdziesięciu sesji wraz z metodologią obliczeń.
Czy luki cenowe na akcjach zawsze są domykane? Nie w horyzoncie czasowym wystarczająco krótkim, by przeprowadzić transakcję. Twierdzenie to utrzymuje się głównie dlatego, że nikt nie precyzuje ram czasowych. Luka to różnica między ceną otwarcia w dniu dzisiejszym a ceną zamknięcia z poprzedniej sesji. Domyknięcie to moment, w którym kurs powraca do poziomu tego poprzedniego zamknięcia. Cały spór sprowadza się do tego, jak długo inwestor jest w stanie czekać na taki ruch.
Czym jest luka i czym jest jej domknięcie
Lukę mierzy się jako różnicę między ceną otwarcia a poprzednim zamknięciem. Wczorajsza sesja zakończyła się przy określonej cenie, dzisiejsza otworzyła się przy innej, a różnica między nimi to luka. Nie jest to odległość od wczorajszego maksimum lub minimum wewnątrz sesji. To inny, znacznie łatwiejszy cel, a mylenie tych pojęć sprawia, że „luka” w potocznym rozumieniu staje się czymś, co domyka się przed lunchem w każdy zwyczajny dzień. Niewielkie luki pojawiają się niemal na każdej sesji: handel w innych strefach czasowych, zmiany w składach indeksów, wiadomości dotyczące konkretnych spółek oraz korekty o wartość dywidendy (ex-dividend) zmieniają cenę rynkową, gdy rynek w USA jest zamknięty. Artykuł Dlaczego akcje tworzą luki nocne wyjaśnia źródła tej nocnej wyceny.
Domyknięcie to pierwszy moment, w którym akcje powracają do poziomu poprzedniej ceny zamknięcia. Definicja ta jest niekompletna bez określenia terminu. W nieograniczonym horyzoncie czasowym płynne akcje przekroczą niemal każdy poziom wskazany przez obserwatora, co czyni twierdzenie „luki zawsze się domykają” niemożliwym do obalenia, a nie prawdziwym. Każda liczba poniżej odnosi się do określonego horyzontu.
Analiza opiera się na jednej próbie: ośmiu spółkach o dużej kapitalizacji z USA, dniach z lukami od stycznia 2021 r. do lutego 2026 r., przy czym domknięcia testowano względem maksimów i minimów z minutowych interwałów sesji regularnej. Luki poniżej 0,25% pominięto jako efekt zaokrągleń.
Czy luki na akcjach zawsze domykają się tego samego dnia?
Zacznijmy od wielkości. Pogrupujmy każdą lukę według jej skali, a następnie sprawdźmy, czy poprzednia cena zamknięcia została ponownie osiągnięta przed końcem tej samej sesji.
Dokładny kod SQL dla każdej liczby
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) ASCNajmniejsze luki w próbie, od 0,25% do 0,5%, domykały się w tej samej sesji w 74.6% przypadków na 2381 wystąpień. Luki o wartości 4% lub większej domykały się w tej samej sesji w 14.8% przypadków. Nachylenie wykresu stanowi istotę wniosków: im mniejsza luka, tym częściej kurs powraca do tego poziomu w ciągu dnia, co oznacza, że małe luki są szumem, a szum ulega odwróceniu.
Jak długo trwa domknięcie luki?
Wydłużenie terminu nieuchronnie zwiększa wskaźnik domknięć. Dłuższe okno czasowe dodaje domknięcia, nigdy ich nie usuwając. Pytanie brzmi, jaka część całkowitej liczby domknięć następuje zbyt późno, by była użyteczna.
Dokładny kod SQL dla każdej liczby
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)) ASCSpośród 2191 luk o wartości 1% lub większej, 34% domknęło się w tej samej sesji, a 88.7% domknęło się w ciągu 60 sessions. Ta druga liczba jest najczęściej cytowana, zazwyczaj bez podawania horyzontu czasowego. Sześćdziesiąt sesji to w przybliżeniu trzy miesiące handlowe – długi okres utrzymywania pozycji opartej na jednodniowym zaburzeniu. Luka, która domyka się w czterdziestym siódmym dniu po tym, jak kurs najpierw powędrował w przeciwnym kierunku, wciąż liczy się w tej statystyce jako domknięta.
Luki szumu a luki informacyjne to dwie różne populacje
Luka w spokojny dzień przy przeciętnym wolumenie to niewielka korekta wyceny. Luka wywołana wynikami finansowymi lub informacją o przejęciu niesie ze sobą zmianę wartości spółki i nie ma starej ceny, do której kurs miałby powrócić. Wolumen dość dobrze rozróżnia te dwa przypadki: zmiana wyceny, którą chce handlować cały rynek, generuje obroty wielokrotnie przewyższające normę.
Dokładny kod SQL dla każdej liczby
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) ASCLuki o wartości 1% lub większej przy wolumenie poniżej 1,5-krotności przeciętnego obrotu domykały się w tej samej sesji w 35.9% przypadków. Luki tej samej wielkości przy wolumenie trzykrotnie wyższym od przeciętnego domykały się w tej samej sesji w 15.3% przypadków, a 45.8% z nich domknęło się w ciągu 20 sesji, na łączną liczbę 59. Grupa o wysokim wolumenie to miejsce, w którym znajdują się luki wynikowe i te związane z transakcjami kapitałowymi. Uśrednianie obu grup do jednej liczby nie opisuje poprawnie żadnej z nich.
Dlaczego pierwsze minuty sesji zniekształcają statystyki luk
Domyknięcie odnotowane o 9:31 rano jest zjawiskiem kruchym. Cena otwarcia wynika z aukcji – pojedynczego, zbiorczego zlecenia, które ustala jedną cenę dla wszystkich zleceń zakolejkowanych w nocy; nasz artykuł aukcja otwarcia wyjaśnia te mechanizmy. W minutach po tym rozliczeniu spready kwotowane są najszerzej w ciągu dnia, a jeden niewielki transakcyjny „print” może zarejestrować maksimum lub minimum, przy którym nie zawarto żadnej znaczącej transakcji. Artykuł Spready rozszerzają się na otwarciu omawia, dlaczego kwotowania są tam tak płytkie.
Poniższy wykres pokazuje kształt na taśmie koszyka akcji: średni zakres maksimum-minimum w interwale minutowym w punktach bazowych (jeden punkt bazowy to jedna setna procenta), według piętnastominutowych przedziałów czasowych, w roku 2025.
Dokładny kod SQL dla każdej liczby
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 ASCPrzedział otwarcia wykazuje średnio 24.4 pb zakresu na minutę w porównaniu do 6.9 pb w przedziale 12:30, przy wolumenie 303.9 tys. akcji na minutę wobec 69.6 tys. Domyknięcie zarejestrowane w tym pierwszym przedziale opiera się na najmniej wiarygodnych cenach dnia. Powyższe liczby dla tej samej sesji uwzględniają te minuty, co nieco zawyża wyniki, a to zastrzeżenie dotyczy każdej statystyki domknięć wewnątrz dnia.
Co sprawdzić przed potraktowaniem luki jako sygnału transakcyjnego
- Horyzont czasowy. Wskaźnik domknięć bez określonego terminu nie jest statystyką.
- Populację. Czy luki informacyjne zostały oddzielone od tych powstałych w spokojnych warunkach i w jaki sposób wyznaczono tę granicę.
- Pomiar. Czy domknięcia testowano względem rzeczywistych zakresów transakcyjnych i czy uwzględniono pierwsze minuty sesji.
- Przetrwanie. Czy próba zawiera tylko spółki, które nadal są notowane, co po cichu usuwa luki, które nigdy się nie domknęły.
Uczciwa wersja tego twierdzenia jest węższa niż hasło reklamowe. Małe luki przy zwykłym wolumenie często i szybko ulegają odwróceniu. Duże luki przy wysokim wolumenie to zmiany wyceny, które często utrzymują się przez miesiące. Aby zobaczyć na żywo, które spółki tworzą luki, strona największe ruchy na akcjach w tym tygodniu śledzi bieżący tydzień, a jak rynki wychodzą z krachów stosuje tę samą dyscyplinę horyzontu czasowego do spadków indeksów.
FAQ
Czy luki na akcjach zawsze się domykają?
Nie. W przedstawionej próbie 88.7% luk o wartości 1% lub większej powróciło do poziomu poprzedniego zamknięcia w ciągu 60 sessions, co oznacza, że znaczna ich część pozostaje niedomknięta po około trzech miesiącach handlu. Wersja „zawsze” działa tylko bez limitu czasowego, w którym to momencie przestaje być możliwa do przetestowania.
Jak długo trwa domknięcie luki?
To zależy od luki. W tym przypadku 34% luk o wartości 1% lub większej domknęło się w tej samej sesji, a pozostałe domknięcia następowały w kolejnych tygodniach i miesiącach. Małe luki koncentrują się w przedziale tej samej sesji, a te przy wysokim wolumenie są najwolniejsze.
Jaka jest różnica między luką zwykłą a luką ucieczki?
Słownictwo giełdowe dzieli luki według kontekstu. Luka zwykła otwiera się w zwyczajny dzień przy przeciętnym wolumenie i braku konkretnych wiadomości, podczas gdy luka ucieczki otwiera się przy wysokim wolumenie wraz z nowymi informacjami, często wybijając kurs z zakresu, w którym akcje pozostawały przez dłuższy czas. Podział według wolumenu w powyższym panelu to mierzalna wersja tego samego rozróżnienia.
Dlaczego statystyki domknięć luk tak bardzo różnią się między źródłami?
Cztery czynniki znacząco zmieniają wynik: horyzont domknięcia, koszyk akcji, badany okres oraz to, czy luka jest mierzona od poprzedniego zamknięcia, czy od poprzedniego maksimum i minimum. Cytowany wskaźnik domknięć, któremu brakuje któregokolwiek z tych czterech elementów, nie może być porównywany z innym.
Jak mierzono te liczby
Sesje zbudowano z minutowych słupków w godzinach regularnego handlu czasu nowojorskiego. Cena otwarcia to otwarcie pierwszego słupka sesji regularnej, zamknięcie to zamknięcie ostatniego słupka, a dzienne maksimum i minimum to ekstrema tych słupków. Każda luka jest mierzona względem zamknięcia poprzedniej sesji tego samego tickera.
Horyzonty 5, 20 i 60 sesji obejmują sam dzień powstania luki. Dni z lukami kończą się z końcem lutego 2026 r., podczas gdy taśma notowań biegnie do czerwca 2026 r., więc każda luka w panelu horyzontów ma dostępnych co najmniej sześćdziesiąt kolejnych sesji i żadna nie jest oznaczona jako niedomknięta z powodu braku danych.
Normalny wolumen w trzecim panelu to średni wolumen sesji regularnej z 20 sesji kończących się dwa dni przed luką, co wyklucza dzień luki i dzień ją poprzedzający z ich własnego punktu odniesienia.
Koszyk składa się z ośmiu płynnych spółek o dużej kapitalizacji. Mniej płynne podmioty tworzą luki częściej i domykają się inaczej, więc te wskaźniki nie przekładają się na spółki o małej kapitalizacji bez ponownego przeprowadzenia tego samego testu.
Każdy panel tutaj jest dostarczany z dokładnym kodem SQL pod nim. Aby przeprowadzić ten sam test na obserwowanym tickerze, zadaj pytanie w prostym języku angielskim na terminalu Strasmore.