证券交易所日历
项目描述
exchange_calendars
一个用于定义和查询证券交易所日历的Python库。
提供超过50个交易所的日历。如果您还没有找到您需要的日历,请创建一个新的日历!
安装
$ pip install exchange_calendars
快速入门
import exchange_calendars as xcals
获取可用日历列表
>>> xcals.get_calendar_names(include_aliases=False)[5:10]
['CMES', 'IEPA', 'XAMS', 'XASX', 'XBKK']
获取日历
>>> xnys = xcals.get_calendar("XNYS")  # New York Stock Exchange
>>> xhkg = xcals.get_calendar("XHKG")  # Hong Kong Stock Exchange
查询时间表
>>> xhkg.schedule.loc["2021-12-29":"2022-01-04"]
| open | break_start | break_end | close | |
|---|---|---|---|---|
| 2021-12-29 | 2021-12-29 01:30:00+00:00 | 2021-12-29 04:00:00+00:00 | 2021-12-29 05:00:00+00:00 | 2021-12-29 08:00:00+00:00 | 
| 2021-12-30 | 2021-12-30 01:30:00+00:00 | 2021-12-30 04:00:00+00:00 | 2021-12-30 05:00:00+00:00 | 2021-12-30 08:00:00+00:00 | 
| 2021-12-31 | 2021-12-31 01:30:00+00:00 | NaT | NaT | 2021-12-31 04:00:00+00:00 | 
| 2022-01-03 | 2022-01-03 01:30:00+00:00 | 2022-01-03 04:00:00+00:00 | 2022-01-03 05:00:00+00:00 | 2022-01-03 08:00:00+00:00 | 
| 2022-01-04 | 2022-01-04 01:30:00+00:00 | 2022-01-04 04:00:00+00:00 | 2022-01-04 05:00:00+00:00 | 2022-01-04 08:00:00+00:00 | 
与会话一起工作
>>> xnys.is_session("2022-01-01")
False
>>> xnys.sessions_in_range("2022-01-01", "2022-01-11")
DatetimeIndex(['2022-01-03', '2022-01-04', '2022-01-05', '2022-01-06',
               '2022-01-07', '2022-01-10', '2022-01-11'],
              dtype='datetime64[ns]', freq='C')
>>> xnys.sessions_window("2022-01-03", 7)
DatetimeIndex(['2022-01-03', '2022-01-04', '2022-01-05', '2022-01-06',
               '2022-01-07', '2022-01-10', '2022-01-11'],
              dtype='datetime64[ns]', freq='C')
>>> xnys.date_to_session("2022-01-01", direction="next")
Timestamp('2022-01-03 00:00:00', freq='C')
>>> xnys.previous_session("2022-01-11")
Timestamp('2022-01-10 00:00:00', freq='C')
>>> xhkg.trading_index(
...     "2021-12-30", "2021-12-31", period="90min", force=True
... )
IntervalIndex([[2021-12-30 01:30:00, 2021-12-30 03:00:00), [2021-12-30 03:00:00, 2021-12-30 04:00:00), [2021-12-30 05:00:00, 2021-12-30 06:30:00), [2021-12-30 06:30:00, 2021-12-30 08:00:00), [2021-12-31 01:30:00, 2021-12-31 03:00:00), [2021-12-31 03:00:00, 2021-12-31 04:00:00)], dtype='interval[datetime64[ns, UTC], left]')
请参阅会话教程以深入了解会话。
与分钟一起工作
>>> xhkg.session_minutes("2022-01-03")
DatetimeIndex(['2022-01-03 01:30:00+00:00', '2022-01-03 01:31:00+00:00',
               '2022-01-03 01:32:00+00:00', '2022-01-03 01:33:00+00:00',
               '2022-01-03 01:34:00+00:00', '2022-01-03 01:35:00+00:00',
               '2022-01-03 01:36:00+00:00', '2022-01-03 01:37:00+00:00',
               '2022-01-03 01:38:00+00:00', '2022-01-03 01:39:00+00:00',
               ...
               '2022-01-03 07:50:00+00:00', '2022-01-03 07:51:00+00:00',
               '2022-01-03 07:52:00+00:00', '2022-01-03 07:53:00+00:00',
               '2022-01-03 07:54:00+00:00', '2022-01-03 07:55:00+00:00',
               '2022-01-03 07:56:00+00:00', '2022-01-03 07:57:00+00:00',
               '2022-01-03 07:58:00+00:00', '2022-01-03 07:59:00+00:00'],
              dtype='datetime64[ns, UTC]', length=330, freq=None)
