Strasmore Research

طوابع بيانات السوق: ساعة SIP أم البورصة؟

تعرّف إلى الساعات الأربع لصفقة واحدة، وكيف يغيّر ترتيب الصفقات وفق كل ساعة شكل الشريط، ولماذا تختار ساعة البورصة أو SIP للتحليل الصحيح.

تُسجَّل الطوابع الزمنية لبيانات السوق على صفقة منفَّذة واحدة أثناء انتقالها من محرك المطابقة الذي نفّذها إلى الشاشة التي تعرضها. وتحمل صفقة في سوق الأسهم الأمريكية ثلاثاً منها في السجل العام، وتجيب كل واحدة عن سؤال مختلف. رتّب صفقات اليوم نفسه وفق ساعة، ثم وفق ساعة أخرى، وستحصل فعلياً على شريطين مختلفين.

الساعات الأربع التي تمر بها الصفقة المنفَّذة الواحدة

تُسجَّل الطوابع على الصفقة عدة مرات أثناء وصولها إليك. بالترتيب:

  1. وقت محرك المطابقة. اللحظة التي طابق فيها محرك المطابقة لدى venue أمرين. لا يقرأ أي طرف خارج venue هذه القيمة مباشرةً. وهي المرجع الفعلي لوقت حدوث الصفقة، وكل ساعة بعدها ليست سوى تقريب له.
  2. وقت المشارك، ويُسمى أيضاً وقت venue أو وقت البورصة. الطابع الذي تكتبه venue عند نشر الصفقة على موجزها الخاص، وتحمله خانة participant_timestamp. ومن بين القيم التي يمكنك قراءتها فعلياً، تكون هذه الأقرب إلى محرك المطابقة.
  3. وقت SIP. الطابع الذي يكتبه معالج معلومات الأوراق المالية عندما تصل الصفقة إلى الشريط الموحّد، وهو الموجز الرسمي الوحيد الذي يدمج جميع venues الأمريكية للأسهم. وهذه هي خانة sip_timestamp، ويتبع تسلسل الشريط الرسمي هذا الطابع. ويرد الفرق بين هذا الموجز وموجز venue الخاص في موجز SIP مقابل موجزات البورصات المباشرة.
  4. وقت الالتقاط. الطابع الذي تسجله بطاقة الشبكة الخاصة بك عندما تصل الحزمة. ولا يظهر في سجل المورّد، لأنه يصف مسارك أنت لا السوق. تعمل مهام التقاط الحزم وإعادة تشغيلها بالكامل وفق هذه الساعة.

تحمل الصفقات خارج البورصة طابعاً خامساً هو trf_timestamp، ويحدد وقت استلام مرفق الإبلاغ عن الصفقات للتقرير.

لماذا تختلف الطوابع الزمنية لبيانات السوق بين venues

الفارق بين طابع venue والطابع الموحّد هو الوقت الذي أمضته الصفقة في الانتقال وفي طابور المعالج. وليس هذا الفارق رقماً واحداً. فكل venue يبعد مسافة مختلفة عن المعالج، ويستخدم أجهزة مختلفة، ويقف خلف طابور مختلف. يقيس الجدول أدناه هذا الفارق لكل venue سجّلت صفقات على AAPL خلال نصف ساعة ثابت في 10 يونيو 2026.

الاستعلامتأخر استلام SIP حسب مكان التداول، AAPL، 10 يونيو 2026 (ميكروثانية)
استعلام SQL الدقيق وراء كل رقم
WITH venues AS
(
    SELECT
        toUInt32(id)                             AS exchange_id,
        any(coalesce(nullIf(acronym, ''), name)) AS venue_name
    FROM global_markets.stocks_exchanges
    WHERE asset_class = 'stocks'
    GROUP BY exchange_id
)
SELECT
    if(v.venue_name = '', concat('Venue ', toString(t.exchange)), v.venue_name) AS venue,
    count()                                                                     AS print_count,
    round(quantileDeterministic(0.5)(
        toFloat64(toUnixTimestamp64Nano(t.sip_timestamp)
                - toUnixTimestamp64Nano(t.participant_timestamp)) / 1000,
        toUInt64(t.sequence_number)), 1)                                        AS median_lag_us,
    round(quantileDeterministic(0.99)(
        toFloat64(toUnixTimestamp64Nano(t.sip_timestamp)
                - toUnixTimestamp64Nano(t.participant_timestamp)) / 1000,
        toUInt64(t.sequence_number)), 1)                                        AS p99_lag_us
