fa45d8aa5f
- 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,直连正常
502 lines
12 KiB
Python
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",
|
|
]
|
|
)
|