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¶
- Resuelve: OP-01.
- Afecta: concepts/cron-schedule-chile-us (cron mas calendario).
- Routines: concepts/scheduled-routines-pattern.
- Execution: concepts/agent-prompts (Execution Agent check trading day).