FROM global_markets.stocks_trades AS t
LEFT JOIN venues AS v ON v.exchange_id = toUInt32(t.exchange)
WHERE t.ticker = 'AAPL'
  AND t.sip_timestamp >= '2026-06-10 14:30:00'
  AND t.sip_timestamp <  '2026-06-10 15:00:00'
  AND ifNull(toUnixTimestamp64Nano(t.trf_timestamp), 0) = 0
GROUP BY venue
HAVING count() >= 200
ORDER BY median_lag_us DESC
LIMIT 15
Run this yourself

بين تلك venues، بلغ أوسع فارق وسطي بين طابع venue والطابع الموحّد 346.2 ميكروثانية، لدى NYSE Arca, Inc.. أما venue الأسرع في النافذة نفسها فسجّل 13.7 ميكروثانية. ويستحق عمود p99 الاهتمام الأكبر: فقد بلغ لدى venue الأبطأ نفسه 420.8 ميكروثانية، وهو ذيل التوزيع الذي يخفيه الوسيط.

أي طابع زمني ينبغي أن تستخدم

تغطي أربع قواعد معظم الحالات.

  • استخدم وقت المشارك في أبحاث البنية الدقيقة ودراسات الأحداث. كل ما يقيس ما حدث لدى venue وترتيبه الزمني يجب أن يعتمد على ساعة venue. وإعادة بناء دفتر الأوامر، وهو موضوع بيانات دفتر الأوامر MBO مقابل MBP، لا تصلح باستخدام أي ساعة أخرى.
  • استخدم وقت SIP لكل ما يجب أن يتطابق مع الشريط الرسمي. ويشمل ذلك التقارير التنظيمية، ومراجعة أفضل تنفيذ، والافتتاح والإغلاق الرسميين، وأي رقم سيتحقق منه الطرف المقابل مقابل السجل الموحّد.
  • استخدم وقت الالتقاط لقياس مسارك أنت فقط. فهو يوضح المدة التي استغرقتها البيانات للوصول إلى جهازك. ولا يوضح وقت حدوث الصفقة، كما أن جهازين لا يسجلانه بالطريقة نفسها.
  • لا تخلط الساعات داخل مجموعة بيانات واحدة. فالربط بين عروض أسعار مرتبة وفق ساعة وصفقات مرتبة وفق ساعة أخرى يعطي أرقاماً تبدو معقولة، لكنه يفشل تحديداً في اللحظات المهمة.

الصفقات نفسها مرتبة بطريقتين

يظهر أثر الاختلاف عند الترتيب. يأخذ الجدول أدناه أكثر عشر ميلي ثانية ازدحاماً في ذلك النصف من الساعة، ويحتفظ بأول اثنتي عشرة صفقة منفَّذة في البورصة وفق ترتيب venue، ثم يعيد ترتيب الصفقات الاثنتي عشرة نفسها وفق ترتيب الشريط الموحّد. ويرتّب الجدول حسب مقدار انتقال كل صفقة بين الترتيبين.

