Marcas de tiempo: relojes SIP vs. bolsas
Los datos de mercado usan cuatro relojes. Vea cómo cada uno cambia el orden de las mismas operaciones y cuál conviene usar según el análisis.
Las marcas de tiempo de los datos de mercado son los relojes que se asignan a una operación individual mientras viaja desde el motor de cruce que la ejecutó hasta la pantalla que la muestra. Una operación de acciones estadounidenses lleva tres de ellas en el registro público, y cada una responde una pregunta distinta. Ordene las operaciones del mismo día primero según un reloj y después según otro, y tendrá dos cintas de mercado realmente diferentes.
Los cuatro relojes por los que pasa una operación
Una operación recibe varias marcas de tiempo en su recorrido hasta usted. En orden:
- Hora del motor de cruce. El instante en que el motor de cruce de un centro de negociación ejecutó dos órdenes. Nadie fuera del centro puede leer directamente este valor. Es la referencia exacta de cuándo ocurrió la operación, y todos los relojes posteriores son una aproximación.
- Hora del participante, también llamada hora del centro o de la bolsa. La marca que el centro escribe cuando publica la operación en su propio feed, en el campo
participant_timestamp. De todos los valores que puede leer, este es el más cercano al motor de cruce. - Hora del SIP. La marca que escribe el procesador de información de valores cuando la operación llega a la cinta consolidada, el único feed oficial que integra todos los centros de negociación de acciones estadounidenses. Este es el campo
sip_timestamp, y la secuencia de la cinta oficial sigue esta marca. La diferencia entre ese feed y el propio del centro se explica en SIP frente a feeds directos de las bolsas. - Hora de captura. La marca que escribe la tarjeta de red cuando el paquete llega. Nunca aparece en el registro de un proveedor, porque describe su recorrido y no el mercado. Los trabajos de captura y reproducción de paquetes utilizan exclusivamente este reloj.
Las operaciones fuera de bolsa llevan una quinta marca, trf_timestamp, que indica cuándo una entidad de reporte de operaciones recibió el informe.
Por qué las marcas de tiempo de los datos de mercado difieren entre centros
La diferencia entre la marca del centro y la marca consolidada es el tiempo que una operación pasó en tránsito y en la cola del procesador. No es un único valor. Cada centro está a una distancia diferente del procesador, utiliza hardware distinto y se encuentra detrás de una cola diferente. El panel siguiente mide esa diferencia para cada centro que registró operaciones de AAPL durante una media hora fija el 10 de junio de 2026.
El SQL exacto detrás de cada cifra
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 15Entre esos centros, la mayor diferencia mediana entre la marca del centro y la marca consolidada fue de 346.2 microsegundos, en NYSE Arca, Inc.. El centro con la menor diferencia en la misma ventana registró 13.7 microsegundos. La columna p99 es la que merece más atención: en ese mismo centro más lento alcanzó 420.8 microsegundos, un extremo que la mediana oculta.
Qué marca de tiempo debe usar
Cuatro reglas cubren casi todos los casos.
- Hora del participante para trabajos de microestructura y estudios de eventos. Todo análisis que mida qué ocurrió en un centro y en qué orden debe utilizar el reloj del centro. La reconstrucción del libro de órdenes, tema de datos de libros de órdenes MBO frente a MBP, no funciona con ningún otro.
- Hora del SIP para todo lo que deba conciliarse con la cinta oficial. Esto incluye reportes regulatorios, revisiones de best execution, la apertura y el cierre oficiales, y cualquier cifra que una contraparte vaya a comprobar contra el registro consolidado.
- Hora de captura únicamente para medir su propio recorrido. Indica cuánto tardaron los datos en llegar a su máquina. No indica cuándo ocurrió la operación, y dos máquinas nunca coincidirán en este valor.
- Nunca mezcle relojes dentro del mismo dataset. Un join que empareja cotizaciones con un reloj y operaciones con otro produce cifras que parecen plausibles, pero fallan precisamente en los momentos importantes.
Las mismas operaciones, ordenadas de dos maneras
El ordenamiento es donde la abstracción deja de serlo. El panel siguiente toma los diez milisegundos de mayor actividad de esa media hora, conserva las primeras doce operaciones en bolsa en el orden del centro y después vuelve a ordenar esas mismas doce según el orden de la cinta consolidada. La tabla está ordenada por la magnitud del desplazamiento de cada operación entre ambas posiciones.
El SQL exacto detrás de cada cifra
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 ASCLa mayor diferencia entre las dos posiciones de una operación es 6. Esa operación salió de su centro a las 10:44:17.160712 y llegó a la cinta 305.7 microsegundos después, a las 10:44:17.161018, al pasar de la posición 6 según el reloj del centro a la posición 12 en la cinta. Ninguno de los dos órdenes es incorrecto. Responden preguntas distintas. Un estudio de la secuencia de operaciones basado en el reloj de la cinta lee este flujo en un orden que ningún centro produjo, mientras que una revisión de best execution basada en el reloj del centro no coincide con el registro oficial.
Las operaciones fuera de bolsa llegan mucho después del evento
Una operación ejecutada fuera de una bolsa, con un mayorista o en un dark pool, se reporta a una entidad de reporte de operaciones en lugar de cruzarse en un libro público. El reporte incluye la hora de ejecución y llega después a la cinta. Ese intervalo es un retraso de reporte, no un tiempo de tránsito, y es mucho mayor.
El SQL exacto detrás de cada cifra
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) ASCDe las operaciones de AAPL fuera de bolsa en esa ventana, 24.8% quedan en el intervalo under 1 ms. La cola llega hasta el intervalo 1 s to 10 s, con 74 operaciones. Una operación que llega con diez segundos de retraso conserva la hora del centro en la que realmente se ejecutó, aunque aparece en el flujo de la cinta diez segundos después. Si se ordena por hora de la cinta, parece pertenecer al minuto equivocado. Las operaciones reportadas fuera de la secuencia normal llevan códigos de condición de venta que lo indican. Esa es una de las funciones de los códigos de condición de las operaciones.
Por qué dos personas construyen barras diferentes con las mismas operaciones
Casi todos los casos de «los datos son incorrectos» terminan aquí. Una barra es un grupo de operaciones, y el grupo al que pertenece cada operación depende de la marca usada para agruparla. El panel siguiente cuenta las operaciones que cambian de grupo al pasar del reloj del centro al reloj de la cinta, para cuatro duraciones habituales de barras.
El SQL exacto detrás de cada cifra
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 ASCEn una cuadrícula de 1 second, 8.966% de las operaciones de esa ventana caen en una barra diferente según el reloj utilizado, 8944 operaciones en total. Al ampliar la barra a 5 minutes, la cifra baja a 0.024%. El patrón es mecánico: una operación cambia de grupo cuando la diferencia entre sus relojes cruza un límite, y las barras más cortas tienen más límites. Dos proveedores pueden ser correctos y aun así publicar volúmenes diferentes para el mismo minuto. La construcción se explica paso a paso en cómo se construyen las barras OHLCV.
Un campo de nanosegundos no implica precisión de nanosegundos
Ambas marcas llegan como enteros con resolución de nanosegundos. La resolución indica qué puede expresar un campo. La precisión indica qué tan cerca está el valor de la hora real, y ambas dependen de factores completamente distintos.
La alineación de los relojes del sector se rige por una tolerancia regulatoria, no por la física. La norma de sincronización de relojes de FINRA exige que los relojes operativos de las firmas miembro estén dentro de un margen de 50 milisegundos respecto de la referencia del NIST. Las bolsas y los procesadores operan con una precisión mucho mayor mediante el Precision Time Protocol (PTP, estandarizado como IEEE 1588), que distribuye un reloj de referencia por la misma red que transporta los datos y mantiene las máquinas alineadas en menos de un microsegundo.
De aquí se desprenden dos conclusiones. Dentro de las marcas de una misma organización, el orden a resolución de microsegundos es significativo. Entre organizaciones, una diferencia de unos cientos de nanosegundos entre dos marcas se encuentra dentro del margen de error. Tratarla como un orden real equivale a interpretar ruido.
Preguntas frecuentes
¿Cuál es la diferencia entre la marca de tiempo del SIP y la del participante?
La marca del participante la escribe el centro cuando publica una operación en su propio feed. La marca del SIP la escribe el procesador de la cinta consolidada cuando esa operación llega al feed oficial combinado. La diferencia entre ambas es el tiempo de tránsito y de espera en cola. Se mide en microsegundos para las operaciones en bolsa y con frecuencia en milisegundos o más para las operaciones reportadas a través de una entidad de reporte de operaciones.
¿Qué marca de tiempo de los datos de mercado debo usar para hacer backtesting?
Use la marca del participante para todo modelo que represente lo que un participante podría haber visto o ejecutado en un centro, y la marca del SIP para todo lo que deba conciliarse con el registro consolidado oficial. Elija la que elija, aplíquela a todas las tablas del estudio, incluidas las cotizaciones.
¿Por qué mis barras de un minuto no coinciden con las de mi proveedor de datos?
La causa habitual es una discrepancia entre relojes. Una operación cuya marca del centro cae justo antes del límite de un minuto puede tener una marca de la cinta justo después. Eso coloca la misma operación en barras distintas según la convención utilizada. Las operaciones fuera de bolsa reportadas tarde amplían el efecto.
¿Las marcas de tiempo de nanosegundos tienen precisión de nanosegundos?
No. El campo tiene resolución de nanosegundos, pero la precisión depende de qué tan sincronizado esté el reloj de la máquina que escribe la marca. Los sistemas de bolsas y procesadores que utilizan PTP mantienen una alineación inferior a un microsegundo, mientras que los relojes operativos de los brokers están sujetos a una tolerancia regulatoria de 50 milisegundos. Las comparaciones más precisas que la tolerancia del reloj menos preciso no son significativas.
Cada panel anterior incluye el SQL que lo generó, para que pueda ver exactamente de qué reloj provino cada cifra. Para volver a ordenar su propia ventana de operaciones con otro reloj y observar cómo cambia la cinta, formule la pregunta en lenguaje sencillo en la terminal de Strasmore.