>>> mins = [ "2022-01-03 " + tm for tm in ["01:29", "01:30", "04:20", "07:59", "08:00"] ]
>>> [ xhkg.is_trading_minute(minute) for minute in mins ]
[False, True, False, True, False]  # by default minutes are closed on the left side
>>> xhkg.is_break_minute("2022-01-03 04:20")
True
>>> xhkg.previous_close("2022-01-03 08:10")
Timestamp('2022-01-03 08:00:00+0000', tz='UTC')
>>> xhkg.previous_minute("2022-01-03 08:10")
Timestamp('2022-01-03 07:59:00+0000', tz='UTC')
请参阅分钟教程以深入了解“分钟”的概念以及“side”选项如何确定哪些分钟被视为交易分钟。
教程
- sessions.ipynb - 所有关于会话的内容。
- minutes.ipynb - 所有关于分钟的内容。不要错过这个!
- calendar_properties.ipynb - 日历构建及浏览日程安排和其他所有日历属性。
- calendar_methods.ipynb - 浏览所有可用来查询日历的方法。
- trading_index.ipynb - 一种值得单独教程的方法。
希望您会发现 exchange_calendars 拥有您需要的获取所需信息的方法。如果没有,请提交PR或提出问题并告诉我们!
命令行使用
从命令行直接打印类似unix-cal的日历(假日用括号表示)...
ecal XNYS 2020
                                        2020
        January                        February                        March
Su  Mo  Tu  We  Th  Fr  Sa     Su  Mo  Tu  We  Th  Fr  Sa     Su  Mo  Tu  We  Th  Fr  Sa
            [ 1]  2   3 [ 4]                           [ 1]
[ 5]  6   7   8   9  10 [11]   [ 2]  3   4   5   6   7 [ 8]   [ 1]  2   3   4   5   6 [ 7]
[12] 13  14  15  16  17 [18]   [ 9] 10  11  12  13  14 [15]   [ 8]  9  10  11  12  13 [14]
[19][20] 21  22  23  24 [25]   [16][17] 18  19  20  21 [22]   [15] 16  17  18  19  20 [21]
[26] 27  28  29  30  31        [23] 24  25  26  27  28 [29]   [22] 23  24  25  26  27 [28]
                                                              [29] 30  31
        April                           May                            June
Su  Mo  Tu  We  Th  Fr  Sa     Su  Mo  Tu  We  Th  Fr  Sa     Su  Mo  Tu  We  Th  Fr  Sa
              1   2   3 [ 4]                         1 [ 2]         1   2   3   4   5 [ 6]
[ 5]  6   7   8   9 [10][11]   [ 3]  4   5   6   7   8 [ 9]   [ 7]  8   9  10  11  12 [13]
[12] 13  14  15  16  17 [18]   [10] 11  12  13  14  15 [16]   [14] 15  16  17  18  19 [20]
[19] 20  21  22  23  24 [25]   [17] 18  19  20  21  22 [23]   [21] 22  23  24  25  26 [27]
[26] 27  28  29  30            [24][25] 26  27  28  29 [30]   [28] 29  30
                               [31]
            July                          August                       September
Su  Mo  Tu  We  Th  Fr  Sa     Su  Mo  Tu  We  Th  Fr  Sa     Su  Mo  Tu  We  Th  Fr  Sa
              1   2 [ 3][ 4]                           [ 1]             1   2   3   4 [ 5]
[ 5]  6   7   8   9  10 [11]   [ 2]  3   4   5   6   7 [ 8]   [ 6][ 7]  8   9  10  11 [12]
[12] 13  14  15  16  17 [18]   [ 9] 10  11  12  13  14 [15]   [13] 14  15  16  17  18 [19]
[19] 20  21  22  23  24 [25]   [16] 17  18  19  20  21 [22]   [20] 21  22  23  24  25 [26]
[26] 27  28  29  30  31        [23] 24  25  26  27  28 [29]   [27] 28  29  30
                               [30] 31
        October                        November                       December
Su  Mo  Tu  We  Th  Fr  Sa     Su  Mo  Tu  We  Th  Fr  Sa     Su  Mo  Tu  We  Th  Fr  Sa
                  1   2 [ 3]                                            1   2   3   4 [ 5]
[ 4]  5   6   7   8   9 [10]   [ 1]  2   3   4   5   6 [ 7]   [ 6]  7   8   9  10  11 [12]
[11] 12  13  14  15  16 [17]   [ 8]  9  10  11  12  13 [14]   [13] 14  15  16  17  18 [19]
[18] 19  20  21  22  23 [24]   [15] 16  17  18  19  20 [21]   [20] 21  22  23  24 [25][26]
[25] 26  27  28  29  30 [31]   [22] 23  24  25 [26] 27 [28]   [27] 28  29  30  31
                               [29] 30
ecal XNYS 1 2020
        January 2020
Su  Mo  Tu  We  Th  Fr  Sa
            [ 1]  2   3 [ 4]
