desfase_mensual
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-23, from bmv-hours-vs-us-market-hours.
| mes | apertura_hora_centro | cierre_hora_centro | desfase_horas |
|---|---|---|---|
| 2025-08 | 07:30 | 14:00 | 2 |
| 2025-09 | 07:30 | 14:00 | 2 |
| 2025-10 | 07:30 | 14:00 | 2 |
| 2025-11 | 08:30 | 15:00 | 1 |
| 2025-12 | 08:30 | 15:00 | 1 |
| 2026-01 | 08:30 | 15:00 | 1 |
| 2026-02 | 08:30 | 15:00 | 1 |
| 2026-03 | 07:30 | 14:00 | 2 |
| 2026-04 | 07:30 | 14:00 | 2 |
| 2026-05 | 07:30 | 14:00 | 2 |
| 2026-06 | 07:30 | 14:00 | 2 |
| 2026-07 | 07:30 | 14:00 | 2 |
| 2026-08 | 07:30 | 14:00 | 2 |
| 2026-09 | 07:30 | 14:00 | 2 |
- Rows × columns
- 14 × 4
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
mes |
text | 14 distinct values (2025-08, 2025-09, 2025-10…) | |
apertura_hora_centro |
text | 2 distinct values (07:30, 08:30) | |
cierre_hora_centro |
text | 2 distinct values (14:00, 15:00) | |
desfase_horas |
number | 1 to 2 |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
Run it yourself
This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.
SELECT
mes,
argMax(apertura_hora_centro, sesion) AS apertura_hora_centro,
argMax(cierre_hora_centro, sesion) AS cierre_hora_centro,
argMax(desfase_horas, sesion) AS desfase_horas
FROM
(
SELECT
sesion,
formatDateTime(toTimeZone(primer_minuto, 'America/Mexico_City'), '%Y-%m') AS mes,
formatDateTime(toTimeZone(primer_minuto, 'America/Mexico_City'), '%H:%i') AS apertura_hora_centro,
formatDateTime(toTimeZone(ultimo_minuto, 'America/Mexico_City') + toIntervalMinute(1), '%H:%i') AS cierre_hora_centro,
toHour(toTimeZone(primer_minuto, 'America/New_York'))
- toHour(toTimeZone(primer_minuto, 'America/Mexico_City')) AS desfase_horas
FROM
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS sesion,
min(window_start) AS primer_minuto,
max(window_start) AS ultimo_minuto,
count() AS minutos
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 400
AND window_start < today() - 3
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
GROUP BY sesion
HAVING minutos >= 380
)
)
GROUP BY mes
ORDER BY mes
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.