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,直连正常
648 lines
14 KiB
Python
648 lines
14 KiB
Python
from datetime import time
|
|
from zoneinfo import ZoneInfo
|
|
|
|
import pandas as pd
|
|
|
|
from .precomputed_exchange_calendar import PrecomputedExchangeCalendar
|
|
|
|
precomputed_shanghai_holidays = pd.to_datetime(
|
|
[
|
|
"1991-01-01",
|
|
"1991-02-15",
|
|
"1991-02-18",
|
|
"1991-05-01",
|
|
"1991-10-01",
|
|
"1991-10-02",
|
|
"1992-01-01",
|
|
"1992-02-04",
|
|
"1992-02-05",
|
|
"1992-02-06",
|
|
"1992-05-01",
|
|
"1992-10-01",
|
|
"1992-10-02",
|
|
"1993-01-01",
|
|
"1993-01-25",
|
|
"1993-01-26",
|
|
"1993-10-01",
|
|
"1994-02-07",
|
|
"1994-02-08",
|
|
"1994-02-09",
|
|
"1994-02-10",
|
|
"1994-02-11",
|
|
"1994-05-02",
|
|
"1994-10-03",
|
|
"1994-10-04",
|
|
"1995-01-02",
|
|
"1995-01-30",
|
|
"1995-01-31",
|
|
"1995-02-01",
|
|
"1995-02-02",
|
|
"1995-02-03",
|
|
"1995-05-01",
|
|
"1995-10-02",
|
|
"1995-10-03",
|
|
"1996-01-01",
|
|
"1996-02-19",
|
|
"1996-02-20",
|
|
"1996-02-21",
|
|
"1996-02-22",
|
|
"1996-02-23",
|
|
"1996-02-26",
|
|
"1996-02-27",
|
|
"1996-02-28",
|
|
"1996-02-29",
|
|
"1996-03-01",
|
|
"1996-05-01",
|
|
"1996-09-30",
|
|
"1996-10-01",
|
|
"1996-10-02",
|
|
"1997-01-01",
|
|
"1997-02-03",
|
|
"1997-02-04",
|
|
"1997-02-05",
|
|
"1997-02-06",
|
|
"1997-02-07",
|
|
"1997-02-10",
|
|
"1997-02-11",
|
|
"1997-02-12",
|
|
"1997-02-13",
|
|
"1997-02-14",
|
|
"1997-05-01",
|
|
"1997-05-02",
|
|
"1997-06-30",
|
|
"1997-07-01",
|
|
"1997-10-01",
|
|
"1997-10-02",
|
|
"1997-10-03",
|
|
"1998-01-01",
|
|
"1998-01-02",
|
|
"1998-01-26",
|
|
"1998-01-27",
|
|
"1998-01-28",
|
|
"1998-01-29",
|
|
"1998-01-30",
|
|
"1998-02-02",
|
|
"1998-02-03",
|
|
"1998-02-04",
|
|
"1998-02-05",
|
|
"1998-02-06",
|
|
"1998-05-01",
|
|
"1998-10-01",
|
|
"1998-10-02",
|
|
"1999-01-01",
|
|
"1999-02-10",
|
|
"1999-02-11",
|
|
"1999-02-12",
|
|
"1999-02-15",
|
|
"1999-02-16",
|
|
"1999-02-17",
|
|
"1999-02-18",
|
|
"1999-02-19",
|
|
"1999-02-22",
|
|
"1999-02-23",
|
|
"1999-02-24",
|
|
"1999-02-25",
|
|
"1999-02-26",
|
|
"1999-05-03",
|
|
"1999-10-01",
|
|
"1999-10-04",
|
|
"1999-10-05",
|
|
"1999-10-06",
|
|
"1999-10-07",
|
|
"1999-12-20",
|
|
"1999-12-31",
|
|
"2000-01-03",
|
|
"2000-01-31",
|
|
"2000-02-01",
|
|
"2000-02-02",
|
|
"2000-02-03",
|
|
"2000-02-04",
|
|
"2000-02-07",
|
|
"2000-02-08",
|
|
"2000-02-09",
|
|
"2000-02-10",
|
|
"2000-02-11",
|
|
"2000-05-01",
|
|
"2000-05-02",
|
|
"2000-05-03",
|
|
"2000-05-04",
|
|
"2000-05-05",
|
|
"2000-10-02",
|
|
"2000-10-03",
|
|
"2000-10-04",
|
|
"2000-10-05",
|
|
"2000-10-06",
|
|
"2001-01-01",
|
|
"2001-01-22",
|
|
"2001-01-23",
|
|
"2001-01-24",
|
|
"2001-01-25",
|
|
"2001-01-26",
|
|
"2001-01-29",
|
|
"2001-01-30",
|
|
"2001-01-31",
|
|
"2001-02-01",
|
|
"2001-02-02",
|
|
"2001-05-01",
|
|
"2001-05-02",
|
|
"2001-05-03",
|
|
"2001-05-04",
|
|
"2001-05-07",
|
|
"2001-10-01",
|
|
"2001-10-02",
|
|
"2001-10-03",
|
|
"2001-10-04",
|
|
"2001-10-05",
|
|
"2002-01-01",
|
|
"2002-01-02",
|
|
"2002-01-03",
|
|
"2002-02-11",
|
|
"2002-02-12",
|
|
"2002-02-13",
|
|
"2002-02-14",
|
|
"2002-02-15",
|
|
"2002-02-18",
|
|
"2002-02-19",
|
|
"2002-02-20",
|
|
"2002-02-21",
|
|
"2002-02-22",
|
|
"2002-05-01",
|
|
"2002-05-02",
|
|
"2002-05-03",
|
|
"2002-05-06",
|
|
"2002-05-07",
|
|
"2002-09-30",
|
|
"2002-10-01",
|
|
"2002-10-02",
|
|
"2002-10-03",
|
|
"2002-10-04",
|
|
"2002-10-07",
|
|
"2003-01-01",
|
|
"2003-01-30",
|
|
"2003-01-31",
|
|
"2003-02-03",
|
|
"2003-02-04",
|
|
"2003-02-05",
|
|
"2003-02-06",
|
|
"2003-02-07",
|
|
"2003-05-01",
|
|
"2003-05-02",
|
|
"2003-05-05",
|
|
"2003-05-06",
|
|
"2003-05-07",
|
|
"2003-05-08",
|
|
"2003-05-09",
|
|
"2003-10-01",
|
|
"2003-10-02",
|
|
"2003-10-03",
|
|
"2003-10-06",
|
|
"2003-10-07",
|
|
"2004-01-01",
|
|
"2004-01-19",
|
|
"2004-01-20",
|
|
"2004-01-21",
|
|
"2004-01-22",
|
|
"2004-01-23",
|
|
"2004-01-26",
|
|
"2004-01-27",
|
|
"2004-01-28",
|
|
"2004-05-03",
|
|
"2004-05-04",
|
|
"2004-05-05",
|
|
"2004-05-06",
|
|
"2004-05-07",
|
|
"2004-10-01",
|
|
"2004-10-04",
|
|
"2004-10-05",
|
|
"2004-10-06",
|
|
"2004-10-07",
|
|
"2005-01-03",
|
|
"2005-02-07",
|
|
"2005-02-08",
|
|
"2005-02-09",
|
|
"2005-02-10",
|
|
"2005-02-11",
|
|
"2005-02-14",
|
|
"2005-02-15",
|
|
"2005-05-02",
|
|
"2005-05-03",
|
|
"2005-05-04",
|
|
"2005-05-05",
|
|
"2005-05-06",
|
|
"2005-10-03",
|
|
"2005-10-04",
|
|
"2005-10-05",
|
|
"2005-10-06",
|
|
"2005-10-07",
|
|
"2006-01-02",
|
|
"2006-01-03",
|
|
"2006-01-26",
|
|
"2006-01-27",
|
|
"2006-01-30",
|
|
"2006-01-31",
|
|
"2006-02-01",
|
|
"2006-02-02",
|
|
"2006-02-03",
|
|
"2006-05-01",
|
|
"2006-05-02",
|
|
"2006-05-03",
|
|
"2006-05-04",
|
|
"2006-05-05",
|
|
"2006-10-02",
|
|
"2006-10-03",
|
|
"2006-10-04",
|
|
"2006-10-05",
|
|
"2006-10-06",
|
|
"2007-01-01",
|
|
"2007-01-02",
|
|
"2007-01-03",
|
|
"2007-02-19",
|
|
"2007-02-20",
|
|
"2007-02-21",
|
|
"2007-02-22",
|
|
"2007-02-23",
|
|
"2007-05-01",
|
|
"2007-05-02",
|
|
"2007-05-03",
|
|
"2007-05-04",
|
|
"2007-05-07",
|
|
"2007-10-01",
|
|
"2007-10-02",
|
|
"2007-10-03",
|
|
"2007-10-04",
|
|
"2007-10-05",
|
|
"2007-12-31",
|
|
"2008-01-01",
|
|
"2008-02-06",
|
|
"2008-02-07",
|
|
"2008-02-08",
|
|
"2008-02-11",
|
|
"2008-02-12",
|
|
"2008-04-04",
|
|
"2008-05-01",
|
|
"2008-05-02",
|
|
"2008-06-09",
|
|
"2008-09-15",
|
|
"2008-09-29",
|
|
"2008-09-30",
|
|
"2008-10-01",
|
|
"2008-10-02",
|
|
"2008-10-03",
|
|
"2009-01-01",
|
|
"2009-01-02",
|
|
"2009-01-26",
|
|
"2009-01-27",
|
|
"2009-01-28",
|
|
"2009-01-29",
|
|
"2009-01-30",
|
|
"2009-04-06",
|
|
"2009-05-01",
|
|
"2009-05-28",
|
|
"2009-05-29",
|
|
"2009-10-01",
|
|
"2009-10-02",
|
|
"2009-10-05",
|
|
"2009-10-06",
|
|
"2009-10-07",
|
|
"2009-10-08",
|
|
"2010-01-01",
|
|
"2010-02-15",
|
|
"2010-02-16",
|
|
"2010-02-17",
|
|
"2010-02-18",
|
|
"2010-02-19",
|
|
"2010-04-05",
|
|
"2010-05-03",
|
|
"2010-06-14",
|
|
"2010-06-15",
|
|
"2010-06-16",
|
|
"2010-09-22",
|
|
"2010-09-23",
|
|
"2010-09-24",
|
|
"2010-10-01",
|
|
"2010-10-04",
|
|
"2010-10-05",
|
|
"2010-10-06",
|
|
"2010-10-07",
|
|
"2011-01-03",
|
|
"2011-02-02",
|
|
"2011-02-03",
|
|
"2011-02-04",
|
|
"2011-02-07",
|
|
"2011-02-08",
|
|
"2011-04-04",
|
|
"2011-04-05",
|
|
"2011-05-02",
|
|
"2011-06-06",
|
|
"2011-09-12",
|
|
"2011-10-03",
|
|
"2011-10-04",
|
|
"2011-10-05",
|
|
"2011-10-06",
|
|
"2011-10-07",
|
|
"2012-01-02",
|
|
"2012-01-03",
|
|
"2012-01-23",
|
|
"2012-01-24",
|
|
"2012-01-25",
|
|
"2012-01-26",
|
|
"2012-01-27",
|
|
"2012-04-02",
|
|
"2012-04-03",
|
|
"2012-04-04",
|
|
"2012-04-30",
|
|
"2012-05-01",
|
|
"2012-06-22",
|
|
"2012-10-01",
|
|
"2012-10-02",
|
|
"2012-10-03",
|
|
"2012-10-04",
|
|
"2012-10-05",
|
|
"2013-01-01",
|
|
"2013-01-02",
|
|
"2013-01-03",
|
|
"2013-02-11",
|
|
"2013-02-12",
|
|
"2013-02-13",
|
|
"2013-02-14",
|
|
"2013-02-15",
|
|
"2013-04-04",
|
|
"2013-04-05",
|
|
"2013-04-29",
|
|
"2013-04-30",
|
|
"2013-05-01",
|
|
"2013-06-10",
|
|
"2013-06-11",
|
|
"2013-06-12",
|
|
"2013-09-19",
|
|
"2013-09-20",
|
|
"2013-10-01",
|
|
"2013-10-02",
|
|
"2013-10-03",
|
|
"2013-10-04",
|
|
"2013-10-07",
|
|
"2014-01-01",
|
|
"2014-01-31",
|
|
"2014-02-03",
|
|
"2014-02-04",
|
|
"2014-02-05",
|
|
"2014-02-06",
|
|
"2014-04-07",
|
|
"2014-05-01",
|
|
"2014-05-02",
|
|
"2014-06-02",
|
|
"2014-09-08",
|
|
"2014-10-01",
|
|
"2014-10-02",
|
|
"2014-10-03",
|
|
"2014-10-06",
|
|
"2014-10-07",
|
|
"2015-01-01",
|
|
"2015-01-02",
|
|
"2015-02-18",
|
|
"2015-02-19",
|
|
"2015-02-20",
|
|
"2015-02-23",
|
|
"2015-02-24",
|
|
"2015-04-06",
|
|
"2015-05-01",
|
|
"2015-06-22",
|
|
"2015-09-03",
|
|
"2015-09-04",
|
|
"2015-10-01",
|
|
"2015-10-02",
|
|
"2015-10-05",
|
|
"2015-10-06",
|
|
"2015-10-07",
|
|
"2016-01-01",
|
|
"2016-02-08",
|
|
"2016-02-09",
|
|
"2016-02-10",
|
|
"2016-02-11",
|
|
"2016-02-12",
|
|
"2016-04-04",
|
|
"2016-05-02",
|
|
"2016-06-09",
|
|
"2016-06-10",
|
|
"2016-09-15",
|
|
"2016-09-16",
|
|
"2016-10-03",
|
|
"2016-10-04",
|
|
"2016-10-05",
|
|
"2016-10-06",
|
|
"2016-10-07",
|
|
"2017-01-02",
|
|
"2017-01-27",
|
|
"2017-01-30",
|
|
"2017-01-31",
|
|
"2017-02-01",
|
|
"2017-02-02",
|
|
"2017-04-03",
|
|
"2017-04-04",
|
|
"2017-05-01",
|
|
"2017-05-29",
|
|
"2017-05-30",
|
|
"2017-10-02",
|
|
"2017-10-03",
|
|
"2017-10-04",
|
|
"2017-10-05",
|
|
"2017-10-06",
|
|
"2018-01-01",
|
|
"2018-02-15",
|
|
"2018-02-16",
|
|
"2018-02-19",
|
|
"2018-02-20",
|
|
"2018-02-21",
|
|
"2018-04-05",
|
|
"2018-04-06",
|
|
"2018-04-30",
|
|
"2018-05-01",
|
|
"2018-06-18",
|
|
"2018-09-24",
|
|
"2018-10-01",
|
|
"2018-10-02",
|
|
"2018-10-03",
|
|
"2018-10-04",
|
|
"2018-10-05",
|
|
"2018-12-31",
|
|
"2019-01-01",
|
|
"2019-02-04",
|
|
"2019-02-05",
|
|
"2019-02-06",
|
|
"2019-02-07",
|
|
"2019-02-08",
|
|
"2019-04-05",
|
|
"2019-05-01",
|
|
"2019-05-02",
|
|
"2019-05-03",
|
|
"2019-06-07",
|
|
"2019-09-13",
|
|
"2019-10-01",
|
|
"2019-10-02",
|
|
"2019-10-03",
|
|
"2019-10-04",
|
|
"2019-10-07",
|
|
"2020-01-01",
|
|
"2020-01-24",
|
|
"2020-01-27",
|
|
"2020-01-28",
|
|
"2020-01-29",
|
|
"2020-01-30",
|
|
"2020-01-31", # http://english.sse.com.cn/news/newsrelease/c/4993503.shtml
|
|
"2020-04-06",
|
|
"2020-05-01",
|
|
"2020-05-04",
|
|
"2020-05-05",
|
|
"2020-06-25",
|
|
"2020-06-26",
|
|
"2020-10-01",
|
|
"2020-10-02",
|
|
"2020-10-05",
|
|
"2020-10-06",
|
|
"2020-10-07",
|
|
"2020-10-08",
|
|
"2021-01-01",
|
|
"2021-02-11",
|
|
"2021-02-12",
|
|
"2021-02-15",
|
|
"2021-02-16",
|
|
"2021-02-17",
|
|
"2021-04-05",
|
|
"2021-05-03",
|
|
"2021-05-04",
|
|
"2021-05-05",
|
|
"2021-06-14",
|
|
"2021-09-20",
|
|
"2021-09-21",
|
|
"2021-10-01",
|
|
"2021-10-04",
|
|
"2021-10-05",
|
|
"2021-10-06",
|
|
"2021-10-07",
|
|
"2022-01-03",
|
|
"2022-01-31",
|
|
"2022-02-01",
|
|
"2022-02-02",
|
|
"2022-02-03",
|
|
"2022-02-04",
|
|
"2022-04-04",
|
|
"2022-04-05",
|
|
"2022-05-02",
|
|
"2022-05-03",
|
|
"2022-05-04",
|
|
"2022-06-03",
|
|
"2022-09-12",
|
|
"2022-10-03",
|
|
"2022-10-04",
|
|
"2022-10-05",
|
|
"2022-10-06",
|
|
"2022-10-07",
|
|
"2023-01-02",
|
|
"2023-01-23",
|
|
"2023-01-24",
|
|
"2023-01-25",
|
|
"2023-01-26",
|
|
"2023-01-27",
|
|
"2023-04-05",
|
|
"2023-05-01",
|
|
"2023-05-02",
|
|
"2023-05-03",
|
|
"2023-06-22",
|
|
"2023-06-23",
|
|
"2023-09-29",
|
|
"2023-10-02",
|
|
"2023-10-03",
|
|
"2023-10-04",
|
|
"2023-10-05",
|
|
"2023-10-06",
|
|
"2024-01-01", # 2024 holidays https://www.gov.cn/zhengce/content/202310/content_6911527.htm
|
|
"2024-02-09", # http://english.sse.com.cn/start/trading/schedule/
|
|
"2024-02-12",
|
|
"2024-02-13",
|
|
"2024-02-14",
|
|
"2024-02-15",
|
|
"2024-02-16",
|
|
"2024-04-04",
|
|
"2024-04-05",
|
|
"2024-05-01",
|
|
"2024-05-02",
|
|
"2024-05-03",
|
|
"2024-06-10",
|
|
"2024-09-16",
|
|
"2024-09-17",
|
|
"2024-10-01",
|
|
"2024-10-02",
|
|
"2024-10-03",
|
|
"2024-10-04",
|
|
"2024-10-07",
|
|
"2025-01-01",
|
|
"2025-01-28",
|
|
"2025-01-29",
|
|
"2025-01-30",
|
|
"2025-01-31",
|
|
"2025-02-03",
|
|
"2025-02-04",
|
|
"2025-04-04",
|
|
"2025-05-01",
|
|
"2025-05-02",
|
|
"2025-05-05",
|
|
"2025-06-02",
|
|
"2025-10-01",
|
|
"2025-10-02",
|
|
"2025-10-03",
|
|
"2025-10-06",
|
|
"2025-10-07",
|
|
"2025-10-08",
|
|
# 2026 holidays - https://www.sse.com.cn/disclosure/announcement/general/c/c_20251222_10802507.shtml
|
|
"2026-01-01",
|
|
"2026-01-02",
|
|
"2026-02-16",
|
|
"2026-02-17",
|
|
"2026-02-18",
|
|
"2026-02-19",
|
|
"2026-02-20",
|
|
"2026-02-23",
|
|
"2026-04-06",
|
|
"2026-05-01",
|
|
"2026-05-04",
|
|
"2026-05-05",
|
|
"2026-06-19",
|
|
"2026-09-25",
|
|
"2026-10-01",
|
|
"2026-10-02",
|
|
"2026-10-05",
|
|
"2026-10-06",
|
|
"2026-10-07",
|
|
]
|
|
)
|
|
|
|
|
|
class XSHGExchangeCalendar(PrecomputedExchangeCalendar):
|
|
"""
|
|
Exchange calendar for the Shanghai Stock Exchange (XSHG, XSSC, SSE).
|
|
http://english.sse.com.cn/start/trading/schedule/
|
|
|
|
Open time: 9:30 Asia/Shanghai
|
|
Lunch break: 11:30 - 13:00 Asia/Shanghai
|
|
Close time: 15:00 Asia/Shanghai
|
|
|
|
Due to the complexity around the Shanghai exchange holidays, we are
|
|
hardcoding a list of holidays covering 1999-2026, inclusive. There are
|
|
no known early closes or late opens.
|
|
"""
|
|
|
|
name = "XSHG"
|
|
tz = ZoneInfo("Asia/Shanghai")
|
|
open_times = ((None, time(9, 30)),)
|
|
break_start_times = ((None, time(11, 30)),)
|
|
break_end_times = ((None, time(13, 0)),)
|
|
close_times = ((None, time(15, 0)),)
|
|
|
|
@classmethod
|
|
def precomputed_holidays(cls):
|
|
return precomputed_shanghai_holidays
|
|
|
|
@classmethod
|
|
def bound_min(cls) -> pd.Timestamp:
|
|
return pd.Timestamp("1990-12-03")
|