Change Log

5.4.0 (05/25/2026)

  • PR #462 to fix numerous issues - remove global pandas holiday-calendar start-date mutations while preserving local historical holiday bounds - fix schedule merges that create non-overlapping inner intervals - fix CME calendar regressions for Globex holidays, fixed-income hours, agriculture hours, and historical equity hours - add explicit CME_TradeDate support for CME settlement/trade-date users while keeping CME_Equity schedule-day semantics intact - fix NYSE early-close post-market handling, BSE/NSE aliases and 2024 election holiday, NYSE rollback behavior, and EUREX regular open/close hours - add EUREX_PrePost / EUREX_Extended for the EUREX pre/post UTC session endpoints requested in Pre and Post schedule for EUREX #184 while keeping generic EUREX regular-hours-only - document that calendars are package-shipped code, not live server-provided data - harden date-specific market-time helpers so they use the same cutover/offset resolver as generated schedules Fixes #207 Fixes #242 Fixes #244 Fixes #301 Fixes #340 Fixes #344 Fixes #355 Fixes #356 Fixes #382 Fixes #387 Fixes #441

    Related #184 Related #343

  • Add type hints to all public methods and functions, and to internal methods where it improves readability

5.3.2 (04/04/2026)

  • PR #456 to fix issue on CME calendars

5.3.1 (03/03/2026)

  • PR #443 to fix issue #343 on CME calendars

  • PR #444 to fix issues with SIFMA calendars

5.3.0 (01/25/2026)

  • Major refactoring from PR #439 to improve code maintainability and performance
    • Replace Black and isort with Ruff for faster, unified formatting and linting

    • Add ty type checker (Astral) to dev dependencies

    • Enable comprehensive linting rules with sensible defaults for this codebase

    • Fix mutable default argument bugs in calendar_utils.py

    • Fix pandas 3.0 compatibility - All datetime64 dtype issues resolved

    • Fix XTAE calendar - Correct weekmask for Tel Aviv Stock Exchange

    • Fix date_range_htf - Period boundary calculation fixes

    • Add calendar source references - Closes Add reference/source for calendars informations #392

  • Added BSE holidays for 2026 and 2027 #438

  • Added NSE holidays for 2026 and 2027 #437

  • Added CN holidays for 2026 and 2027 #436

  • Added JPX holidays for 2026 and 2027 #435

5.2.4 (01/07/2026)

  • removed caching of holidays

  • fix: TSX calendar not respecting early close on Christmas Eve #433

  • Update list of BSE holidays for 2025 and 2026 #430

5.2.3 (12/27/2025)

  • Fixed missing early close for Independence Day in CBOE calendars (CFE, CBOE_Index_Options, CBOE_Equity_Options)

  • Fixed #260

  • Fixed #230

  • Fixed #407

  • Multiple fixes to the build process and to incorporate more AI capabilities

5.2.0 (12/17/2025)

  • Added AGENTS.md as instructions file for agentic AI agents

  • Added Chinese holidays for 2026 #413

