证券交易所日历
项目描述
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 |