هل تُغلق فجوات الأسهم دائماً؟ البيانات
هل تُغلق فجوات الأسهم دائماً؟ ليس ضمن أفق زمني ثابت. تعرّف إلى معدلات الإغلاق في الجلسة نفسها وبعد 5 و20 و60 جلسة للأسهم الكبيرة، مع استعلام SQL.
هل تُغلق فجوات الأسهم دائماً؟ ليس ضمن أي أفق زمني قصير بما يكفي للتداول، وتبقى هذه المقولة صحيحة في الغالب لأن أحداً لا يحدد أفقاً زمنياً لها. الفجوة هي المسافة بين سعر الافتتاح اليوم وسعر إغلاق الجلسة النظامية أمس. أما إغلاق الفجوة فهو اللحظة التي يتداول فيها السعر مجدداً عبر سعر الإغلاق السابق. وتتمحور المسألة كلها حول المدة التي يقبل القارئ انتظارها حتى يحدث ذلك.
ما الذي يُعد فجوة، وما الذي يُعد إغلاقاً لها
تُقاس الفجوة بمقارنة الافتتاح بالإغلاق السابق. انتهت جلسة أمس عند سعر معين، وافتتحت جلسة اليوم عند سعر آخر، والفرق بينهما هو الفجوة. وهي ليست المسافة من أعلى سعر أو أدنى سعر سجّلته جلسة أمس خلال التداول. فهذا هدف مختلف وأسهل بكثير، واستبدال أحدهما بالآخر هو ما يجعل «الفجوة» تُغلق بهدوء قبل وقت الغداء في أي يوم عادي. تظهر الفجوات الصغيرة في كل جلسة تقريباً. فالتداول في مناطق زمنية أخرى، وتغييرات المؤشرات، والأخبار الخاصة بسهم معين، وتعديلات تاريخ ex-dividend، كلها تحرك السعر العادل بينما يكون السوق الأمريكي مغلقاً. يشرح لماذا تحدث فجوات للأسهم خلال الليل مصدر إعادة التسعير هذه.
إغلاق الفجوة هو أول لحظة يتداول فيها السهم مجدداً عبر سعر الإغلاق السابق. ولا يكتمل هذا التعريف من دون تحديد مهلة زمنية. فعلى مدى زمني غير محدود، يتجاوز سهم سائل تقريباً أي مستوى يحدده القارئ في وقت ما، ما يجعل عبارة «الفجوات تُغلق دائماً» غير قابلة للدحض بدلاً من أن تكون صحيحة. ولكل رقم أدناه أفق زمني محدد.
تستخدم المقالة عينة واحدة: ثمانية أسهم أمريكية كبيرة من حيث القيمة السوقية، وأيام فجوات من يناير 2021 إلى فبراير 2026، مع اختبار الإغلاق بالاستناد إلى أعلى وأدنى الأسعار المسجلة في أشرطة مدتها دقيقة واحدة خلال الجلسة النظامية. واستُبعدت الفجوات التي تقل عن 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)) ASCمن بين 2191 فجوة بلغت 1% أو أكثر، أُغلقت 34% خلال الجلسة نفسها، وكان 88.7% منها قد أُغلق خلال 60 sessions. وعادةً ما يُقتبس الرقم الثاني مع حذف الأفق الزمني. وتمثل ستون جلسة نحو ثلاثة أشهر تداول، وهي مدة احتفاظ طويلة لمركز بُني على أساس اختلال سعري ليوم واحد. كما أن الفجوة التي تُغلق في اليوم 47، بعد أن يكون السهم قد تحرك بعيداً في الاتجاه المعاكس أولاً، تُحتسب مع ذلك ضمن الفجوات المغلقة في هذه الإحصائية.
فجوات الضوضاء وفجوات المعلومات مجموعتان مختلفتان
الفجوة التي تظهر في يوم هادئ وبحجم تداول عادي تمثل تعديلاً صغيراً في التسعير. أما الفجوة التي تظهر عقب أخبار الأرباح أو عرض استحواذ، فتحمل تغيراً في قيمة الشركة، ولا يبقى عندها سعر قديم واضح ليعود إليه السهم. ويفصل حجم التداول بين المجموعتين بدرجة معقولة. فعندما يرغب السوق بأكمله في تداول إعادة التسعير، تظهر prints كثيرة مقارنة بمعدل التداول المعتاد.
استعلام 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% أو أكثر، وكان حجم التداول فيها أقل من 1.5 مرة من معدل التداول المعتاد للسهم، خلال الجلسة نفسها في 35.9% من الحالات. أما الفجوات ذات الحجم نفسه مع تداول يبلغ ثلاثة أضعاف المعدل المعتاد أو أكثر، فأُغلقت خلال الجلسة نفسها في 15.3% من الحالات، وخلال 20 جلسة في 45.8% من الحالات، من أصل 59 حالة. وتضم مجموعة التداول المرتفع فجوات الأرباح وفجوات صفقات الاستحواذ. أما حساب متوسط المجموعتين في رقم واحد فلا يصف أياً منهما.
لماذا تشوّه الدقائق الأولى من الجلسة إحصاءات إغلاق الفجوات؟
إغلاق الفجوة المسجل عند الساعة 9:31 صباحاً حالة هشة. فسعر الافتتاح ينتج عن مزاد، وهو تقاطع واحد مجمّع يحدد سعراً واحداً لكل أمر انتظر التنفيذ طوال الليل. ويشرح مزاد الافتتاح لدينا آلية ذلك. وفي الدقائق التي تلي هذا التقاطع، تكون فروق الأسعار المعروضة عند أوسع مستوياتها خلال اليوم، وقد تسجل صفقة صغيرة واحدة أعلى أو أدنى سعر لم يُتداول عنده أي حجم يُذكر. ويشرح لماذا تتسع فروق الأسعار عند الافتتاح سبب ضعف السيولة في الأسعار المعروضة هناك.
يوضح الرسم أدناه الشكل الذي يظهر على tape الخاص بسلة الأسهم نفسها: متوسط نطاق أعلى-أدنى لكل دقيقة، مقاساً بنقاط الأساس، حيث تساوي نقطة الأساس الواحدة واحداً من مئة من الواحد في المئة، ومصنفاً وفق فترات زمنية مدتها 15 دقيقة، حتى نهاية 2025.
استعلام 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 نقطة أساس في الدقيقة، مقابل 6.9 نقطة أساس في فترة 12:30، وذلك عند تداول 303.9 ألف سهم في الدقيقة مقابل 69.6 ألف سهم. ويستند إغلاق مسجل داخل فترة الافتتاح الأولى إلى أقل الأسعار موثوقية خلال اليوم. وتشمل أرقام الإغلاق خلال الجلسة نفسها الواردة أعلاه تلك الدقائق، ما يرفعها قليلاً. وينطبق هذا التحفظ على كل إحصائية لإغلاق الفجوات في اليوم نفسه، بما فيها هذه الإحصائية.
ما الذي يجب فحصه قبل التعامل مع الفجوة كصفقة؟
- الأفق الزمني. لا يُعد معدل الإغلاق الذي لا يحدد مهلة زمنية إحصائية.
- العينة. يجب معرفة ما إذا كانت فجوات الأخبار قد فُصلت عن الفجوات الهادئة، وكيف رُسم الحد الفاصل بينهما.
- القياس. يجب معرفة ما إذا اختُبرت حالات الإغلاق بالاستناد إلى نطاقات تداول فعلية، وما إذا احتُسبت الدقائق الأولى من الجلسة.
- الباقون في العينة. يجب معرفة ما إذا كانت العينة تضم فقط الأسهم التي ما زالت تتداول اليوم، لأن ذلك يحذف بهدوء الفجوات التي لم تُغلق قط.
النسخة الدقيقة من المقولة أضيق من الشعار. فالفجوات الصغيرة في ظل حجم تداول عادي تنعكس كثيراً وبسرعة. أما الفجوات الكبيرة مع حجم تداول مرتفع فهي عمليات إعادة تسعير قد تستمر أشهراً. وللاطلاع الفوري على الأسهم التي تظهر فيها فجوات، تتتبع صفحة أكبر تحركات الأسهم هذا الأسبوع الأسبوع الحالي، بينما تطبق صفحة كيف تتعافى الأسواق من الانهيارات الانضباط نفسه في تحديد الأفق الزمني على تراجعات المؤشرات.
الأسئلة الشائعة
هل تُغلق فجوات الأسهم دائماً؟
لا. في هذه العينة، عاد 88.7% من الفجوات التي بلغت 1% أو أكثر للتداول عبر سعر الإغلاق السابق خلال 60 sessions، ما يعني بقاء نسبة فعلية منها غير مغلقة بعد نحو ثلاثة أشهر من التداول. ولا تصح صيغة «دائماً» إلا عند عدم تحديد مهلة زمنية، وعندها تتوقف عن كونها قابلة للاختبار.
كم من الوقت يستغرق إغلاق الفجوة؟
يعتمد ذلك على الفجوة. في هذه العينة، أُغلقت 34% من الفجوات التي بلغت 1% أو أكثر خلال الجلسة نفسها، بينما حدثت حالات الإغلاق المتبقية خلال الأسابيع والأشهر التالية. وتتركز الفجوات الصغيرة في فئة الإغلاق خلال اليوم نفسه، في حين تستغرق الفجوات ذات حجم التداول المرتفع أطول مدة.
ما الفرق بين الفجوة العادية وفجوة الانفصال؟
يقسم مصطلح الرسوم البيانية الفجوات وفق سياقها. تفتح الفجوة العادية في يوم ذي تداول عادي وحجم تداول عادي ومن دون أخبار محددة، بينما تفتح فجوة الانفصال مع حجم تداول مرتفع بالتزامن مع معلومات جديدة، وغالباً خارج نطاق سعري ظل السهم يتداوله لفترة. ويقدم تقسيم حجم التداول في اللوحة أعلاه نسخة قابلة للقياس من هذا الفرق نفسه.
لماذا تختلف إحصاءات إغلاق الفجوات كثيراً بين المصادر؟
تؤثر أربعة اختيارات في الرقم بدرجة كبيرة: أفق الإغلاق، وسلة الأسهم، والفترة التي تغطيها البيانات، وما إذا كانت الفجوة تُقاس من الإغلاق السابق أو من أعلى سعر وأدنى سعر سابقين. ولا يمكن مقارنة معدل إغلاق مذكور يفتقد أيّاً من هذه العناصر الثلاثة الأخرى بمعدل آخر.
كيفية قياس هذه الأرقام
بُنيت الجلسات من أشرطة مدتها دقيقة واحدة داخل ساعات التداول النظامية بتوقيت نيويورك. وسعر الافتتاح هو افتتاح أول شريط في الجلسة النظامية، وسعر الإغلاق هو إغلاق آخر شريط، بينما يمثل أعلى سعر وأدنى سعر لليوم أعلى وأدنى المستويات في تلك الأشرطة. وقيسَت كل فجوة بالاستناد إلى سعر إغلاق الجلسة السابقة للسهم نفسه.
تشمل الآفاق الزمنية البالغة 5 و20 و60 جلسة يوم الفجوة نفسه. وتتوقف أيام الفجوات عند نهاية فبراير 2026، بينما تمتد بيانات التداول حتى يونيو 2026. لذلك يتوافر لكل فجوة في لوحة الأفق الزمني ما لا يقل عن ستين جلسة لاحقة، ولا تُصنَّف أي فجوة على أنها غير مغلقة بسبب نقص البيانات.
يمثل حجم التداول المعتاد في اللوحة الثالثة متوسط حجم التداول خلال الجلسة النظامية في الجلسات العشرين السابقة المنتهية قبل يومين من الفجوة. ويستبعد ذلك يوم الفجوة واليوم السابق له من معيار المقارنة الخاص بهما.
تتكون السلة من ثمانية أسهم كبيرة عالية السيولة. وتظهر الفجوات في الأسهم الأقل سيولة بوتيرة أعلى وتُغلق بطريقة مختلفة، لذلك لا تنطبق هذه المعدلات على الأسهم الصغيرة من دون إعادة إجراء الاختبار نفسه عليها.
تتضمن كل لوحة هنا استعلام SQL الدقيق أسفلها. ولإجراء الاختبار نفسه على ticker تتابعه، اطرح السؤال بالإنجليزية العادية على منصة Strasmore.