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,直连正常
454 lines
11 KiB
Python
454 lines
11 KiB
Python
from datetime import time
|
|
from zoneinfo import ZoneInfo
|
|
|
|
import pandas as pd
|
|
|
|
from .precomputed_exchange_calendar import PrecomputedExchangeCalendar
|
|
|
|
precomputed_ses_holidays = pd.to_datetime(
|
|
[
|
|
"1986-01-01",
|
|
"1986-02-10",
|
|
"1986-02-11",
|
|
"1986-03-28",
|
|
"1986-05-01",
|
|
"1986-05-23",
|
|
"1986-06-09",
|
|
"1986-12-25",
|
|
"1987-01-01",
|
|
"1987-01-29",
|
|
"1987-01-30",
|
|
"1987-05-01",
|
|
"1987-05-12",
|
|
"1987-05-29",
|
|
"1987-08-05",
|
|
"1987-08-10",
|
|
"1987-10-21",
|
|
"1987-12-25",
|
|
"1988-01-01",
|
|
"1988-02-17",
|
|
"1988-02-18",
|
|
"1988-04-01",
|
|
"1988-05-02",
|
|
"1988-05-17",
|
|
"1988-05-30",
|
|
"1988-07-25",
|
|
"1988-08-09",
|
|
"1988-11-08",
|
|
"1988-12-26",
|
|
"1989-01-02",
|
|
"1989-02-06",
|
|
"1989-02-07",
|
|
"1989-03-24",
|
|
"1989-05-01",
|
|
"1989-05-08",
|
|
"1989-05-19",
|
|
"1989-07-13",
|
|
"1989-08-09",
|
|
"1989-12-25",
|
|
"1990-01-01",
|
|
"1990-04-13",
|
|
"1990-04-26",
|
|
"1990-05-01",
|
|
"1990-05-09",
|
|
"1990-07-03",
|
|
"1990-08-09",
|
|
"1990-12-25",
|
|
"1991-01-01",
|
|
"1991-01-15",
|
|
"1991-03-29",
|
|
"1991-04-16",
|
|
"1991-05-01",
|
|
"1991-05-28",
|
|
"1991-06-24",
|
|
"1991-08-09",
|
|
"1991-11-05",
|
|
"1991-12-24",
|
|
"1991-12-25",
|
|
"1991-12-31",
|
|
"1992-01-01",
|
|
"1992-02-04",
|
|
"1992-02-05",
|
|
"1992-04-06",
|
|
"1992-04-17",
|
|
"1992-05-01",
|
|
"1992-06-11",
|
|
"1992-08-10",
|
|
"1992-12-25",
|
|
"1993-01-01",
|
|
"1993-01-25",
|
|
"1993-03-25",
|
|
"1993-04-09",
|
|
"1993-05-06",
|
|
"1993-06-01",
|
|
"1993-08-09",
|
|
"1994-01-10",
|
|
"1994-01-11",
|
|
"1994-02-01",
|
|
"1994-02-11",
|
|
"1994-03-14",
|
|
"1994-04-01",
|
|
"1994-05-02",
|
|
"1994-05-25",
|
|
"1994-08-09",
|
|
"1994-10-13",
|
|
"1994-11-02",
|
|
"1994-12-26",
|
|
"1995-01-02",
|
|
"1995-01-31",
|
|
"1995-02-01",
|
|
"1995-03-03",
|
|
"1995-04-14",
|
|
"1995-05-01",
|
|
"1995-05-10",
|
|
"1995-05-15",
|
|
"1995-08-09",
|
|
"1995-10-23",
|
|
"1995-12-25",
|
|
"1996-01-01",
|
|
"1996-02-19",
|
|
"1996-02-20",
|
|
"1996-02-21",
|
|
"1996-04-05",
|
|
"1996-05-01",
|
|
"1996-05-31",
|
|
"1996-08-09",
|
|
"1996-12-25",
|
|
"1997-01-01",
|
|
"1997-02-07",
|
|
"1997-02-10",
|
|
"1997-03-28",
|
|
"1997-04-18",
|
|
"1997-05-01",
|
|
"1997-05-21",
|
|
"1997-12-25",
|
|
"1998-01-01",
|
|
"1998-01-28",
|
|
"1998-01-29",
|
|
"1998-01-30",
|
|
"1998-04-07",
|
|
"1998-04-10",
|
|
"1998-05-01",
|
|
"1998-05-11",
|
|
"1998-08-10",
|
|
"1998-10-19",
|
|
"1998-12-25",
|
|
"1999-01-01",
|
|
"1999-01-19",
|
|
"1999-02-16",
|
|
"1999-02-17",
|
|
"1999-03-29",
|
|
"1999-04-02",
|
|
"1999-08-09",
|
|
"1999-11-08",
|
|
"1999-12-31",
|
|
"2000-02-07",
|
|
"2000-03-16",
|
|
"2000-04-21",
|
|
"2000-05-01",
|
|
"2000-05-18",
|
|
"2000-08-09",
|
|
"2000-10-26",
|
|
"2000-12-25",
|
|
"2000-12-27",
|
|
"2001-01-01",
|
|
"2001-01-24",
|
|
"2001-01-25",
|
|
"2001-03-06",
|
|
"2001-04-13",
|
|
"2001-05-01",
|
|
"2001-05-07",
|
|
"2001-08-09",
|
|
"2001-11-14",
|
|
"2001-12-17",
|
|
"2001-12-25",
|
|
"2002-01-01",
|
|
"2002-02-12",
|
|
"2002-02-13",
|
|
"2002-03-29",
|
|
"2002-05-01",
|
|
"2002-05-27",
|
|
"2002-08-09",
|
|
"2002-11-04",
|
|
"2002-12-06",
|
|
"2002-12-25",
|
|
"2003-01-01",
|
|
"2003-02-03",
|
|
"2003-02-12",
|
|
"2003-04-18",
|
|
"2003-05-01",
|
|
"2003-05-15",
|
|
"2003-10-24",
|
|
"2003-11-25",
|
|
"2003-12-25",
|
|
"2004-01-01",
|
|
"2004-01-22",
|
|
"2004-01-23",
|
|
"2004-02-02",
|
|
"2004-04-09",
|
|
"2004-06-02",
|
|
"2004-08-09",
|
|
"2004-11-11",
|
|
"2004-11-15",
|
|
"2005-01-21",
|
|
"2005-02-09",
|
|
"2005-02-10",
|
|
"2005-03-25",
|
|
"2005-05-02",
|
|
"2005-05-23",
|
|
"2005-08-09",
|
|
"2005-11-01",
|
|
"2005-11-03",
|
|
"2005-12-26",
|
|
"2006-01-02",
|
|
"2006-01-10",
|
|
"2006-01-30",
|
|
"2006-01-31",
|
|
"2006-04-14",
|
|
"2006-05-01",
|
|
"2006-05-12",
|
|
"2006-08-09",
|
|
"2006-10-24",
|
|
"2006-12-25",
|
|
"2007-01-01",
|
|
"2007-01-02",
|
|
"2007-02-19",
|
|
"2007-02-20",
|
|
"2007-04-06",
|
|
"2007-05-01",
|
|
"2007-05-31",
|
|
"2007-08-09",
|
|
"2007-11-08",
|
|
"2007-12-20",
|
|
"2007-12-25",
|
|
"2008-01-01",
|
|
"2008-02-07",
|
|
"2008-02-08",
|
|
"2008-03-21",
|
|
"2008-05-01",
|
|
"2008-05-19",
|
|
"2008-10-01",
|
|
"2008-10-27",
|
|
"2008-12-08",
|
|
"2008-12-25",
|
|
"2009-01-01",
|
|
"2009-01-26",
|
|
"2009-01-27",
|
|
"2009-04-10",
|
|
"2009-05-01",
|
|
"2009-08-10",
|
|
"2009-09-21",
|
|
"2009-11-27",
|
|
"2009-12-25",
|
|
"2010-01-01",
|
|
"2010-02-15",
|
|
"2010-02-16",
|
|
"2010-04-02",
|
|
"2010-05-28",
|
|
"2010-08-09",
|
|
"2010-09-10",
|
|
"2010-11-05",
|
|
"2010-11-17",
|
|
"2011-02-03",
|
|
"2011-02-04",
|
|
"2011-04-22",
|
|
"2011-05-02",
|
|
"2011-05-17",
|
|
"2011-08-09",
|
|
"2011-08-30",
|
|
"2011-10-26",
|
|
"2011-11-07",
|
|
"2011-12-26",
|
|
"2012-01-02",
|
|
"2012-01-23",
|
|
"2012-01-24",
|
|
"2012-04-06",
|
|
"2012-05-01",
|
|
"2012-08-09",
|
|
"2012-08-20",
|
|
"2012-10-26",
|
|
"2012-11-13",
|
|
"2012-12-25",
|
|
"2013-01-01",
|
|
"2013-02-11",
|
|
"2013-02-12",
|
|
"2013-03-29",
|
|
"2013-05-01",
|
|
"2013-05-24",
|
|
"2013-08-08",
|
|
"2013-08-09",
|
|
"2013-10-15",
|
|
"2013-12-25",
|
|
"2014-01-01",
|
|
"2014-01-31",
|
|
"2014-04-18",
|
|
"2014-05-01",
|
|
"2014-05-13",
|
|
"2014-07-28",
|
|
"2014-10-06",
|
|
"2014-10-22",
|
|
"2014-12-25",
|
|
"2015-01-01",
|
|
"2015-02-19",
|
|
"2015-02-20",
|
|
"2015-04-03",
|
|
"2015-05-01",
|
|
"2015-06-01",
|
|
"2015-07-17",
|
|
"2015-08-07",
|
|
"2015-08-10",
|
|
"2015-09-11",
|
|
"2015-09-24",
|
|
"2015-11-10",
|
|
"2015-12-25",
|
|
"2016-01-01",
|
|
"2016-02-08",
|
|
"2016-02-09",
|
|
"2016-03-25",
|
|
"2016-05-02",
|
|
"2016-07-06",
|
|
"2016-08-09",
|
|
"2016-09-12",
|
|
"2016-12-26",
|
|
"2017-01-02",
|
|
"2017-01-30",
|
|
"2017-04-14",
|
|
"2017-05-01",
|
|
"2017-05-10",
|
|
"2017-06-26",
|
|
"2017-08-09",
|
|
"2017-09-01",
|
|
"2017-10-18",
|
|
"2017-12-25",
|
|
"2018-01-01",
|
|
"2018-02-16",
|
|
"2018-03-30",
|
|
"2018-05-01",
|
|
"2018-05-29",
|
|
"2018-06-15",
|
|
"2018-08-09",
|
|
"2018-08-22",
|
|
"2018-11-06",
|
|
"2018-12-25",
|
|
"2019-01-01",
|
|
"2019-02-05",
|
|
"2019-02-06",
|
|
"2019-04-19",
|
|
"2019-05-01",
|
|
"2019-05-20",
|
|
"2019-06-05",
|
|
"2019-08-09",
|
|
"2019-08-12",
|
|
"2019-10-28",
|
|
"2019-12-25",
|
|
"2020-01-01",
|
|
"2020-01-27",
|
|
"2020-04-10",
|
|
"2020-05-01",
|
|
"2020-05-07",
|
|
"2020-05-25",
|
|
"2020-07-10",
|
|
"2020-07-31",
|
|
"2020-08-10",
|
|
"2020-12-25",
|
|
"2021-01-01", # New Year's Day
|
|
"2021-02-12", # Chinese New Year TODO: 2021-02-11 is half day
|
|
"2021-02-13", # Chinese New Year
|
|
"2021-04-02", # Good Friday
|
|
"2021-05-01", # Labour Day
|
|
"2021-05-13", # Hari Raya Puasa
|
|
"2021-05-26", # Vesak Day
|
|
"2021-07-20", # Hari Raya Haji
|
|
"2021-08-09", # National Day
|
|
"2021-11-04", # Deepavali
|
|
"2021-12-25", # Christmas Day. TODO: 2021-12-24 and 2021-12-31 are half days
|
|
# TODO: Eve of Chinese New Year (2022-01-31) is a half day
|
|
"2022-02-01", # Chinese New Year
|
|
"2022-02-02", # Chinese New Year
|
|
"2022-04-15", # Good Friday
|
|
"2022-05-02", # Labour Day (in lieu)
|
|
"2022-05-03", # Hari Raya Puasa
|
|
"2022-05-16", # Vesak Day (in lieu)
|
|
"2022-07-11", # Hari Raya Haji (in lieu)
|
|
"2022-08-09", # National Day
|
|
"2022-10-24", # Deepavali
|
|
"2022-12-26", # Christmas Day (in lieu)
|
|
"2023-01-02", # New Year's Day (in lieu)
|
|
"2023-01-23", # Chinese New Year
|
|
"2023-01-24", # Chinese New Year
|
|
"2023-04-07", # Good Friday
|
|
# Hari Raya Puasa is on 2023-04-22 (Saturday), and not rolled forward
|
|
"2023-05-01", # Labour Day
|
|
"2023-06-02", # Vesak Day
|
|
"2023-06-29", # Hari Raya Haji
|
|
"2023-08-09", # National Day
|
|
"2023-09-01", # Polling Day
|
|
"2023-11-13", # Deepavali (in lieu)
|
|
"2023-12-25", # Christmas Day
|
|
"2024-01-01", # New Year's Day
|
|
"2024-02-12", # Chinese New Year (in lieu)
|
|
"2024-03-29", # Good Friday
|
|
"2024-04-10", # Hari Raya Puasa
|
|
"2024-05-01", # Labour Day
|
|
"2024-05-22", # Vesak Day
|
|
"2024-06-17", # Hari Raya Haji
|
|
"2024-08-09", # National Day
|
|
"2024-10-31", # Deepavali
|
|
"2024-12-25", # Christmas Day
|
|
"2025-01-01", # New Year's Day
|
|
"2025-01-29", # Chinese New Year
|
|
"2025-01-30", # Chinese New Year
|
|
"2025-03-31", # Hari Raya Puasa
|
|
"2025-04-18", # Good Friday
|
|
"2025-05-01", # Labour Day
|
|
"2025-05-12", # Vesak Day
|
|
"2025-06-07", # Hari Raya Haji
|
|
"2025-08-09", # National Day
|
|
"2025-10-20", # Deepavali
|
|
"2025-12-25", # Christmas Day
|
|
"2026-01-01", # New Year's Day
|
|
"2026-02-17", # Chinese New Year
|
|
"2026-02-18", # Chinese New Year
|
|
"2026-03-21", # Hari Raya Puasa
|
|
"2026-04-03", # Good Friday
|
|
"2026-05-01", # Labour Day
|
|
"2026-05-27", # Hari Raya Haji
|
|
"2026-06-01", # Vesak Day
|
|
"2026-08-10", # National Day
|
|
"2026-11-09", # Deepavali
|
|
"2026-12-25", # Christmas Day
|
|
]
|
|
)
|
|
|
|
|
|
class XSESExchangeCalendar(PrecomputedExchangeCalendar):
|
|
"""
|
|
Exchange calendar for the Singapore Stock Exchange (XSES, SGX).
|
|
|
|
Open time: 9:00 Asia/Singapore
|
|
Close time: 17:00 Asia/Singapore
|
|
|
|
NOTE: For now, we are skipping the intra-day break from 12:00 to 13:00.
|
|
|
|
Due to the complexity around the Singaporean holidays, we are hardcoding
|
|
a list of holidays covering 1986-2021, inclusive.
|
|
|
|
TODO: There are a handful of half-days (day before Chinese New Year,
|
|
Christmas Eve, etc.). We will add those later.
|
|
|
|
References
|
|
----------
|
|
Accessed 2021-06-11 for 2021 holidays:
|
|
https://www.sgx.com/securities/trading#Trading%20Hours%20&%20Opening/Closing%20Routine
|
|
https://www.mom.gov.sg/employment-practices/public-holidays
|
|
"""
|
|
|
|
name = "XSES"
|
|
tz = ZoneInfo("Asia/Singapore")
|
|
open_times = ((None, time(9)),)
|
|
close_times = ((None, time(17, 0)),)
|
|
|
|
@classmethod
|
|
def precomputed_holidays(cls):
|
|
return precomputed_ses_holidays
|