الاستعلامعمليات التداول الاثنتا عشرة نفسها، مرتبة حسب ساعة مكان التداول وحسب ساعة الشريط
استعلام SQL الدقيق وراء كل رقم
WITH
    burst AS
    (
        SELECT intDiv(toUnixTimestamp64Nano(participant_timestamp), 10000000) AS slice_10ms
        FROM global_markets.stocks_trades
        WHERE ticker = 'AAPL'
          AND sip_timestamp >= '2026-06-10 14:30:00'
          AND sip_timestamp <  '2026-06-10 15:00:00'
          AND ifNull(toUnixTimestamp64Nano(trf_timestamp), 0) = 0
        GROUP BY slice_10ms
        ORDER BY count() DESC, slice_10ms ASC
        LIMIT 1
    ),
    sample AS
    (
        SELECT
            participant_timestamp,
            sip_timestamp,
            toUInt64(sequence_number) AS seq,
            toUnixTimestamp64Nano(sip_timestamp)
              - toUnixTimestamp64Nano(participant_timestamp) AS lag_ns
        FROM global_markets.stocks_trades
        WHERE ticker = 'AAPL'
          AND sip_timestamp >= '2026-06-10 14:30:00'
          AND sip_timestamp <  '2026-06-10 15:00:00'
          AND ifNull(toUnixTimestamp64Nano(trf_timestamp), 0) = 0
          AND intDiv(toUnixTimestamp64Nano(participant_timestamp), 10000000)
              IN (SELECT slice_10ms FROM burst)
        ORDER BY participant_timestamp ASC, seq ASC
        LIMIT 12
    ),
    ranked AS
    (
        SELECT
            participant_timestamp,
            sip_timestamp,
            lag_ns,
            row_number() OVER (ORDER BY participant_timestamp ASC, seq ASC) AS participant_rank,
            row_number() OVER (ORDER BY sip_timestamp ASC, seq ASC)         AS sip_rank
        FROM sample
    )
SELECT
    concat('P', leftPad(toString(participant_rank), 2, '0')) AS print_label,
    concat(formatDateTime(toTimeZone(participant_timestamp, 'America/New_York'), '%H:%i:%S'), '.',
           leftPad(toString(intDiv(toUnixTimestamp64Nano(participant_timestamp) % 1000000000, 1000)), 6, '0')) AS venue_clock_et,
    concat(formatDateTime(toTimeZone(sip_timestamp, 'America/New_York'), '%H:%i:%S'), '.',
           leftPad(toString(intDiv(toUnixTimestamp64Nano(sip_timestamp) % 1000000000, 1000)), 6, '0'))         AS tape_clock_et,
    participant_rank,
    sip_rank,
    abs(toInt32(sip_rank) - toInt32(participant_rank)) AS places_moved,
    round(lag_ns / 1000, 1)                            AS sip_lag_delta_us
FROM ranked
ORDER BY places_moved DESC, participant_rank ASC
Run this yourself

بلغ أكبر فارق بين ترتيبَي إحدى الصفقات 6. غادرت تلك الصفقة venue عند 10:44:17.160712، ووصلت إلى الشريط بعد 305.7 ميكروثانية، عند 10:44:17.161018، منتقلةً من المركز 6 وفق ساعة venue إلى المركز 12 وفق الشريط. وليس أي من الترتيبين خاطئاً. فكل واحد منهما يجيب عن سؤال مختلف. وتقرأ دراسة لتسلسل الصفقات تعتمد على ساعة الشريط هذه الدفعة بترتيب لم تنتجه أي venue، بينما تختلف مراجعة أفضل تنفيذ تعتمد على ساعة venue عن السجل الرسمي.

تصل الصفقات خارج البورصة بعد الحدث بفارق كبير

تُنفَّذ الصفقة خارج البورصة، لدى تاجر جملة أو في dark pool، ثم تُبلَّغ إلى مرفق إبلاغ عن الصفقات بدلاً من مطابقتها على دفتر عام. ويحمل التقرير وقت التنفيذ، لكنه يصل إلى الشريط لاحقاً. وهذه الفترة تأخير في الإبلاغ وليست وقت انتقال، وهي أكبر بمراتب عدة.

الاستعلامعمليات تداول AAPL خارج البورصة حسب تأخر الإبلاغ، 10 يونيو 2026
استعلام SQL الدقيق وراء كل رقم
WITH off_exchange AS
(
    SELECT
        (toUnixTimestamp64Nano(sip_timestamp)
       - toUnixTimestamp64Nano(participant_timestamp)) / 1000000.0 AS delay_ms
    FROM global_markets.stocks_trades
    WHERE ticker = 'AAPL'
      AND sip_timestamp >= '2026-06-10 14:30:00'
      AND sip_timestamp <  '2026-06-10 15:00:00'
      AND ifNull(toUnixTimestamp64Nano(trf_timestamp), 0) > 0
)
SELECT
    multiIf(delay_ms <     1, 'under 1 ms',
            delay_ms <    10, '1 to 10 ms',
            delay_ms <   100, '10 to 100 ms',
            delay_ms <  1000, '100 ms to 1 s',
            delay_ms < 10000, '1 s to 10 s',
                              'over 10 s')                       AS reporting_delay,
    count()                                                      AS print_count,
    round(100 * count() / (SELECT count() FROM off_exchange), 2) AS share_pct
