Saltar a contenido

Holiday calendar handling — US NYSE vs Chile

¿Qué hace el sistema cuando Chile está laboral pero NYSE cerrado, o viceversa? Resuelve OP-01. Short answer: el sistema solo opera en trading days de NYSE. Días no-trading: routines se saltan, reconciliación se mantiene en último state conocido.

Calendarios

NYSE holidays (US market)

Típicamente ~9-10 días cerrados por año:

  • New Year's Day (1 ene)
  • Martin Luther King Day (3er lunes de enero)
  • Presidents' Day (3er lunes febrero)
  • Good Friday (viernes antes Pascua)
  • Memorial Day (último lunes mayo)
  • Juneteenth (19 jun)
  • Independence Day (4 jul)
  • Labor Day (primer lunes septiembre)
  • Thanksgiving (4to jueves noviembre)
  • Christmas (25 dic)

Chile holidays

~15-17 días no laborables:

  • 1 ene, 18-19 sep (Fiestas Patrias), 25 dic, etc.
  • Plus días regionales y puentes feriados.

Overlap y misalignment

Escenario Frecuencia/año Acción del sistema
Ambos open ~240 días Normal operation
NYSE open, CL holiday ~10 días User no está; sistema opera normal (notifs esperan)
NYSE closed, CL laboral ~10 días Sistema pausa trading; monitoring routines OK
Ambos closed ~3-5 días Pausa total
Chile open + NYSE early close (e.g., Navidad Eve) ~2-3 días Routine corre en hora ajustada; notify user de half-day

Reglas del sistema

1. Source de verdad: NYSE calendar

Las routines schedule por NYSE calendar, NO por Chile. Importante porque todos los trades son US equity.

Implementación: usar pandas_market_calendars (Python) o holidays package para resolver "is_trading_day(date)".

import pandas_market_calendars as mcal
nyse = mcal.get_calendar('NYSE')
schedule = nyse.schedule(start_date='2026-01-01', end_date='2026-12-31')
is_trading = date in schedule.index

2. Weekly review en Friday real

El Weekly review routine corre viernes que sea trading day. Si viernes es holiday NYSE:

  • Buscar último trading day de la semana.
  • Si no hay ninguno (raro), skip esa semana.

3. Monthly rebalance en primer trading day

"Primer lunes del mes" se interpreta como primer trading day of month. Si el lunes es NYSE holiday, el martes es el rebalance.

4. Early close days

NYSE cierra early en: - Day before Independence Day (3 pm ET) - Black Friday (1 pm ET) - Christmas Eve (1 pm ET)

Routines close (cierre, 15:55) debe ajustarse a 12:55 o skipearse esos días.

5. Chile holidays → user availability

Si el user está en Chile holiday pero NYSE open (ej: 18 septiembre Fiestas Patrias), el sistema sigue operando. Pero fase HITL requiere user — si el user no está disponible:

  • Señales que normalmente requieren approval acumulan como "pendientes".
  • Timeout policy: si user no aprueba en <24h, orden se cancela. Rebalance parcial es mejor que rebalance retardado.

6. Días "raros"

  • 9/11 type events: NYSE puede cerrar inesperadamente. Sistema debe respetar override manual + source en tiempo real.
  • Circuit breakers intraday (SPX cae -7%): trading halt 15 min. Sistema pausa automático.

Implementación en routines

Cada routine empieza con un check:

def routine_entry():
    today = datetime.now(timezone.et)
    if not is_nyse_trading_day(today):
        log("Skipped: NYSE closed today")
        exit()
    if is_nyse_early_close(today):
        adjust_schedule_for_early_close()
    # ... rest of routine

Reconciliación weekly

Cada viernes (real trading day), reconciliación completa. Si hay gap de días no-trading:

  • Estado del portfolio durante holidays = frozen (no trades, no rebalance).
  • Dividends que llegan durante holidays se ajustan el próximo trading day.
  • FX conversions (CLP↔USD) pueden ocurrir durante Chile holidays aunque NYSE cerrado → tratamiento separado.

Edge case: semana con 0 trading days

Muy raro (semana entre Christmas y New Year en algunos años). Si ocurre:

  • Weekly review se pospone al próximo Friday trading day.
  • No es catastrófico — data frozen es OK.

Gaps

  • Implementación exacta de pandas_market_calendars — validar que cubre NYSE half-days correctamente.
  • Chile holiday calendar para ajustar user notifications (en días de feriado chileno, delay notifications automáticamente).
  • FATCA reporting podría requerir actions en fechas fijas que no son trading days.

Relaciones