You are: Developers · Institutions · Citizens
Comparison · aion-indian-market-calendar

aion-indian-market-calendar vs pandas_market_calendars: What Breaks for India

pandas_market_calendars is a well-maintained library for US and global exchange calendars. For Indian markets, specifically MCX, NSE Currency Derivatives (CDS), and Muhurat trading, it either lacks coverage or requires manual workarounds. This page documents exactly where those gaps are and how aion-indian-market-calendar fills them.

pip install aion-indian-market-calendar

Capability comparison

Capability aion-indian-market-calendar pandas_market_calendars
NSE equity hours (09:15-15:30 IST)YesYes (via XBOM/XNSE)
BSE hoursYesYes
NSE Currency Derivatives (CDS): 09:00-17:00 ISTYes, dedicated segmentNo
CDS-specific holiday calendarYes, separate from NSE equityNo
MCX (commodity): 09:00-23:30 ISTYes, two-segment dayNo
MCX evening session (after 15:30)YesNo
Muhurat trading detection (Diwali)Yes, bundled in calendar dataNo
Alias resolution (NFO, FNO, NIFTY, USDINR…)YesNo
Offline use (bundled holiday data)Yes, no network at runtimePartial
Live holiday override (NSE circulars)Yes, live_events.json mergeNo
India-specific focusYes, built only for IndiaGlobal, India is one entry

The three cases where pandas_market_calendars fails for India

1. MCX evening sessions

MCX commodity trading continues until 23:30 IST. NSE equity closes at 15:30. A script using pandas_market_calendars that checks "is the market open at 20:00?" will return False for the XNSE exchange, which is correct for equity but wrong for any MCX commodity workflow (crude oil, natural gas, gold, silver).

# With pandas_market_calendars: wrong for MCX after 15:30
import pandas_market_calendars as mcal
nse = mcal.get_calendar("XNSE")
# No MCX calendar available. The only workaround is manual session logic.

# With aion-indian-market-calendar: correct
from aion_indian_market_calendar import IndiaMarketCalendar
from datetime import datetime
from zoneinfo import ZoneInfo
cal = IndiaMarketCalendar.bundled(2026)
tz = ZoneInfo("Asia/Kolkata")
cal.is_market_open("MCX", datetime(2026, 6, 18, 20, 0, tzinfo=tz))  # True

2. NSE Currency Derivatives (CDS): wrong hours and wrong holidays

CDS covers USDINR, EURINR, GBPINR, and JPYINR futures and options. It runs from 09:00 to 17:00 IST, 90 minutes longer than NSE equity. It also has a separate holiday calendar: some days that are equity holidays are not CDS holidays, and vice versa.

There is no CDS calendar in pandas_market_calendars. The closest is XNSE (NSE equity), which gives wrong hours and potentially wrong holiday answers for CDS workflows.

# aion-indian-market-calendar handles CDS correctly
from aion_indian_market_calendar import IndiaMarketCalendar
from datetime import datetime
from zoneinfo import ZoneInfo
cal = IndiaMarketCalendar.bundled(2026)
tz = ZoneInfo("Asia/Kolkata")

# CDS closes at 17:00, not 15:30 like equity
cal.is_market_open("NSE_CURRENCY_DERIVATIVES", datetime(2026, 6, 18, 16, 0, tzinfo=tz))  # True
cal.is_market_open("USDINR", datetime(2026, 6, 18, 16, 0, tzinfo=tz))  # True, alias resolves
cal.is_market_open("NSE", datetime(2026, 6, 18, 16, 0, tzinfo=tz))     # False, NSE equity closed

3. Muhurat trading (Diwali equity session)

On Diwali, NSE holds a one-hour special equity trading session (Muhurat trading) in the evening. This is not a regular trading day: it is a partial session on an otherwise closed day. pandas_market_calendars marks Diwali as a holiday. Any scheduler that relies on it to confirm "NSE is closed today" and skips execution will miss Muhurat trading entirely.

# aion-indian-market-calendar includes Muhurat data
from aion_indian_market_calendar import IndiaMarketCalendar
cal = IndiaMarketCalendar.bundled(2026)
# Returns Muhurat trading event for Diwali
events = cal.events_on("2026-11-08", exchange="NSE")
# [(event.id, event.name, event.metadata.get("muhurat"))]
The issue is not that pandas_market_calendars is wrong in general: it is accurate for the exchanges it targets. The issue is that India's exchange landscape has specific segments and session rules that fall outside the scope of a global exchange calendar library. aion-indian-market-calendar exists specifically for these India-specific cases.

Migration from pandas_market_calendars

If you are using pandas_market_calendars for NSE equity only (basic trading day lookup), migration is straightforward:

# Before (pandas_market_calendars)
import pandas_market_calendars as mcal
nse = mcal.get_calendar("XNSE")
schedule = nse.schedule(start_date="2026-06-01", end_date="2026-06-30")

# After (aion-indian-market-calendar)
from aion_indian_market_calendar import IndiaMarketCalendar
cal = IndiaMarketCalendar.bundled(2026)
# Get all NSE equity trading days in June 2026
trading_days = [
    d for d in cal.trading_days("NSE_EQUITY", year=2026)
    if d.month == 6
]

For MCX, CDS, or Muhurat-aware workflows, pandas_market_calendars has no equivalent path - aion-indian-market-calendar is the only Python package that covers these segments with bundled, maintained data.

Install

pip install aion-indian-market-calendar

MIT license. No API key. Works offline. Full documentation →

PyPI → • Hugging Face →

Get notified when we launch new models. Occasional product updates, a few times a year. What we collect and keep: your email address and the date you subscribed, stored in our own database in India. Nothing else - no name, no account, no tracking, and we never sell or share it. Leaving takes one click from the link in every email, and deletes your address rather than flagging it. Privacy policy.