Files
MoFin/venv/lib/python3.12/site-packages/exchange_calendars/common_holidays.py
T
知微 fa45d8aa5f fix: 小果地址统一node122(兼容LAN+EasyTier)
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
  Privoxy对node122:18003返回500,直连正常
2026-06-30 02:56:35 +08:00

502 lines
12 KiB
Python

import pandas as pd
from pandas.tseries.holiday import FR, DateOffset, Easter, Holiday
from pandas.tseries.offsets import Day
from .exchange_calendar import MONDAY, TUESDAY
from .pandas_extensions.offsets import OrthodoxEaster
def new_years_day(start_date=None, end_date=None, observance=None, days_of_week=None):
return Holiday(
"New Year's Day",
month=1,
day=1,
start_date=start_date,
end_date=end_date,
observance=observance,
days_of_week=days_of_week,
)
def new_years_eve(
start_date=None,
end_date=None,
observance=None,
days_of_week=None,
offset=None,
):
return Holiday(
"New Year's Eve",
month=12,
day=31,
start_date=start_date,
end_date=end_date,
offset=offset,
observance=observance,
days_of_week=days_of_week,
)
def epiphany(
start_date=None,
end_date=None,
observance=None,
days_of_week=None,
offset=None,
):
return Holiday(
"Epiphany",
month=1,
day=6,
start_date=start_date,
end_date=end_date,
offset=offset,
observance=observance,
days_of_week=days_of_week,
)
def anzac_day(start_date=None, end_date=None, observance=None, days_of_week=None):
return Holiday(
"Anzac Day",
month=4,
day=25,
start_date=start_date,
end_date=end_date,
observance=observance,
days_of_week=days_of_week,
)
def european_labour_day(
start_date=None, end_date=None, observance=None, days_of_week=None
):
return Holiday(
"Labour Day",
month=5,
day=1,
start_date=start_date,
end_date=end_date,
observance=observance,
days_of_week=days_of_week,
)
# Holy Wednesday, Maundy Thursday, Ascension Day, Whit Monday, and Corpus
# Christi do not take observance as a parameter because they depend on a
# particular offset, and offset and observance cannot both be passed to a
# Holiday.
def holy_wednesday(start_date=None, end_date=None, days_of_week=None):
return Holiday(
"Holy Wednesday",
month=1,
day=1,
offset=[Easter(), -Day(4)],
start_date=start_date,
end_date=end_date,
days_of_week=days_of_week,
)
def maundy_thursday(start_date=None, end_date=None, days_of_week=None):
return Holiday(
"Maundy Thursday",
month=1,
day=1,
offset=[Easter(), -Day(3)],
start_date=start_date,
end_date=end_date,
days_of_week=days_of_week,
)
def ascension_day(start_date=None, end_date=None):
return Holiday(
"Ascension Day",
month=1,
day=1,
offset=[Easter(), Day(39)],
start_date=start_date,
end_date=end_date,
)
def whit_monday(start_date=None, end_date=None):
return Holiday(
"Whit Monday",
month=1,
day=1,
offset=[Easter(), Day(50)],
start_date=start_date,
end_date=end_date,
)
def corpus_christi(start_date=None, end_date=None):
return Holiday(
"Corpus Christi",
month=1,
day=1,
offset=[Easter(), Day(60)],
start_date=start_date,
end_date=end_date,
)
def orthodox_ash_monday(start_date=None, end_date=None):
return Holiday(
"Ash Monday",
month=1,
day=1,
offset=[OrthodoxEaster(), -Day(48)],
start_date=start_date,
end_date=end_date,
)
def orthodox_good_friday(start_date=None, end_date=None):
return Holiday(
"Good Friday",
month=1,
day=1,
offset=[OrthodoxEaster(), -Day(2)],
start_date=start_date,
end_date=end_date,
)
def orthodox_easter_monday(start_date=None, end_date=None):
return Holiday(
"Easter Monday",
month=1,
day=1,
offset=[OrthodoxEaster(), Day(1)],
start_date=start_date,
end_date=end_date,
)
def orthodox_easter_tuesday(start_date=None, end_date=None):
return Holiday(
"Easter Tuesday",
month=1,
day=1,
offset=[OrthodoxEaster(), Day(2)],
start_date=start_date,
end_date=end_date,
)
def orthodox_pentecost(start_date=None, end_date=None):
return Holiday(
"Pentecost",
month=1,
day=1,
offset=[OrthodoxEaster(), Day(49)],
start_date=start_date,
end_date=end_date,
)
def orthodox_whit_monday(start_date=None, end_date=None):
return Holiday(
"Whit Monday",
month=1,
day=1,
offset=[OrthodoxEaster(), Day(50)],
start_date=start_date,
end_date=end_date,
)
def midsummer_eve(start_date=None, end_date=None):
return Holiday(
"Midsummer Eve",
month=6,
day=19,
offset=DateOffset(weekday=FR(1)),
start_date=start_date,
end_date=end_date,
)
def saint_peter_and_saint_paul_day(
start_date=None, end_date=None, observance=None, days_of_week=None
):
return Holiday(
"Saint Peter and Saint Paul Day",
month=6,
day=29,
start_date=start_date,
end_date=end_date,
observance=observance,
days_of_week=days_of_week,
)
def assumption_day(start_date=None, end_date=None, observance=None, days_of_week=None):
return Holiday(
"Assumption Day",
month=8,
day=15,
start_date=start_date,
end_date=end_date,
observance=observance,
days_of_week=days_of_week,
)
def all_saints_day(start_date=None, end_date=None, observance=None, days_of_week=None):
return Holiday(
"All Saints Day",
month=11,
day=1,
start_date=start_date,
end_date=end_date,
observance=observance,
days_of_week=days_of_week,
)
def immaculate_conception(
start_date=None, end_date=None, observance=None, days_of_week=None
):
return Holiday(
"Immaculate Conception",
month=12,
day=8,
start_date=start_date,
end_date=end_date,
observance=observance,
days_of_week=days_of_week,
)
def christmas_eve(start_date=None, end_date=None, observance=None, days_of_week=None):
return Holiday(
"Christmas Eve",
month=12,
day=24,
start_date=start_date,
end_date=end_date,
observance=observance,
days_of_week=days_of_week,
)
def christmas(start_date=None, end_date=None, observance=None, days_of_week=None):
return Holiday(
"Christmas",
month=12,
day=25,
start_date=start_date,
end_date=end_date,
observance=observance,
days_of_week=days_of_week,
)
def weekend_christmas(start_date=None, end_date=None, observance=None):
"""
If christmas day is Saturday Monday 27th is a holiday
If christmas day is sunday the Tuesday 27th is a holiday
"""
return Holiday(
"Weekend Christmas",
month=12,
day=27,
days_of_week=(MONDAY, TUESDAY),
start_date=start_date,
end_date=end_date,
observance=observance,
)
def boxing_day(start_date=None, end_date=None, observance=None, days_of_week=None):
return Holiday(
"Boxing Day",
month=12,
day=26,
start_date=start_date,
end_date=end_date,
observance=observance,
days_of_week=days_of_week,
)
def weekend_boxing_day(start_date=None, end_date=None, observance=None):
"""
If boxing day is saturday then Monday 28th is a holiday
If boxing day is sunday then Tuesday 28th is a holiday
"""
return Holiday(
"Weekend Boxing Day",
month=12,
day=28,
days_of_week=(MONDAY, TUESDAY),
start_date=start_date,
end_date=end_date,
observance=observance,
)
# These dates were initially calculated using the ummalqura Python
# package (https://pypi.org/project/ummalqura/), and then tweaked
# to fit Turkey's observance of Eid al-Fitr. Other countries that
# observe Eid al-Fitr might use slightly different dates
eid_al_fitr_first_day = pd.to_datetime(
[
"1981-08-01",
"1982-07-21",
"1983-07-11",
"1984-06-30",
"1985-06-19",
"1986-06-08",
"1987-05-28",
"1988-05-16",
"1989-05-06",
"1990-04-26",
"1991-04-15",
"1992-04-04",
"1993-03-24",
"1994-03-13",
"1995-03-02",
"1996-02-19",
"1997-02-08",
"1998-01-29",
"1999-01-18",
"2000-01-08",
"2000-12-27",
"2001-12-16",
"2002-12-05",
"2003-11-25",
"2004-11-14",
"2005-11-03",
"2006-10-23",
"2007-10-12",
"2008-09-30",
"2009-09-20",
"2010-09-09",
"2011-08-30",
"2012-08-19",
"2013-08-08",
"2014-07-28",
"2015-07-17",
"2016-07-05",
"2017-06-25",
"2018-06-15",
"2019-06-04",
"2020-05-24",
"2021-05-13",
"2022-05-02",
"2023-04-21",
"2024-04-10",
"2025-03-30",
"2026-03-20",
"2027-03-09",
"2028-02-26",
"2029-02-14",
"2030-02-04",
"2031-01-24",
"2032-01-14",
"2033-01-02",
"2033-12-23",
"2034-12-12",
"2035-12-01",
"2036-11-19",
"2037-11-08",
"2038-10-29",
"2039-10-19",
"2040-10-07",
"2041-09-26",
"2042-09-15",
"2043-09-04",
"2044-08-24",
"2045-08-14",
"2046-08-03",
"2047-07-24",
"2048-07-12",
"2049-07-01",
]
)
# These dates were initially calculated using the ummalqura Python
# package (https://pypi.org/project/ummalqura/), and then tweaked
# to fit Turkey's observance of Eid al-Adha. Other countries that
# observe Eid al-Adha might use slightly different dates
eid_al_adha_first_day = pd.to_datetime(
[
"1981-10-08",
"1982-09-27",
"1983-09-17",
"1984-09-05",
"1985-08-26",
"1986-08-15",
"1987-08-04",
"1988-07-23",
"1989-07-13",
"1990-07-02",
"1991-06-22",
"1992-06-11",
"1993-05-31",
"1994-05-20",
"1995-05-09",
"1996-04-27",
"1997-04-17",
"1998-04-07",
"1999-03-27",
"2000-03-16",
"2001-03-05",
"2002-02-22",
"2003-02-10",
"2004-02-01",
"2005-01-20",
"2006-01-09",
"2006-12-31",
"2007-12-20",
"2008-12-08",
"2009-11-27",
"2010-11-16",
"2011-11-06",
"2012-10-25",
"2013-10-15",
"2014-10-04",
"2015-09-24",
"2016-09-12",
"2017-09-01",
"2018-08-21",
"2019-08-11",
"2020-07-31",
"2021-07-20",
"2022-07-09",
"2023-06-28",
"2024-06-16",
"2025-06-06",
"2026-05-27",
"2027-05-16",
"2028-05-05",
"2029-04-24",
"2030-04-13",
"2031-04-02",
"2032-03-22",
"2033-03-11",
"2034-03-01",
"2035-02-18",
"2036-02-07",
"2037-01-26",
"2038-01-16",
"2039-01-05",
"2039-12-26",
"2040-12-14",
"2041-12-04",
"2042-11-23",
"2043-11-12",
"2044-10-31",
"2045-10-21",
"2046-10-10",
"2047-09-30",
"2048-09-19",
"2049-09-08",
]
)