Files
MoFin/venv/lib/python3.12/site-packages/exchange_calendars/xtks_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

423 lines
10 KiB
Python

from datetime import timedelta
from dateutil.relativedelta import MO
from pandas import DateOffset, Timestamp
from pandas.tseries.holiday import Holiday, sunday_to_monday
from .common_holidays import new_years_day
from .exchange_calendar import SUNDAY
def sunday_to_tuesday(dt):
"""
If holiday falls on Sunday, use Tuesday instead.
"""
if dt.weekday() == SUNDAY:
return dt + timedelta(2)
return dt
def sunday_to_wednesday(dt):
"""
If holiday falls on Sunday, use Wednesday instead.
"""
if dt.weekday() == SUNDAY:
return dt + timedelta(3)
return dt
NewYearsHolidayJan1 = new_years_day()
NewYearsHolidayJan2 = Holiday(
"New Year's Holiday (Jan 2)",
month=1,
day=2,
)
NewYearsHolidayJan3 = Holiday(
"New Year's Holiday (Jan 3)",
month=1,
day=3,
)
# https://en.wikipedia.org/wiki/Coming_of_Age_Day
ComingOfAgeDayThrough1999 = Holiday(
"Coming of Age Day (through 1999)",
month=1,
day=15,
start_date="1948-01-01",
end_date="2000-01-01",
observance=sunday_to_monday,
)
ComingOfAgeDay2000Onwards = Holiday(
"Coming of Age Day (2000 onwards)",
month=1,
day=1,
offset=DateOffset(weekday=MO(2)),
start_date="2000-01-01",
)
NationalFoundationDay = Holiday(
"National Foundation Day",
month=2,
day=11,
observance=sunday_to_monday,
)
# The dates on which the vernal/autumnal equinox will be observed
# are announced on the first weekday of February of the previous
# year, so we treat them as ad-hoc holidays, even though they
# occur every year. For more info, see:
# https://en.wikipedia.org/wiki/Public_holidays_in_Japan#cite_note-3
# See:
# https://www.timeanddate.com/holidays/japan/
# https://www.timeanddate.com/holidays/japan/spring-equinox
VernalEquinoxes = [
Timestamp("1997-03-20"),
Timestamp("1998-03-21"),
Timestamp("1999-03-22"),
Timestamp("2000-03-20"),
Timestamp("2001-03-20"),
Timestamp("2002-03-21"),
Timestamp("2003-03-21"),
Timestamp("2004-03-20"),
Timestamp("2005-03-21"),
Timestamp("2006-03-21"),
Timestamp("2007-03-21"),
Timestamp("2008-03-20"),
Timestamp("2009-03-20"),
Timestamp("2010-03-22"),
Timestamp("2011-03-21"),
Timestamp("2012-03-20"),
Timestamp("2013-03-20"),
Timestamp("2014-03-21"),
Timestamp("2015-03-21"),
Timestamp("2016-03-21"),
Timestamp("2017-03-20"),
Timestamp("2018-03-21"),
Timestamp("2019-03-21"),
Timestamp("2020-03-20"),
Timestamp("2021-03-20"),
Timestamp("2022-03-21"),
Timestamp("2023-03-21"),
Timestamp("2024-03-20"),
Timestamp("2025-03-20"),
Timestamp("2026-03-20"),
Timestamp("2027-03-22"),
Timestamp("2028-03-20"),
Timestamp("2029-03-20"),
Timestamp("2030-03-20"),
Timestamp("2031-03-21"),
Timestamp("2032-03-20"),
Timestamp("2033-03-21"),
Timestamp("2034-03-20"),
Timestamp("2035-03-21"),
Timestamp("2036-03-20"),
Timestamp("2037-03-20"),
Timestamp("2038-03-20"),
Timestamp("2039-03-21"),
Timestamp("2040-03-20"),
]
# The Golden Week holidays (late April - early May) are listed in reverse
# chronological order because earlier holidays must be aware of later holidays
# so that that if an earlier holiday (Constitution Memorial Day, Greenery Day)
# falls on a Sunday, that holiday can be observed on the next non-holiday
# weekday.
# Clash with GreeneryDay and ConstitutionMemorialDay
ChildrensDay = Holiday(
"Children's Day",
month=5,
day=5,
observance=sunday_to_monday,
)
# From 1986-2006, the day between Constitution Memorial Day and Children's
# Day was an unnamed citizen's holiday because it was between two holidays.
# In 2007, Greenery Day was moved from April 29 to May 4, replacing the
# unnamed citizen's holiday. For more info, see:
# https://en.wikipedia.org/wiki/Golden_Week_(Japan)
# Clash with ChildrensDay and ConstitutionMemorialDay
GreeneryDay2007Onwards = Holiday(
"Greenery Day",
month=5,
day=4,
start_date="2007-01-01",
observance=sunday_to_tuesday,
)
CitizensHolidayGoldenWeek = Holiday(
"Citizen's Holiday Golden Week",
month=5,
day=4,
end_date="2007-01-01",
observance=sunday_to_monday,
)
# In 2007, April 29 was changed from Greenery Day to Showa Day,
# and Greenery Day was moved to May 4.
GreeneryDayThrough2006 = Holiday(
"Greenery Day",
month=4,
day=29,
end_date="2007-01-01",
observance=sunday_to_monday,
)
ShowaDay = Holiday(
"Showa Day",
month=4,
day=29,
start_date="2007-01-01",
observance=sunday_to_monday,
)
# Clash with ChildrensDay
ConstitutionMemorialDay = Holiday(
"Constitution Memorial Day",
month=5,
day=3,
observance=sunday_to_wednesday,
)
MarineDayThrough2002 = Holiday(
"Marine Day (through 2002)",
month=7,
day=20,
end_date="2003-01-01",
observance=sunday_to_monday,
)
MarineDay2003OnwardsThrough2019 = Holiday(
"Marine Day (2003 - 2019)",
month=7,
day=1,
offset=DateOffset(weekday=MO(3)),
start_date="2003-01-01",
end_date="2020-01-01",
)
# Changed due to Tokyo Olympics
MarineDay2020 = Holiday(
"Marine Day (2020)",
month=7,
day=23,
year=2020,
)
MarineDay2021 = Holiday(
"Marine Day (2021)",
month=7,
day=22,
year=2021,
)
MarineDay2022Onwards = Holiday(
"Marine Day (2022 onwards)",
month=7,
day=1,
offset=DateOffset(weekday=MO(3)),
start_date="2022-01-01",
)
MountainDayThrough2019 = Holiday(
"Mountain Day (through 2019)",
month=8,
day=11,
start_date="2016-01-01",
end_date="2020-01-01",
observance=sunday_to_monday,
)
# Changed due to Tokyo Olympics
MountainDay2020 = Holiday(
"Mountain Day (2020)",
month=8,
day=10,
year=2020,
)
MountainDay2021 = Holiday(
"Mountain Day (2021)",
month=8,
day=9,
year=2021,
)
MountainDay2022Onwards = Holiday(
"Mountain Day (2022 onwards)",
month=8,
day=11,
start_date="2022-01-01",
observance=sunday_to_monday,
)
# See note on equinoxes above VernalEquinoxes
AutumnalEquinoxes = [
Timestamp("1997-09-23"),
Timestamp("1998-09-23"),
Timestamp("1999-09-23"),
Timestamp("2000-09-23"),
Timestamp("2001-09-24"),
Timestamp("2002-09-23"),
Timestamp("2003-09-23"),
Timestamp("2004-09-23"),
Timestamp("2005-09-23"),
Timestamp("2006-09-23"),
Timestamp("2007-09-24"),
Timestamp("2008-09-23"),
Timestamp("2009-09-23"),
Timestamp("2010-09-23"),
Timestamp("2011-09-23"),
Timestamp("2012-09-22"),
Timestamp("2013-09-23"),
Timestamp("2014-09-23"),
Timestamp("2015-09-23"),
Timestamp("2016-09-22"),
Timestamp("2017-09-23"),
Timestamp("2018-09-24"),
Timestamp("2019-09-23"),
Timestamp("2020-09-22"),
Timestamp("2021-09-23"),
Timestamp("2022-09-23"),
Timestamp("2023-09-23"),
Timestamp("2024-09-23"),
Timestamp("2025-09-23"),
Timestamp("2026-09-23"),
Timestamp("2027-09-23"),
Timestamp("2028-09-22"),
Timestamp("2029-09-24"),
Timestamp("2030-09-23"),
Timestamp("2031-09-23"),
Timestamp("2032-09-22"),
Timestamp("2033-09-23"),
Timestamp("2034-09-23"),
Timestamp("2035-09-24"),
Timestamp("2036-09-22"),
Timestamp("2036-09-22"),
Timestamp("2037-09-23"),
Timestamp("2038-09-23"),
Timestamp("2039-09-23"),
Timestamp("2040-09-22"),
]
# If the Autumnal Equinox falls on a Wednesday, the Tuesday before
# it is a holiday because it will be sandwiched between Respect for
# the Aged Day and the Autumnal Equinox. For more info, see:
# https://en.wikipedia.org/wiki/Silver_Week
CitizensHolidaySilverWeek = [
Timestamp("2009-09-22"),
Timestamp("2015-09-22"),
Timestamp("2026-09-22"),
Timestamp("2032-09-21"),
Timestamp("2037-09-22"),
]
RespectForTheAgedDayThrough2002 = Holiday(
"Respect for the Aged Day (through 2002)",
month=9,
day=15,
end_date="2003-01-01",
observance=sunday_to_monday,
)
RespectForTheAgedDay2003Onwards = Holiday(
"Respect for the Aged Day (2003 onwards)",
month=9,
day=1,
offset=DateOffset(weekday=MO(3)),
start_date="2003-01-01",
)
# https://en.wikipedia.org/wiki/Health_and_Sports_Day
HealthAndSportsDayThrough1999 = Holiday(
"Heakth and Sports Day (through 1999)",
month=10,
day=10,
start_date="1966-01-01",
end_date="2000-01-01",
observance=sunday_to_monday,
)
HealthAndSportsDay2000OnwardsThrough2019 = Holiday(
"Health and Sports Day (2000 - 2019)",
month=10,
day=1,
offset=DateOffset(weekday=MO(2)),
start_date="2000-01-01",
end_date="2020-01-01",
)
# Changed due to Tokyo Olympics
HealthAndSportsDay2020 = Holiday(
"Health and Sports Day (2020)",
month=7,
day=24,
year=2020,
)
HealthAndSportsDay2021 = Holiday(
"Health and Sports Day (2021)",
month=7,
day=23,
year=2021,
)
HealthAndSportsDay2022Onwards = Holiday(
"Health and Sports Day (2022 onwards)",
month=10,
day=1,
offset=DateOffset(weekday=MO(2)),
start_date="2022-01-01",
)
CultureDay = Holiday(
"Culture Day",
month=11,
day=3,
observance=sunday_to_monday,
)
LaborThanksgivingDay = Holiday(
"Labor Thanksgiving Day",
month=11,
day=23,
observance=sunday_to_monday,
)
# Emperor Akihito is due to retire on 30 April 2019, meaning the holiday
# will not be observed in 2019, and its next celebration will be on the
# birthday of Crown Prince Naruhito (23 February 2020).
EmperorAkihitoBirthday = Holiday(
"Emperor Akihito's Birthday",
month=12,
day=23,
end_date="2019-04-30",
observance=sunday_to_monday,
)
EmperorNaruhitoBirthday = Holiday(
"Emperor Naruhito's Birthday",
month=2,
day=23,
start_date="2019-04-30",
observance=sunday_to_monday,
)
NewYearsHolidayDec31 = Holiday(
"New Year's Holiday (Dec 31)",
month=12,
day=31,
)
Misc2019Holidays = [
Timestamp("2019-04-30"), # Abdication Day
Timestamp("2019-05-01"), # Accession Day
Timestamp("2019-05-02"), # Citizen's Holiday
Timestamp("2019-10-22"), # Enthronement Ceremony
]
EquityTradingSystemFailure = [
# https://www.jpx.co.jp/english/corporate/news/news-releases/0060/20201019-01.html
Timestamp("2020-10-01"),
]