FROM off_exchange
GROUP BY reporting_delay
ORDER BY min(delay_ms) ASC
Run this yourself

من صفقات AAPL خارج البورصة في تلك النافذة، وصلت 24.8% صفقات إلى فئة under 1 ms. وامتد الذيل إلى فئة 1 s to 10 s، التي تضم 74 صفقة. وتحمل الصفقة التي تصل متأخرة عشر ثوانٍ وقت venue الذي نُفذت فيه فعلياً، لكنها تقع في تيار الشريط بعد ذلك بعشر ثوانٍ. وعند ترتيبها وفق وقت الشريط، تبدو كأنها وقعت في الدقيقة الخطأ. وتحمل الصفقات المُبلَّغ عنها خارج التسلسل المعتاد رموز شروط بيع توضّح ذلك، وهو أحد الأمور التي وُجدت رموز شروط التداول للإشارة إليها.

لماذا يبني شخصان أشرطة مختلفة من الصفقات نفسها

تصل معظم تذاكر «البيانات خاطئة» إلى هذه النقطة. فالشريط عبارة عن مجموعة من الصفقات، وتحديد المجموعة التي تقع فيها الصفقة يعتمد على الطابع المستخدم في التجميع. يحصي الجدول أدناه الصفقات التي تغيّر مجموعتها عند الانتقال من ساعة venue إلى ساعة الشريط، عبر أربع مدد شائعة للأشرطة.

الاستعلامعمليات التداول التي تغيّر الشريط عند تبديل الساعات، حسب طول الشريط
استعلام SQL الدقيق وراء كل رقم
WITH
    prints AS
    (
        SELECT
            toUnixTimestamp64Nano(participant_timestamp) AS venue_ns,
            toUnixTimestamp64Nano(sip_timestamp)         AS tape_ns
        FROM global_markets.stocks_trades
        WHERE ticker = 'AAPL'
          AND sip_timestamp >= '2026-06-10 14:30:00'
          AND sip_timestamp <  '2026-06-10 15:00:00'
    ),
    grids AS
    (
        SELECT arrayJoin([1, 10, 60, 300]) AS bar_seconds
    )
SELECT
    multiIf(bar_seconds =  1, '1 second',
            bar_seconds = 10, '10 seconds',
            bar_seconds = 60, '1 minute',
                              '5 minutes') AS bar_length,
    countIf(intDiv(venue_ns, toInt64(bar_seconds) * 1000000000)
         != intDiv(tape_ns,  toInt64(bar_seconds) * 1000000000)) AS moved_print_count,
    round(100 * countIf(intDiv(venue_ns, toInt64(bar_seconds) * 1000000000)
                     != intDiv(tape_ns,  toInt64(bar_seconds) * 1000000000)) / count(), 3) AS moved_pct
FROM prints
CROSS JOIN grids
GROUP BY bar_seconds
ORDER BY bar_seconds ASC
Run this yourself

على شبكة مدتها 1 second، تقع 8.966% من صفقات تلك النافذة في شريط مختلف عند استخدام الساعتين، بإجمالي 8944 صفقة. وعند تمديد مدة الشريط إلى 5 minutes، ينخفض الرقم إلى 0.024%. والنمط ميكانيكي: تغيّر الصفقة مجموعتها كلما عبر الفارق بين ساعتيها حدوداً زمنية، وتحمل الأشرطة الأقصر حدوداً أكثر. لذلك يمكن لمورّدين أن يكونا صحيحين مع نشر حجم تداول مختلف للدقيقة نفسها. ويُشرح بناء الأشرطة نفسه في كيفية بناء أشرطة OHLCV.

