calendar · git:20261030.2329377 · 2026-10-30 · sha256 fa5ed6bfd16da8d9

calendar git:20261030.2329377A

Immutable. This exact content never changes and is served at /api/v1/blob/fa5ed6bfd16da8d9.

---
name: calendar
description: Report scheduled US economic events (CPI, NFP, FOMC, GDP, PCE, ISM, jobless claims...) with times in ET, impact, actual/consensus/previous. Use when user asks about the economic calendar, macro events, what data comes out today/this week, or release times. Optional ForexFactory cross-check for the current week.
dependencies: ["trading-skills"]
---

# Economic Calendar

Scheduled US economic releases per weekday, from Nasdaq's public economic-events feed
(through `trading_skills.calendar_nasdaq`, which corrects the feed's day offset and
verifies each day against weekly releases with a fixed weekday).

## Instructions

> **Note:** If `uv` is not installed or `pyproject.toml` is not found, replace `uv run python` with `python` in all commands below.

```bash
uv run python scripts/events.py [--date YYYY-MM-DD] [--days N] [--impact all|high] [--forexfactory]
```

## Arguments

- `--date` - First day, YYYY-MM-DD (default: today ET). A weekend rolls to Monday.
- `--days` - Number of weekdays to report (default: 1). Weekends are skipped.
- `--impact` - `all` (default) or `high` (FOMC, CPI, PPI, PCE, NFP, unemployment, GDP, retail sales, ISM, Fed-chair remarks).
- `--forexfactory` - Also fetch ForexFactory's calendar, cross-check each day, and fill Nasdaq's gaps: high/medium releases Nasdaq lacks are added to `events`, and a day Nasdaq can't serve is taken wholly from ForexFactory. ForexFactory publishes **only the current Sun–Sat week**; other days report `available: false`. The feed rate-limits to about one request per 5 minutes, so the week is cached in the system temp dir for an hour (an older copy is used if a fetch fails).

## Output

- `generated_at`, `data_delay`, `source` (`"nasdaq"`)
- `days` - one entry per weekday:
  - `date`, `weekday`
  - `verified` - true when the day's contents matched the requested weekday; false means use with care
  - `times_verified` - true when Nasdaq's times were converted to ET using a clock measured from fixed-time releases (claims/NFP/CPI 8:30, ISM/JOLTS/Michigan 10:00) on that day or a nearby Thursday in the same daylight/standard period; false means times assume Nasdaq's usual UTC−4 clock — confirm them
  - `feed_date` - the Nasdaq `date` parameter whose rows were used
  - `events` - list of `{event, time_et, impact, actual, consensus, previous, source}`, high-impact first. `source` is `"nasdaq"` or `"forexfactory"` (gap-filled; no `actual`, ForexFactory's own impact rating). `null` when no source can serve the day (`note` says to verify manually — never read null as a quiet day)
  - `forexfactory` (with `--forexfactory`) - `{available, events, cross_check}` or `{available: false, note}`
    - `cross_check.confirmed` - same release at the same time in both sources
    - `cross_check.time_mismatch` - same release, different time (check which time is right)
    - `cross_check.missing_in_nasdaq` - high/medium ForexFactory release Nasdaq lacks
    - `cross_check.nasdaq_only` - high-impact Nasdaq release ForexFactory lacks

## Examples

```bash
# Today
uv run python scripts/events.py

# Yesterday and today, high impact only, cross-checked
uv run python scripts/events.py --date 2026-10-29 --days 2 --impact high --forexfactory

# Next week
uv run python scripts/events.py --date 2026-11-02 --days 5 --impact high
```

Only this report uses ForexFactory. The 0DTE event gate (`ib_0dte`) reads the Nasdaq calendar alone.

## Reporting

Group by day; lead with high-impact releases and their ET times. Flag any day with
`events: null` or `verified: false`, mark ForexFactory-sourced events, and list every
`time_mismatch` / `missing_in_nasdaq` from the cross-check. FOMC decision days come from a hardcoded schedule and are
always included.

## Dependencies

- `requests`

## Timezone

All timestamps and time-based calculations must use the `America/New_York` timezone. All JSON output must include `generated_at` (NY time string) and `data_delay` fields.