[ 5]  6   7   8   9  10 [11]
[12] 13  14  15  16  17 [18]
[19][20] 21  22  23  24 [25]
[26] 27  28  29  30  31
常见问题解答
我该如何创建一个新的日历?
首先,确保您想要的日历尚未定义;exchange calendars自带超过50个预定义的日历,包括主要证券交易所。
如果您找不到所需的内容,可以创建一个自定义日历,作为ExchangeCalendar的子类。该工作流程描述了将新日历添加到exchange_calendars的过程。只需遵循相关部分。
要通过get_calendar访问新日历,请调用xcals.register_calendar或xcals.register_calendar_type,分别注册特定日历实例或日历工厂(即子类)。
我可以为exchange calendars贡献一个新的日历吗?
当然可以!工作流程可以在这里找到。
<calendar>缺少假日、时间错误、应该休息等...
所有的exchange calendars都由用户贡献维护。如果您关心的日历需要修订,请打开PR - 这就是其运作方式!(从未为项目做出过贡献,而且一切似乎都有些令人畏惧?查看这里并回头吧!)
您可以在这里找到修改现有日历的工作流程。
哪些时间被认为是开放和关闭的?
exchange_calendars尝试广泛地有用,认为只有在正常交易期间才将交易所视为开放。在任何预交易、后交易或拍卖期间,交易所被视为关闭。交易所还在任何观察到的午休期间被视为关闭。
有关交易所被认为是开放的详细分钟数,请参阅分钟教程。如果您之前使用过trading_calendars或3.4版本之前的exchange_calendars,那么这是寻找随着时间的推移交易分钟定义如何变化的答案的地方(现在是稳定和灵活的!)
日历
请注意,交易所日历是由其ISO-10383市场标识码定义的。
市场价格
大多数v3版本的exchange_calendars开发是由market_prices库推动的。如果您喜欢使用exchange_calendars创建有意义的OHLCV数据集的想法,请查看它!它可以直接使用免费数据!
弃用和重命名
版本4.0.3中重命名,版本4.3中删除的方法
| 旧名称 | 新名称 | 
|---|---|
| bound_start | bound_min | 
| bound_end | bound_max | 
版本4.0中弃用,版本4.3中删除的方法
| 弃用方法 | 原因 | 
|---|---|
| sessions_closes | 使用 .closes[start:end] | 
| sessions_opens | 使用 .opens[start:end] | 
参数重命名的版本4.0中的方法
| 方法 | 
|---|
| is_session | 
| is_open_on_minute | 
| minutes_in_range | 
| minutes_window | 
| next_close | 
| next_minute | 
| next_open | 
| previous_close | 
| previous_minute | 
| previous_open | 
| session_break_end | 
| session_break_start | 
| session_close | 
| session_open | 
| sessions_in_range | 
| sessions_window | 
版本3.4中重命名,版本4.0中删除的方法
| 旧名称 | 新名称 | 
|---|---|
| all_minutes | minutes | 
| all_minutes_nanos | minutes_nanos | 
| all_sessions | sessions | 
| break_start_and_end_for_session | session_break_start_end | 
| date_to_session_label | date_to_session | 
| first_trading_minute | first_minute | 
| first_trading_session | first_session | 
| has_breaks | sessions_has_break | 
| last_trading_minute | last_minute | 
| last_trading_session | last_session | 
| next_session_label | next_session | 
| open_and_close_for_session | session_open_close | 
| previous_session_label | previous_session | 
| market_break_ends_nanos | break_ends_nanos | 
| market_break_starts_nanos | break_starts_nanos | 
| market_closes_nanos | closes_nanos | 
| market_opens_nanos | opens_nanos | 
| minute_index_to_session_labels | minutes_to_sessions | 
| minute_to_session_label | minute_to_session | 
| minutes_count_for_sessions_in_range | sessions_minutes_count | 
| minutes_for_session | session_minutes | 
| minutes_for_sessions_in_range | sessions_minutes | 
| session_closes_in_range | sessions_closes | 
| session_distance | sessions_distance | 
| session_opens_in_range | sessions_opens | 
版本3.4中弃用,版本4.0中删除的其他方法
| 删除方法 | 
|---|
| execution_minute_for_session | 
| execution_minute_for_sessions_in_range | 
| execution_time_from_close | 
| execution_time_from_open | 
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。
源分发
构建分发
exchange_calendars-4.5.6.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 5db77178cf849f81dd6dcc99995e2163b928c0f45dcd0a2c395958beb1dbb145 | |
| MD5 | d4f5dfcb1d9462f0c9ab5f7cff624767 | |
| BLAKE2b-256 | b671bd708daa5c1765de54e53adb8f032727bb589196db3d100369305a1d4a7d | 
exchange_calendars-4.5.6-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 5abf5ebcb8ceef0ced36fe4e20071d42517091bf081e6c44354cb343009d672b | |
| MD5 | b1d82a35fa7d07b2abf5166d69c5c69b | |
| BLAKE2b-256 | 7e8ff3303c61b8e925ded53f37b3bb3365e349449ef40b687e39cd7b59f87d14 |