5.1.3 (11/01/2025)

  • Added items to pyproject.toml for using uv for development

  • Better merge_schedules outer join handling #406

  • Use pandas min/max to account for NaT #410

  • Added early closes for ASX (#399)

  • Added USIndependenceDayBefore2022PreviousDay for CME Equity Calendar (#400)

5.1.1 (06/22/2025)

  • Fix the close time for BMF (#391 #393)

  • Bring backward compatability to python 3.8, lower min version to that

5.1.0 (04/22/2025)

  • Implement robust SIFMA Good Friday logic #385

5.0.0 (04/07/2025)

  • Add human readable names from PR #380

  • Replace all usage of pytz with the new zoneinfo standard

  • Bump min python version to 3.9

4.6.1 (01/23/2025)

  • patch to fix the regression error in #376

4.6.0 (01/16/2025)

  • Updated usage.ipynb with information on added features

  • Added mark_session() Util Function

  • Added MarketCalendar.date_range_htf() Method

  • Added MarketCalendar.schedule_from_days() Method

  • Split NYSE Holiday Calendar into Two Calendars to support Date_Range_HTF() - NYSE.weekmask now returns “Mon Tue Wed Thur Fri” instead of “Mon Tue Wed Thur Fri Sat”

  • Start, End, Periods, and Session Arguments added to Date_Range() from PR #358

  • Speed enhancements from PR #358 and #372

Added mark_session() Util Function Added MarketCalendar.date_range_htf() Method Added MarketCalendar.schedule_from_days() Method The only thing of note that may not be backwards compatible with every user’s implementation is the following change: Split NYSE Holiday Calendar into Two Calendars to support Date_Range_HTF() NYSE.weekmask now returns “Mon Tue Wed Thur Fri” instead of “Mon Tue Wed Thur Fri Sat” This was needed to make Date_Range_HTF() Work properly. In theory it should also make nyse schedule generation faster, but the difference is likely negligible. ** This doesn’t effect the schedule. NYSE still produces Saturdays pre-1952, it just does so using a different implementation. For Information on the features added see the updates to the Usage Notebook. mark_session(): Helpers > Mark Session MarketCalendar.date_range_htf(): Basic Usage > Exchange open valid business days: Date_Range_HTF() MarketCalendar.schedule_from_days(): Basic Usage > Schedule_From_Days date_range(): Helpers > date_range - (These were actually updates in PR #358)

4.5.1 (01/01/2025)

  • Update Chinese holidays from PR #362

4.5.0 (12/20/2024)

  • Speed up improvement from PR #357

  • Add Jimmy Carter NYSE close PR #361

4.4.2 (06/17/2024)

  • Update close time on JPX to 15:30 from PR #351

4.4.1 (06/17/2024)

  • Added CME Grains calendar (CMEGlobexGrainsExchangeCalendar) from PR #333

  • Removed the Black format check from pre-commit, was causing too many errors

  • 24/7 and XTAE Calendar Fixes from PR #346

  • Changes the required python to be only 3.8 or greater, but tests will only be run for 3.9+

  • CME updated to include Juneteenth PR #337

4.4.0 (02/10/2024)

  • Verified to work on pandas 2.2.0, max version changed in pyproject.toml

  • Updated minimum version of Python to 3.9

  • Corrected 2024 us sifma holidays & early closes #326

  • Added national holiday for BMF calendar (Black Awareness Day, Nov 20th) #321

  • Added BMF calendar holiday for New Year’s Eve on Sunday #318

  • BSE/NSE trading holidays 2024 updated #316

4.3.3 (12/30/2023)

  • PR #310 to add EUREX Fixed Income calendars

  • PR #311 to add good friday special closes for CME Globex

4.3.2 (12/09/2023)

  • Reformat all code using Black and make black a standard PR #290

  • Add XNSE as a name for BSE calendar

  • Update holidays for BSE # 277

  • Update holidays for CN # 305

  • Add IEX to list of exchanges

4.3.1 (09/06/2023)

  • Fixed broken build PR #292

4.3.0 (09/05/2023)

  • Fixed for pandas 2.0 so all tests pass PR #282

  • Move exchange_calendar*.py files to pandas_market_calendar/exchange_calendars/ PR #284

  • Move holidays_*.py to pandas_market_calendar/holidays/ PR #284

  • Major cleanup including unused imports PR #284

4.2.1 (08/21/2023)

  • Fix the pyproject.toml to properly generate sdist PR #267

  • Remove .travis.yml file as Travis-CI is no longer used

  • Merge .coveragerc into pyproject.toml

4.2.0 (08/20/2023)

  • CBOE GoodFriday special close is broken, reverted back to standard GoodFriday logic PR #265

  • Fixed BSE Holiday PR #248 Issue #245

  • Updated TASE Holidays 2022-2025 PR #263

  • King Charles III’s Coronation Day holiday to LSE calendar PR #255

  • Added NYSE tests for 2024 and 2025 PR #259

  • Deleted setup.cfg that was only used for flake8. Will move to Black in a future release

  • Moved all setuptools build workflows to pyproject.toml and deleted setup.py

4.1.4 (02/04/2023)

  • Updated TASE Holidays 2022-2025

4.1.3 (12/26/2022)

  • Added Chinese 2023 holidays

4.1.2 (12/08/2022)

  • Added 2023 holidays to BSE calendar

4.1.1 (10/31/2022)

  • Fix for bug in NYSEExchangeCalendar.valid_days

4.1.0 (10/08/2022)

  • Added UK and Australia holidays for Queen Elizabeth II’s State Funeral

4.0.3 (10/08/2022)

  • Enabled tests that failed before PR #215

4.0.2 (10/08/2022)

  • Implemented new release management

4.0.1 (09/03/22)

  • Fix duplicates bug in special_dates

  • Fix tz=None bug in NYSEExchangeCalendar.valid_days

4.0 (08/02/22)

  • Added interruptions support

  • Updated MarketCalendar.open_at_time to respect interruptions

  • Special times can be set with offsets

  • MarketCalendar.days_at_time returns a pandas.Series

  • calendar_utils.date_range supports schedules of any timezone

3.5 (06/25/22)

  • Updated BMF

  • New CME calendar setup

  • New CME calendars for equities, fixed income, ags, energies, metals, and FX

3.4 (03/05/22)

  • Update to work with pandas 1.4.0

  • Fix boxing day for Australia

  • Add SIFMA US, UK and JP calendars

  • Add IEX calendar

  • Add NSE calendar

3.3 (01/30/22)

  • PR #166 to solve the issue raised in #164

  • Add Juneteenth to NYSE calendar

  • Fixed CN holidays

  • Make MarketCalendars pickleable

3.2 (10/10/21)

3.1 (08/29/21)

  • Added September 11 holidays to TSX calendar

  • Made the minimum version for exchange_calendars >= 3.3 to resolve problem with newer versions of pandas

3.0 (8/17/21)

  • Major update to the date_range() functionality. This new behavior is more complete and consistent, but changes behavior in some cases, so a new major version is warranted. For more discussion on the topic refer to PR #142 and Issue #138

2.1 (8/16/21)

  • Updated to work with pandas 1.3

  • Raise minimum python to 3.7

  • NYSE calendar valid from 1885 to present. Includes all full day closes, early closes, and late opens. PR #141

2.0.1 (5/20/21)

  • Fixed the TSE calendar for Christmas falling on a Saturday

2.0 (5/8/21)

This version replaces the trading_calendars integration with exchange_calendars, closing out #120. exchange_calendars is the fork of trading_calendars that is currently actively maintained. trading_calendars is now abandoned because it’s corporate sponsor is out of business and gone.

1.7 (5/6/21)

This version eliminated the generic CMEExchangeCalendar. This calendar did not represent a specific market and thus was not appropriate for any use. With the addition of the specific calendars for product types this is no longer needed and is removed. To see the product specific calendars here: https://pandas-market-calendars.readthedocs.io/en/latest/calendars.html#futures-calendars

For the CMEEquityExchangeCalendar, this no longer is a mirror of the NYSE calendar as some of the holidays for the NYSE are an open day with early close for CME. This calendar now has its own set of holiday assumptions. This may cause some holidays missing until this calendar is fully tested and vetted.

1.6.2 (5/6/21)

  • Fix UK Holidays for #130

  • Fix CME Bond calendar for Good Friday #132

1.6.1 (11/3/20)

  • Add trading breaks to the trading_calendars import mirror

  • Fix the CFE calendar for Good Friday #116

  • Renamed XBOM to BSE to avoid conflict with trading_calendars

1.6 (9/14/20)

This is the first version of the merge of this project with the quantopian trading-calendars.

  • Added the trading_calendars.py module that brings in all current and future calendars from the quantopian project

  • All calendars from trading-calendars are now available in pandas_market_calendars

1.5 (8/30/20)

  • Add the is_open_now() function

  • Add TASE calendar from #114

  • Holiday calendar is now cached to improve performance #117

1.4.2 (8/11/20)

  • Fixed for changes to pandas 1.1.0

1.4.1 (7/22/20)

  • Added CME_Bond calendar for bond and interest rate futures

  • Added futures specific items to the documentations along with examples with breaks

1.4 (7/11/20)

  • Add the concept of a break during the trading day. For example this can accommodate Asian markets that have a lunch break, or futures markets that are open 24 hours with a break in the day for trade processing.

  • Added product specific contract calendars for CME futures exchange. First calendars are the CME Agricultural and CME Equity calendars

  • Add ability to set time zone on schedule() function #42

  • Add the Bombay exchange (XBOM) from #96

  • Fixed Christmas holidays in SIX #100

1.3 (4/23/20)

  • Fixes to support Pandas v1.0

  • Remove support for Python 3.4 based on underlying packages removing support for v3.4

  • Added ASXExchangeCalendar from PR #85

  • Fixes to UK holidays in #84

1.2 (10/22/19)

  • Support calendars with valid business days on the weekend (PR #75)

  • Fixed SSE 2019 labour’s day holidays (PR #74)

  • Better JPX calendar support for the time period 1949-2099 (PR #72)

  • Reformat Japan’s Ascension days, removed duplicate days (PR #68)

  • Added German national holidays (PR #77)

1.1 (5/3/19)

  • add JPX Ascension Day holidays for 2019 from PR #64

1.0 (3/26/19)

  • Official move to Python3 only support

  • Version moved to 1.0 as the package has been around and stable long enough to warrant a 1.0

0.22 (3/25/19)

  • Added Shanghai Stock Exchange (SSE) calendar from PR #58

  • Added HKEX calendar from PR #61

  • Fixed tests for pandas v0.24 and higher

0.21 (12/2/18)

  • Added Oslo Stock Exchange (OSE) calendar

  • Added GW Bush Holiday to NYSE calendar from PR #53 and #54

0.20 (7/2/18)

  • Improvements in the internals for how calendars are registered and aliased thanks for PR #45

0.19 (7/2/18)

  • schedule() method no longer raises exception if there are no valid trading days between start_date and end_date, will now return an empty DataFrame

0.18 (6/8/18)

  • Changed NYSE holiday calendar to start 1/1/1900 (was previously 1/1/1970).

  • Fixed an error that schedule() method would fail if the end date was prior to 1993

0.17 (5/24/18)

  • Added SIX (Swiss Exchange) calendar, Pull Request #36

0.16 (5/12/18)

  • Fixed the equinox for Japanese calendar, Pull Request #33

  • Fixed Victoria Day for TSX, issue #34

0.15 (2/23/18)

  • Removed toolz as a required package and removed from the one test that required it

  • Added daily closes on NYSE back to 1928 from PR #30 thanks to @pldrouin

0.14 (1/7/18)

  • Made default open and close times time-zone aware

0.13 (1/5/18)

  • Corrected JPX calendar for issue #22

0.12 (12/10/17)

  • Added new JPX calendar thanks to gabalese from PR #21

0.11 (10/30/17)

  • Corrected the NYSE calendar for Independence Day on Thursday post 2013 to fix #20

  • Added new convert_freq() function to convert a date_range to a lower frequency to fix #19

0.10 (9/12/17)

  • Added open_time_default and close_time_default as abstract property methods to fix #17

0.9 (9/12/17)

  • Fix #12 to Eurex calendar

0.8 (8/24/17)

  • Fix #10 to make merge_schedules work properly for more than 2 markets

0.7 (5/30/17)

  • Fix a couple deprecated imports

0.6 (3/31/17)

  • Added coveralls.io test coverage

0.5 (3/27/17)

  • Added Python2.7 support

0.4

  • Fixed bug #5

0.3

  • Added Eurex calendar

0.2

  • Fix to allow start_date and end_date to be the same in schedule()

0.1

  • Initial version