Piyasa verisi zaman damgaları: SIP ve borsa saatleri
Piyasa verisi zaman damgaları dört farklı saatten gelir. İşlemleri her bir saate göre sıralamanın veri akışını nasıl değiştirdiğini ve hangi saatin nerede kullanılacağını inceleyin.
Piyasa verisi zaman damgaları, bir işlem kaydının (trade print) eşleşme motorunda gerçekleştiği andan ekranınıza yansıdığı ana kadar geçen sürede üzerine basılan saatlerdir. ABD hisse senedi piyasasında bir işlem, halka açık kayıtlarda bu damgalardan üçünü taşır ve her biri farklı bir soruya yanıt verir. Aynı günün işlem kayıtlarını bir saate göre, ardından diğerine göre sıralarsanız, elinizde birbirinden tamamen farklı iki veri akışı (tape) olduğunu görürsünüz.
Tek bir işlem kaydının geçtiği dört saat
Bir işlem kaydı size ulaşana kadar defalarca damgalanır. Sırasıyla:
- Eşleşme motoru zamanı. Bir platformun eşleşme motorunun iki emri eşleştirdiği an. Platform dışındaki hiç kimse bu değeri doğrudan okuyamaz. İşlemin gerçekleştiği ana dair temel gerçek budur ve sonrasındaki her saat, bunun bir yaklaşımıdır.
- Katılımcı zamanı (platform veya borsa zamanı olarak da bilinir). Platformun, işlemi kendi veri akışında yayınladığı anda bastığı damgadır;
participant_timestampalanında taşınır. Okuyabildiğiniz tüm veriler arasında eşleşme motoruna en yakın olan budur. - SIP zamanı. Menkul kıymet bilgi işlemcisinin (securities information processor), işlem kaydı konsolide banda ulaştığında bastığı damgadır. Bu, tüm ABD hisse senedi platformlarını birleştiren tek resmi veri akışıdır. Bu
sip_timestampalanıdır ve resmi bant sıralaması bunu takip eder. Bu veri akışı ile platformun kendi akışı arasındaki fark SIP ve doğrudan borsa veri akışları bölümünde ele alınmıştır. - Yakalama zamanı. Paket ağ kartınıza ulaştığında kendi ağ kartınızın bastığı damgadır. Piyasa verisini değil, verinin size ulaşma yolunu tanımladığı için hiçbir sağlayıcı kaydında yer almaz. Paket yakalama ve yeniden oynatma çalışmaları tamamen bu saat üzerinden yürütülür.
Borsa dışı (off-exchange) işlem kayıtları, bir işlem raporlama tesisinin raporu kabul ettiği anı işaretleyen beşinci bir damga olan trf_timestamp değerini taşır.
Piyasa verisi zaman damgaları platformlar arasında neden farklılık gösterir?
Bir platformun damgası ile konsolide bant damgası arasındaki fark, işlem kaydının iletimde ve işlemcinin kuyruğunda geçirdiği süredir. Bu tek bir sayı değildir. Her platform işlemciye farklı bir uzaklıktadır, farklı donanımlar kullanır ve farklı kuyrukların arkasındadır. Aşağıdaki panel, 10 Haziran 2026 tarihinde sabit bir yarım saatlik dilimde AAPL işlemi gerçekleştiren her platform için bu farkı ölçmektedir.
Her verinin arkasındaki tam 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 15Bu platformlar arasında, platform damgası ile konsolide damga arasındaki en geniş medyan fark 346.2 mikrosaniye ile NYSE Arca, Inc. noktasında gerçekleşmiştir. Aynı pencerede en dar farka sahip platform 13.7 mikrosaniye ile çalışmıştır. P99 sütunu dikkatle incelenmelidir: en yavaş platform için bu değer 420.8 mikrosaniyeye ulaşmış olup, medyanın gizlediği kuyruk etkisini göstermektedir.
Hangi zaman damgasını kullanmalısınız?
Dört kural neredeyse her durumu kapsar.
- Mikroyapı çalışmaları ve olay analizleri için katılımcı zamanı. Bir platformda neyin, hangi sırayla gerçekleştiğini ölçen her şey platform saatine göre değerlendirilmelidir. MBO ve MBP emir defteri verileri konusunun temelini oluşturan emir defteri yeniden yapılandırması, başka hiçbir saatle kullanılamaz.
- Resmi bantla mutabakat gerektiren her şey için SIP zamanı. Düzenleyici raporlama, en iyi icra (best execution) incelemesi, resmi açılış ve kapanış fiyatları ile bir karşı tarafın konsolide kayıtlarla kontrol edeceği her türlü rakam için bu saat kullanılır.
- Sadece kendi yolunuzu ölçmek için yakalama zamanı. Verinin makinenize ulaşmasının ne kadar sürdüğünü gösterir. İşlemin ne zaman gerçekleştiği hakkında bilgi vermez ve iki makine bu konuda asla aynı fikirde olmaz.
- Tek bir veri seti içinde saatleri asla karıştırmayın. Bir saatteki kotasyonları diğeriyle eşleştiren bir birleştirme işlemi, ilk bakışta makul görünen ancak kritik anlarda hatalı sonuçlar veren rakamlar üretir.
Aynı işlem kayıtları, iki farklı sıralama
Soyutlamanın çöktüğü yer sıralamadır. Aşağıdaki panel, o yarım saatlik dilimin en yoğun on milisaniyesini alır, borsa içi ilk on iki işlemi platform sırasına göre tutar ve ardından aynı on iki işlemi konsolide bant sırasına göre yeniden sıralar. Tablo, her bir işlemin iki sıralama arasında ne kadar yer değiştirdiğine göre düzenlenmiştir.
Her verinin arkasındaki tam 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 ASCBir işlemin iki sıralaması arasındaki en büyük fark 6'tür. Bu işlem platformdan 10:44:17.160712 anında çıkmış ve 305.7 mikrosaniye sonra, 10:44:17.161018 anında banda ulaşmış; platform saatinde 6 konumundan bant üzerinde 12 konumuna geçmiştir. İki sıralama da yanlış değildir. Farklı sorulara yanıt verirler. Bant saatine göre yürütülen bir işlem dizisi çalışması, bu yoğunluğu hiçbir platformun üretmediği bir sırada okur; platform saatine göre yürütülen bir en iyi icra incelemesi ise resmi kayıtla çelişir.
Borsa dışı işlemler olaydan çok sonra ulaşır
Bir borsanın dışında, bir toptancı nezdinde veya karanlık havuzda (dark pool) gerçekleştirilen bir işlem, halka açık bir defterde eşleşmek yerine bir işlem raporlama tesisine bildirilir. Rapor, icra zamanını taşır ve banda daha sonra ulaşır. Bu aralık, iletim süresinden ziyade bir raporlama gecikmesidir ve büyüklük olarak çok daha fazladır.
Her verinin arkasındaki tam 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) ASCO penceredeki borsa dışı AAPL işlemlerinin 24.8%'u under 1 ms aralığına düşmektedir. Kuyruk, 74 adet işlem içeren 1 s to 10 s aralığına kadar uzanır. On saniye geç ulaşan bir işlem, aslında gerçekleştiği platform saati zamanını taşımaya devam ederken, bant akışında on saniye geride yer alır. Bant zamanına göre sıraladığınızda yanlış dakikada görünür. Normal sıranın dışında raporlanan işlemler, bunu belirten satış koşulu kodlarını taşır; işlem koşulu kodları tam da bunu işaretlemek için vardır.
Neden iki kişi aynı işlemlerden farklı barlar oluşturur?
"Veri yanlış" şeklindeki destek taleplerinin neredeyse tamamı burada sonuçlanır. Bir bar, işlem kayıtlarının bir kovasıdır ve bir işlemin hangi kovaya düşeceği, hangi damgaya göre gruplandırdığınıza bağlıdır. Aşağıdaki panel, platform saatinden bant saatine geçtiğinizde, dört yaygın bar uzunluğu için kovasını değiştiren işlem kayıtlarını saymaktadır.
Her verinin arkasındaki tam 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 ASC1 second'lük bir ızgarada, o penceredeki işlemlerin 8.966%'i, toplamda 8944 adet işlem, iki saat altında farklı barlara düşmektedir. Barı 5 minutes'ye genişlettiğinizde bu rakam 0.024%'e düşer. Model mekaniktir: bir işlem, saat farkı bir sınırı aştığında kova değiştirir ve daha kısa barlar daha fazla sınır içerir. İki farklı veri sağlayıcısı da haklı olabilir ve aynı dakika için farklı hacimler yayınlayabilir. Bar oluşturma süreci OHLCV barları nasıl oluşturulur bölümünde adım adım anlatılmıştır.
Nanosaniye alanı, nanosaniye hassasiyeti demek değildir
Her iki damga da nanosaniye çözünürlüğünde tam sayılar olarak gelir. Çözünürlük, bir alanın ifade edebildiği değerdir. Hassasiyet ise değerin gerçek zamana ne kadar yakın olduğudur ve bu ikisi tamamen farklı unsurlarla belirlenir.
Sektör genelinde saat uyumu, fizik kurallarından ziyade düzenleyici toleranslarla yönetilir. FINRA'nın saat senkronizasyon kuralı, üye firmaların iş saatlerini NIST referansının 50 milisaniye dahilinde tutmasını zorunlu kılar. Borsalar ve işlemciler, veriyi taşıyan ağ üzerinden bir referans saati dağıtan ve makineleri mikrosaniye altı uyumda tutan Hassas Zaman Protokolü (PTP, IEEE 1588 olarak standartlaştırılmıştır) kullanarak çok daha sıkı çalışırlar.
Buradan iki sonuç çıkar. Bir kurumun kendi damgaları içinde, mikrosaniye çözünürlüğünde sıralama anlamlıdır. Kurumlar arasında ise iki damga arasındaki birkaç yüz nanosaniyelik fark, hata payı içindedir ve bunu gerçek bir sıralama olarak kabul etmek gürültüyü veri sanmaktır.
SSS
SIP zaman damgası ile katılımcı zaman damgası arasındaki fark nedir?
Katılımcı zaman damgası, platform tarafından bir işlem kendi veri akışında yayınlandığında basılır. SIP zaman damgası ise, işlem resmi birleşik veri akışına ulaştığında konsolide bant işlemcisi tarafından basılır. Aralarındaki fark, borsa içi işlemler için mikrosaniye, işlem raporlama tesisi üzerinden bildirilen işlemler için ise genellikle milisaniye veya daha uzun süren iletim ve kuyruk süresidir.
Geriye dönük testler (backtesting) için hangi piyasa verisi zaman damgasını kullanmalıyım?
Bir katılımcının bir platformda neyi görebileceğini veya yapabileceğini modelleyen her şey için katılımcı zaman damgasını; resmi konsolide kayıtlarla mutabakat gerektiren her şey için ise SIP zaman damgasını kullanın. Hangisini seçerseniz seçin, kotasyonlar dahil çalışmadaki tüm tablolara aynı saati uygulayın.
Bir dakikalık barlarım neden veri sağlayıcımınkilerle eşleşmiyor?
Genellikle saat uyumsuzluğu söz konusudur. Platform damgası bir dakika sınırının hemen öncesine düşen bir işlem, bant damgası sınırın hemen sonrasına düşebilir; bu da aynı işlemin iki farklı kural altında farklı barlara yerleşmesine neden olur. Geç raporlanan borsa dışı işlemler bu etkiyi artırır.
Nanosaniye zaman damgaları nanosaniye hassasiyetinde midir?
Hayır. Alan nanosaniye çözünürlüğünü tutar, ancak hassasiyet, damgayı basan makinenin saatinin ne kadar iyi senkronize edildiğine bağlıdır. PTP kullanan borsa ve işlemci sistemleri mikrosaniye altı uyum sağlarken, aracı kurumların iş saatleri 50 milisaniyelik düzenleyici tolerans dahilinde tutulur. Daha gevşek olan saatin toleransından daha ince karşılaştırmalar anlamlı değildir.
Yukarıdaki her panel, hangi rakamın hangi saatten geldiğini görebilmeniz için onu üreten SQL koduyla birlikte sunulmuştur. Kendi işlem pencerenizi farklı bir saate göre yeniden sıralamak ve bandın değişimini izlemek için Strasmore terminalinde sorunuzu yalın bir dille iletin.