وجود خانة بالنانوثانية لا يعني دقة بالنانوثانية

يصل كلا الطابعين كعدد صحيح بدقة نانوثانية. والدقة هنا تعني ما يمكن للخانة التعبير عنه. أما الصحة فتعني مدى قرب القيمة من الوقت الحقيقي، ويحددهما عاملان مختلفان تماماً.

ويخضع توافق الساعات على مستوى القطاع لسماحية تنظيمية لا لقوانين الفيزياء. إذ تلزم قاعدة مزامنة الساعات لدى FINRA شركات الأعضاء بضبط ساعات أعمالها ضمن 50 ميلي ثانية من مرجع NIST. أما البورصات والمعالجات فتستخدم ضبطاً أدق بكثير عبر بروتوكول التوقيت الدقيق (PTP، المعياري وفق IEEE 1588)، الذي يوزع ساعة مرجعية عبر الشبكة نفسها التي تحمل البيانات، ويحافظ على توافق الأجهزة ضمن أقل من ميكروثانية.

وينتج عن ذلك أمران. داخل طوابع مؤسسة واحدة، يكون ترتيب الأحداث بدقة الميكروثانية ذا معنى. أما بين المؤسسات، فيقع فارق قدره بضع مئات من النانوثواني بين طابعين داخل هامش الخطأ، واعتباره ترتيباً حقيقياً يعني قراءة الضوضاء على أنها إشارة.

الأسئلة الشائعة

ما الفرق بين الطابع الزمني لـ SIP وطابع المشارك؟

يكتبه venue عند نشر الصفقة على موجزها الخاص. أما طابع SIP فيكتبه معالج الشريط الموحّد عندما تصل الصفقة إلى الموجز الرسمي المشترك. ويمثل الفارق بينهما وقت الانتقال والانتظار في الطابور، ويُقاس بالميكروثانية للصفقات المنفَّذة في البورصة، وغالباً بالميليثانية أو بفترة أطول للصفقات المُبلَّغ عنها عبر مرفق إبلاغ عن الصفقات.

أي طابع زمني لبيانات السوق ينبغي أن أستخدم في الاختبار التاريخي؟

استخدم طابع المشارك لأي نموذج يحاكي ما كان يمكن لمشارك أن يراه أو ينفذه لدى venue، واستخدم طابع SIP لأي شيء يجب أن يتطابق مع السجل الرسمي الموحّد. وأياً كان اختيارك، طبّقه على كل جدول في الدراسة، بما في ذلك عروض الأسعار.

لماذا لا تتطابق أشرطة الدقيقة الواحدة لدي مع أشرطة مزوّد البيانات؟

غالباً يكون السبب اختلاف الساعة. فقد يقع طابع venue لصفقة قبل حد الدقيقة بقليل، بينما يقع طابع الشريط لها بعده بقليل، فتدخل الصفقة نفسها في شريطين مختلفين وفق الاصطلاحين. وتزيد الصفقات خارج البورصة المُبلَّغ عنها متأخراً من هذا الأثر.

هل تتمتع الطوابع الزمنية بالنانوثانية بدقة نانوثانية؟

لا. فالخانة توفر دقة تعبيرية بالنانوثانية، بينما تحدد الصحة مدى مزامنة ساعة الجهاز الذي يكتبها. وتحافظ أنظمة البورصات والمعالجات التي تستخدم PTP على توافق يقل عن ميكروثانية، في حين تخضع ساعات الأعمال لدى الوسطاء لسماحية تنظيمية قدرها 50 ميلي ثانية. ولا تكون المقارنات الأدق من سماحية الساعة الأقل ضبطاً ذات معنى.


يأتي كل جدول أعلاه مرفقاً باستعلام SQL الذي أنتجه، بحيث يمكنك معرفة الساعة التي استُخدمت لكل رقم بدقة. ولإعادة ترتيب نافذة الصفقات الخاصة بك وفق ساعة مختلفة ومراقبة تغير الشريط، اطرح السؤال باللغة الطبيعية على منصة Strasmore الطرفية.