Lección 518 min40 XPGratis
Sesiones, horarios y por qué tus datos están en UTC
Al terminar sabrás
- Leer los horarios de Globex y localizar la sesión regular, el cierre y la pausa de mantenimiento
- Entender por qué la liquidez cambia por horas y qué implica para una estrategia
- Manejar zonas horarias y horario de verano sin romper un backtest
Antes de esta conviene haber hecho Vencimientos, rollover y la serie continua.
ES cotiza 23 horas al día, pero a las 3 de la madrugada de Chicago hay tan poca gente que una orden de 20 contratos mueve el precio, y a las 9:31 hay tanta que 200 contratos pasan sin dejar huella. El "mismo mercado" es varios mercados según la hora. Y si tus datos están en la hora de tu ordenador y el broker calcula el cierre en la de Chicago, tu backtest y tu cuenta real no viven el mismo día.
El problema
El horario de un futuro no es un dato aburrido: define cuándo hay liquidez, cuándo se fija el precio de liquidación, cuándo tu prop firm cierra el día y cuándo tu estrategia intradía tiene que estar plana. Y las zonas horarias, con sus cambios de verano, son la fuente de bugs más tonta y más frecuente en datos de mercado.
Tres capas
Intuición
Piensa en un supermercado abierto casi 24 horas. A las 11 de la mañana hay cajas abiertas, cola corta, precios estables. A las 4 de la madrugada hay una caja, un cajero medio dormido y, si llegas con un carro lleno, tardas y molestas. El supermercado es el mismo; la experiencia no.
ES abre el domingo por la tarde en Chicago y cierra el viernes por la tarde, con una pausa de una hora cada día para "limpiar". Pero la hora que importa es de 8:30 a 15:15 de Chicago: es cuando la bolsa de Nueva York está abierta, cuando salen los datos económicos y cuando se mueve el 70-80 % del volumen. Eso es la sesión regular. Lo demás es la noche.
Y hay un momento concreto, las 15:00 de Chicago, en que la bolsa fija el precio "oficial" del día, el settlement. Ese número decide cuánto dinero entra o sale de tu cuenta por la liquidación diaria y, en muchas prop firms, hasta dónde ha bajado tu cuenta a efectos de sus reglas.
Ejemplo numérico
Horario de ES en Globex (hoja de especificaciones de CME, comprobada el 22 sep 2026):
| Momento (hora de Chicago, CT) | Qué pasa |
|---|---|
| Domingo 17:00 | Apertura de la semana |
| 17:00 → 16:00 día siguiente | Sesión electrónica continua (23 h) |
| 15:15 – 15:30 | Pausa de 15 minutos tras el cierre de la sesión regular |
| 16:00 – 17:00 | Mantenimiento diario: no se opera |
| 8:30 – 15:15 | Sesión regular (coincide con la bolsa de Nueva York, 9:30-16:15 ET) |
| 14:59:30 – 15:00:00 | Ventana con la que se calcula el settlement diario |
| Viernes 16:00 | Cierre de la semana |
En horas europeas (Barcelona, CET/CEST), la sesión regular va de 15:30 a 22:15 en horario de verano europeo y de 15:30 a 22:15 también en invierno, excepto en las dos o tres semanas al año en que EE. UU. y Europa cambian la hora en fechas distintas: entonces todo se desplaza una hora. Si tu backtest usa "las 15:30 de Barcelona" como apertura, en esas semanas está una hora equivocado sin que nadie te avise.
Reparto aproximado de volumen (orden de magnitud, varía por día y se mide en M2.6 con datos reales): sesión regular, 70-80 %; sesión europea (2:00-8:30 CT), 10-15 %; sesión asiática y noche americana, el resto. La primera media hora de la sesión regular (8:30-9:00 CT) concentra sola más volumen que toda la noche asiática.
Formal
Horarios. CME Globex: domingo 17:00 a viernes 16:00 CT con mantenimiento diario 16:00-17:00 CT (5:00-6:00 pm ET); pausa de 15:15 a 15:30 CT en índices. La sesión regular (Regular Trading Hours, RTH) de ES es 8:30-15:15 CT; el resto es Extended Trading Hours (ETH). El trade date de la sesión que abre el domingo a las 17:00 es el lunes: una barra de las 20:00 CT del domingo pertenece al "día" del lunes a efectos de la bolsa. Este detalle rompe agrupaciones diarias hechas con la fecha del calendario.
Settlement. El precio de liquidación diario de ES se calcula como VWAP de las operaciones entre 14:59:30 y 15:00:00 CT (ventana publicada por CME en su metodología de settlement). Es el precio contra el que se hace el mark-to-market y contra el que muchas prop firms calculan el drawdown "EOD" (algunas usan su propia hora de cierre, p. ej. 16:00 ET; hay que leer sus reglas). Un backtest de una estrategia que "cierra al final del día" debe definir a qué hora exactamente: el cierre de RTH (15:15), el settlement (15:00) o el cierre de Globex (16:00) dan barras distintas.
Zonas horarias. Todo dato de mercado debe almacenarse en UTC con la zona explícita (tz='UTC' en pandas) y convertirse a hora local solo para visualizar o para definir reglas de sesión. Razones: UTC no tiene horario de verano; Chicago (America/Chicago) y Europa (Europe/Madrid) cambian en fechas distintas (segundo domingo de marzo / primer domingo de noviembre frente a último domingo de marzo / último domingo de octubre), lo que crea dos o tres semanas al año con desfase de una hora; y los proveedores de datos mezclan convenciones (algunos marcan la barra por su apertura, otros por su cierre). Las reglas de sesión se expresan en la zona del mercado (America/Chicago) y se convierten, nunca al revés.
Liquidez intradía. El volumen y la profundidad del libro siguen un patrón en U dentro de RTH (alto en apertura y cierre, bajo a mediodía) y caen uno o dos órdenes de magnitud fuera de RTH. Consecuencias: el spread fuera de RTH puede ser de varios ticks; el slippage de una orden de mercado crece; los stops se ejecutan peor; y las publicaciones macro (8:30 ET = 7:30 CT para muchas) producen picos de volatilidad con libro vacío en los primeros segundos. Una estrategia validada solo en RTH no está validada fuera de RTH, y viceversa.
Ejemplo trabajado con código
# pandas 3.0 — Zonas horarias sin dolor: guarda en UTC, define sesiones en la zona del mercado
import pandas as pd
# Tres instantes: la misma "hora de pared" en Chicago en tres fechas distintas
ts_ct = pd.to_datetime(["2026-03-06 08:30", "2026-03-13 08:30", "2026-10-30 08:30"]).tz_localize("America/Chicago")
df = pd.DataFrame({"chicago": ts_ct})
df["utc"] = df.chicago.dt.tz_convert("UTC")
df["barcelona"] = df.chicago.dt.tz_convert("Europe/Madrid")
print(df.to_string(index=False))
print()
print("Apertura RTH de ES en hora de Barcelona:")
for t in df.barcelona:
print(f" {t.date()} -> {t.strftime('%H:%M')} ({'verano EU' if t.dst() else 'invierno EU'})") chicago utc barcelona
2026-03-06 08:30:00-06:00 2026-03-06 14:30:00+00:00 2026-03-06 15:30:00+01:00
2026-03-13 08:30:00-05:00 2026-03-13 13:30:00+00:00 2026-03-13 14:30:00+01:00
2026-10-30 08:30:00-05:00 2026-10-30 13:30:00+00:00 2026-10-30 14:30:00+01:00
Apertura RTH de ES en hora de Barcelona:
2026-03-06 -> 15:30 (invierno EU)
2026-03-13 -> 14:30 (invierno EU)
2026-10-30 -> 14:30 (invierno EU)El 13 de marzo de 2026 EE. UU. ya ha cambiado al horario de verano y Europa todavía no: la apertura de Chicago cae a las 14:30 en Barcelona, no a las 15:30. Lo mismo a finales de octubre. Un backtest que use "15:30 Barcelona" como apertura entra una hora tarde esas semanas.
Figura
(Figura estática en SVG; la curva de volumen se sustituirá por la real en M2.6.)
El error típico
Agrupar barras intradía por la fecha del calendario en la zona horaria del ordenador. Tres fallos a la vez: (1) la sesión de Globex empieza a las 17:00 del día anterior, así que la "vela diaria" que construyes no coincide con la de la bolsa; (2) en las semanas de desfase de horario de verano, la apertura de RTH se mueve una hora y tu filtro de "solo operar de 15:30 a 22:00" recorta o añade una hora sin avisar; (3) si el proveedor marcaba las barras por el cierre y tú asumes apertura, todo está desplazado un intervalo y tu señal usa una barra del futuro. Los tres se resuelven igual: datos en UTC, sesiones definidas en America/Chicago, y una comprobación explícita de que la barra de apertura de RTH cae a las 8:30 CT todos los días de la muestra.
Quiz
5 preguntas · se aprueba con 60 %
1.¿Cuál es la sesión regular (RTH) de ES en hora de Chicago?
2.Una barra de ES con hora 20:00 CT del domingo pertenece, para la bolsa, al trade date de:
3.¿Por qué se almacenan los datos de mercado en UTC?
4.El settlement diario de ES se calcula:
5.Una estrategia intradía validada en RTH se quiere operar también a las 3:00 CT. ¿Qué cambia?
0 de 5 respondidas
Ejercicio
Con pandas, genera un rango de fechas de todos los días laborables de 2026 y, para cada uno, calcula a qué hora de Barcelona (Europe/Madrid) cae la apertura de RTH de ES (8:30 America/Chicago). Cuenta cuántos días del año la apertura cae a las 14:30 en vez de a las 15:30.
Resultado verificable: la apertura cae a las 14:30 de Barcelona en los días laborables del 9 al 27 de marzo de 2026 (EE. UU. cambió el 8, Europa cambia el 29) y del 26 al 30 de octubre de 2026 (Europa cambió el 25, EE. UU. cambia el 1 de noviembre). Son 20 días laborables en total. Solución en el repo del módulo.
Qué te llevas
- ES está abierto 23 horas, pero la liquidez vive en la sesión regular de 8:30 a 15:15 de Chicago. Fuera, cada orden pesa más.
- El settlement de las 15:00 CT fija el dinero del día y, en muchas prop firms, el drawdown.
- Datos en UTC, sesiones en la zona del mercado. Las semanas de desfase de horario de verano existen dos veces al año y te rompen el backtest en silencio.
Siguiente lección: Micros y perpetuos. Los contratos de una décima parte que te permiten dimensionar bien, y los futuros de cripto que no vencen nunca pero te cobran cada ocho horas.
