Perbezaan Setem Masa Data Pasaran SIP vs Bursa
Ketahui bagaimana empat jam berbeza mempengaruhi susunan data dagangan ekuiti AS. Fahami kepentingan setiap setem masa untuk analisis pita data pasaran yang lebih tepat.
Setem masa data pasaran ialah jam yang dicop pada setiap print dagangan semasa ia bergerak dari enjin pemadanan yang melaksanakannya ke skrin yang memaparkannya. Dagangan ekuiti AS membawa tiga setem masa dalam rekod awam, dan setiap satu menjawab soalan yang berbeza. Jika anda menyusun print pada hari yang sama mengikut satu jam dan kemudian mengikut jam yang lain, anda akan mendapati dua pita (tape) yang benar-benar berbeza.
Empat jam yang dilalui oleh satu print
Satu print dicop berulang kali dalam perjalanannya kepada anda. Mengikut urutan:
- Masa enjin pemadanan. Detik apabila enjin pemadanan sesebuah bursa memadankan dua pesanan. Tiada sesiapa di luar bursa membaca nilai ini secara langsung. Ini adalah kebenaran mutlak bagi masa dagangan berlaku, dan setiap jam selepasnya hanyalah anggaran kepadanya.
- Masa peserta, juga dipanggil masa bursa. Setem yang ditulis oleh bursa apabila ia menerbitkan print tersebut pada suapan (feed) miliknya sendiri, yang dibawa dalam medan
participant_timestamp. Daripada semua yang anda boleh baca, ini adalah yang paling hampir dengan enjin pemadanan. - Masa SIP. Setem yang ditulis oleh pemproses maklumat sekuriti (securities information processor) apabila print sampai ke pita disatukan (consolidated tape), iaitu suapan rasmi tunggal yang menggabungkan setiap bursa ekuiti AS. Ini adalah medan
sip_timestamp, dan urutan pita rasmi mengikutinya. Perbezaan antara suapan tersebut dan suapan bursa sendiri dibincangkan dalam SIP berbanding suapan bursa terus. - Masa tangkapan (capture time). Setem yang ditulis oleh kad rangkaian anda sendiri apabila paket data sampai. Ia tidak pernah muncul dalam rekod vendor, kerana ia menggambarkan laluan anda dan bukannya pasaran. Kerja tangkapan dan main semula paket dijalankan sepenuhnya berdasarkan jam ini.
Print di luar bursa membawa setem kelima, trf_timestamp, yang menandakan bila kemudahan pelaporan dagangan (trade reporting facility) menerima laporan tersebut.
Mengapa setem masa data pasaran berbeza antara bursa
Jurang antara setem bursa dan setem disatukan ialah masa yang dihabiskan oleh print dalam transit dan dalam baris gilir pemproses. Ia bukan satu angka tetap. Setiap bursa berada pada jarak yang berbeza dari pemproses, menggunakan perkakasan berbeza, dan berada di belakang baris gilir yang berbeza. Panel di bawah mengukur jurang tersebut bagi setiap bursa yang mencetak AAPL dalam tempoh setengah jam tetap pada 10 Jun 2026.
SQL tepat di sebalik setiap nombor
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 15Merentasi bursa tersebut, jurang median paling luas antara setem bursa dan setem disatukan ialah 346.2 mikrosaat, di NYSE Arca, Inc.. Bursa paling pantas dalam tempoh yang sama mencatatkan 13.7 mikrosaat. Lajur p99 adalah yang perlu diberi perhatian: bagi bursa paling perlahan yang sama, ia mencapai 420.8 mikrosaat, iaitu nilai ekor yang tidak ditunjukkan oleh median.
Setem masa yang manakah patut anda gunakan
Empat peraturan meliputi hampir setiap kes.
- Masa peserta untuk kerja mikrostruktur dan kajian peristiwa. Apa-apa sahaja yang mengukur perkara yang berlaku di bursa dan mengikut urutan mana, perlu menggunakan jam bursa. Pembinaan semula buku pesanan (order book), subjek kepada data buku pesanan MBO berbanding MBP, tidak boleh digunakan dengan jam lain.
- Masa SIP untuk apa-apa yang perlu diselaraskan dengan pita rasmi. Pelaporan kawal selia, semakan pelaksanaan terbaik (best execution), pembukaan dan penutupan rasmi, serta sebarang angka yang akan disemak oleh pihak lawan terhadap rekod disatukan.
- Masa tangkapan hanya untuk mengukur laluan anda sendiri. Ia memberitahu anda berapa lama data mengambil masa untuk sampai ke mesin anda. Ia tidak memberitahu apa-apa tentang masa dagangan berlaku, dan dua mesin tidak akan pernah bersetuju mengenainya.
- Jangan sekali-kali mencampurkan jam dalam satu set data. Cantuman (join) yang memadankan sebut harga pada satu jam dengan dagangan pada jam lain akan menghasilkan angka yang kelihatan munasabah tetapi gagal pada saat-saat yang penting.
Print yang sama, disusun dengan dua cara
Penyusunan adalah tempat di mana abstraksi ini terhenti. Panel di bawah mengambil sepuluh milisaat paling sibuk dalam setengah jam tersebut, mengekalkan dua belas print bursa pertama mengikut urutan bursa, kemudian menyusun semula dua belas print yang sama mengikut urutan pita disatukan. Jadual disusun mengikut sejauh mana setiap print bergerak antara dua kedudukan tersebut.
SQL tepat di sebalik setiap nombor
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 ASCJurang terbesar antara dua kedudukan print ialah 6. Print itu meninggalkan bursanya pada 10:44:17.160712 dan sampai ke pita 305.7 mikrosaat kemudian, pada 10:44:17.161018, bergerak dari kedudukan 6 pada jam bursa ke kedudukan 12 pada pita. Tiada satu pun urutan yang salah. Ia menjawab soalan yang berbeza. Kajian urutan dagangan yang dijalankan pada jam pita membaca lonjakan ini dalam urutan yang tidak pernah dihasilkan oleh mana-mana bursa, dan semakan pelaksanaan terbaik yang dijalankan pada jam bursa tidak bersetuju dengan rekod rasmi.
Print di luar bursa sampai jauh selepas peristiwa
Dagangan yang dilaksanakan di luar bursa, di pemborong atau dalam dark pool, dilaporkan kepada kemudahan pelaporan dagangan dan bukannya dipadankan pada buku awam. Laporan tersebut membawa masa pelaksanaan, dan ia sampai ke pita selepas itu. Selang masa itu adalah kelewatan pelaporan dan bukannya masa perjalanan, dan ia adalah berkali ganda lebih besar.
SQL tepat di sebalik setiap nombor
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) ASCDaripada print AAPL di luar bursa dalam tempoh tersebut, 24.8% sampai dalam baldi (bucket) under 1 ms. Ekornya berlanjutan sehingga ke baldi 1 s to 10 s, yang mengandungi 74 print. Print yang sampai sepuluh saat lewat masih membawa masa jam bursa ia benar-benar dilaksanakan, sementara berada dalam aliran pita sepuluh saat di belakangnya. Jika disusun mengikut masa pita, ia muncul dalam minit yang salah. Print yang dilaporkan di luar urutan biasa membawa kod syarat jualan yang menyatakan perkara tersebut, yang merupakan salah satu perkara yang ditandakan oleh kod syarat dagangan.
Mengapa dua orang membina bar yang berbeza daripada dagangan yang sama
Hampir setiap tiket "data ini salah" berakhir di sini. Bar ialah baldi untuk print, dan baldi yang mana satu print itu jatuh bergantung pada setem yang anda gunakan untuk mengumpulkan data. Panel di bawah mengira print yang bertukar baldi apabila anda beralih daripada jam bursa kepada jam pita, merentasi empat panjang bar yang biasa.
SQL tepat di sebalik setiap nombor
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 ASCPada grid 1 second, 8.966% daripada print dalam tempoh tersebut jatuh ke dalam bar yang berbeza di bawah dua jam tersebut, iaitu 8944 print kesemuanya. Jika bar dipanjangkan kepada 5 minutes, angka tersebut turun kepada 0.024%. Polanya adalah mekanikal: print bertukar baldi setiap kali jurang jamnya merentasi sempadan, dan bar yang lebih pendek membawa lebih banyak sempadan. Dua vendor boleh kedua-duanya betul dan masih menerbitkan volum yang berbeza untuk minit yang sama. Pembinaan ini diterangkan dalam cara bar OHLCV dibina.
Medan nanosaat bukan bermakna ketepatan nanosaat
Kedua-dua setem sampai sebagai integer dengan resolusi nanosaat. Resolusi ialah apa yang boleh dinyatakan oleh sesuatu medan. Ketepatan ialah sejauh mana nilai tersebut hampir dengan masa sebenar, dan kedua-duanya ditetapkan oleh perkara yang berbeza sama sekali.
Penyelarasan jam merentasi industri dikawal oleh toleransi kawal selia dan bukannya oleh fizik. Peraturan penyelarasan jam FINRA menetapkan jam perniagaan firma ahli dalam lingkungan 50 milisaat daripada rujukan NIST. Bursa dan pemproses berjalan dengan lebih ketat, menggunakan Precision Time Protocol (PTP, diseragamkan sebagai IEEE 1588), yang mengedarkan jam rujukan melalui rangkaian yang sama yang membawa data dan memastikan mesin berada dalam penyelarasan sub-mikrosaat.
Dua perkara perlu diambil perhatian. Dalam setem satu organisasi, penyusunan pada resolusi mikrosaat adalah bermakna. Merentasi organisasi, perbezaan beberapa ratus nanosaat antara dua setem berada dalam bar ralat, dan menganggapnya sebagai urutan sebenar adalah membaca hingar (noise).
Soalan Lazim
Apakah perbezaan antara setem masa SIP dan setem masa peserta?
Setem masa peserta ditulis oleh bursa apabila ia menerbitkan dagangan pada suapan miliknya sendiri. Setem masa SIP ditulis oleh pemproses pita disatukan apabila dagangan itu sampai ke suapan gabungan rasmi. Jurang antara keduanya ialah masa transit dan masa baris gilir, diukur dalam mikrosaat untuk print di bursa dan selalunya dalam milisaat atau lebih lama untuk print yang dilaporkan melalui kemudahan pelaporan dagangan.
Setem masa data pasaran yang manakah patut saya gunakan untuk backtesting?
Gunakan setem masa peserta untuk apa-apa yang memodelkan apa yang boleh dilihat atau dilakukan oleh peserta di bursa, dan setem masa SIP untuk apa-apa yang perlu diselaraskan dengan rekod disatukan rasmi. Walau apa pun pilihan anda, gunakannya pada setiap jadual dalam kajian tersebut, termasuk sebut harga.
Mengapa bar satu minit saya tidak sepadan dengan pembekal data saya?
Ketidakpadanan jam adalah jawapan yang biasa. Print yang setem bursanya jatuh tepat sebelum sempadan minit boleh membawa setem pita tepat selepasnya, yang meletakkan dagangan yang sama dalam bar yang berbeza di bawah dua konvensyen tersebut. Print di luar bursa yang dilaporkan lewat memburukkan lagi kesan ini.
Adakah setem masa nanosaat tepat sehingga ke tahap nanosaat?
Tidak. Medan tersebut menyimpan resolusi nanosaat, dan ketepatan ditetapkan oleh sejauh mana jam mesin penulisan diselaraskan. Sistem bursa dan pemproses yang menggunakan PTP mengekalkan penyelarasan sub-mikrosaat, manakala jam perniagaan broker ditetapkan kepada toleransi kawal selia 50 milisaat. Perbandingan yang lebih halus daripada toleransi jam yang lebih longgar adalah tidak bermakna.
Setiap panel di atas disertakan dengan SQL yang menghasilkannya, supaya anda boleh melihat dengan tepat jam mana setiap angka datang. Untuk menyusun semula tetingkap print anda sendiri di bawah jam yang berbeza dan melihat perubahan pita, ajukan soalan dalam bahasa Inggeris yang mudah pada terminal Strasmore.