0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用Python获得市场的交易日历

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-21 10:37 次阅读

Exchange_calendars 是一个用于查询证券交易日历的 Python 库。开箱即用,内含世界50+个交易所的交易日历,包括中国市场和港股市场,非常方便。

同时,如果你找到了Exchange_calendars 上没有的市场的交易日历,可以向他们提交PR,创建一个新的交易所日历:
https://github.com/gerrymanoim/exchange_calendars

注意,本模块最低支持的Python版本为3.8.

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

**(可选1) **如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

**(可选2) **此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南

请选择以下任一种方式输入命令安装依赖

  1. Windows 环境 打开 Cmd (开始-运行-CMD)。
  2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
  3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install exchange_calendars

2.基本使用

获取可用日历的列表:

import exchange_calendars as xcals
print(xcals.get_calendar_names(include_aliases=False))

结果如下:

['24/5', '24/7', 'AIXK', 'ASEX', 'BVMF', 'CMES', 'IEPA', 'XAMS', 'XASX', 'XBKK', 'XBOG', 'XBOM', 'XBRU', 'XBSE', 'XBUD', 'XBUE', 'XCBF', 'XCSE', 'XDUB', 'XETR', 'XFRA', 'XHEL', 'XHKG', 'XICE', 'XIDX', 'XIST', 'XJSE', 'XKAR', 'XKLS', 'XKRX', 'XLIM', 'XLIS', 'XLON', 'XMAD', 'XMEX', 'XMIL', 'XMOS', 'XNYS', 'XNZE', 'XOSL', 'XPAR', 'XPHS', 'XPRA', 'XSES', 'XSGO', 'XSHG', 'XSTO', 'XSWX', 'XTAE', 'XTAI', 'XTKS', 'XTSE', 'XWAR', 'XWBO', 'us_futures']

其中,XSHG就是中国的沪市、XHKG就是港股。

获取沪市日历:

import exchange_calendars as xcals
xshg = xcals.get_calendar("XSHG")

查询某个区间日程市场是否有开盘:

import exchange_calendars as xcals
xshg = xcals.get_calendar("XSHG")
print(xshg.schedule.loc["2021-12-29":"2022-08-12"])

效果如下:

open               break_start                 break_end                     close
2021-12-29 2021-12-29 01:30:00+00:00 2021-12-29 03:30:00+00:00 2021-12-29 05:00:00+00:00 2021-12-29 07:00:00+00:00
2021-12-30 2021-12-30 01:30:00+00:00 2021-12-30 03:30:00+00:00 2021-12-30 05:00:00+00:00 2021-12-30 07:00:00+00:00
2021-12-31 2021-12-31 01:30:00+00:00 2021-12-31 03:30:00+00:00 2021-12-31 05:00:00+00:00 2021-12-31 07:00:00+00:00
2022-01-04 2022-01-04 01:30:00+00:00 2022-01-04 03:30:00+00:00 2022-01-04 05:00:00+00:00 2022-01-04 07:00:00+00:00
2022-01-05 2022-01-05 01:30:00+00:00 2022-01-05 03:30:00+00:00 2022-01-05 05:00:00+00:00 2022-01-05 07:00:00+00:00
... ... ... ... ...
2022-08-08 2022-08-08 01:30:00+00:00 2022-08-08 03:30:00+00:00 2022-08-08 05:00:00+00:00 2022-08-08 07:00:00+00:00
2022-08-09 2022-08-09 01:30:00+00:00 2022-08-09 03:30:00+00:00 2022-08-09 05:00:00+00:00 2022-08-09 07:00:00+00:00
2022-08-10 2022-08-10 01:30:00+00:00 2022-08-10 03:30:00+00:00 2022-08-10 05:00:00+00:00 2022-08-10 07:00:00+00:00
2022-08-11 2022-08-11 01:30:00+00:00 2022-08-11 03:30:00+00:00 2022-08-11 05:00:00+00:00 2022-08-11 07:00:00+00:00
2022-08-12 2022-08-12 01:30:00+00:00 2022-08-12 03:30:00+00:00 2022-08-12 05:00:00+00:00 2022-08-12 07:00:00+00:00

[151 rows x 4 columns]

可见,他直接返回了这个区间中所有开盘的日期作为index,并附带了开盘和收盘的UTC时间(需要+8)。

如果你只需要开市的日期,可以这样:

# 公众号:二七阿尔量化
import exchange_calendars as xcals
xshg = xcals.get_calendar("XSHG")
xshg_range = xshg.schedule.loc["2021-12-29":"2022-08-12"]
print(xshg_range.index.strftime("%Y-%m-%d").tolist())

效果如下:

['2021-12-29', '2021-12-30', '2021-12-31', '2022-01-04', '2022-01-05', '2022-01-06', '2022-01-07', '2022-01-10', '2022-01-11', '2022-01-12', '2022-01-13', '2022-01-14', '2022-01-17', '2022-01-18', '2022-01-19', '2022-01-20', '2022-01-21', '2022-01-24', '2022-01-25', '2022-01-26', '2022-01-27', '2022-01-28', '2022-02-07', '2022-02-08', '2022-02-09', '2022-02-10', '2022-02-11', '2022-02-14', '2022-02-15', '2022-02-16', '2022-02-17', '2022-02-18', '2022-02-21', '2022-02-22', '2022-02-23', '2022-02-24', '2022-02-25', '2022-02-28', '2022-03-01', '2022-03-02', '2022-03-03', '2022-03-04', '2022-03-07', '2022-03-08', '2022-03-09', '2022-03-10', '2022-03-11', '2022-03-14', '2022-03-15', '2022-03-16', '2022-03-17', '2022-03-18', '2022-03-21', '2022-03-22', '2022-03-23', '2022-03-24', '2022-03-25', '2022-03-28', '2022-03-29', '2022-03-30', '2022-03-31', '2022-04-01', '2022-04-06', '2022-04-07', '2022-04-08', '2022-04-11', '2022-04-12', '2022-04-13', '2022-04-14', '2022-04-15', '2022-04-18', '2022-04-19', '2022-04-20', '2022-04-21', '2022-04-22', '2022-04-25', '2022-04-26', '2022-04-27', '2022-04-28', '2022-04-29', '2022-05-05', '2022-05-06', '2022-05-09', '2022-05-10', '2022-05-11', '2022-05-12', '2022-05-13', '2022-05-16', '2022-05-17', '2022-05-18', '2022-05-19', '2022-05-20', '2022-05-23', '2022-05-24', '2022-05-25', '2022-05-26', '2022-05-27', '2022-05-30', '2022-05-31', '2022-06-01', '2022-06-02', '2022-06-06', '2022-06-07', '2022-06-08', '2022-06-09', '2022-06-10', '2022-06-13', '2022-06-14', '2022-06-15', '2022-06-16', '2022-06-17', '2022-06-20', '2022-06-21', '2022-06-22', '2022-06-23', '2022-06-24', '2022-06-27', '2022-06-28', '2022-06-29', '2022-06-30', '2022-07-01', '2022-07-04', '2022-07-05', '2022-07-06', '2022-07-07', '2022-07-08', '2022-07-11', '2022-07-12', '2022-07-13', '2022-07-14', '2022-07-15', '2022-07-18', '2022-07-19', '2022-07-20', '2022-07-21', '2022-07-22', '2022-07-25', '2022-07-26', '2022-07-27', '2022-07-28', '2022-07-29', '2022-08-01', '2022-08-02', '2022-08-03', '2022-08-04', '2022-08-05', '2022-08-08', '2022-08-09', '2022-08-10', '2022-08-11', '2022-08-12']

3.高级使用

判断某一天是否为交易日:

# 公众号:二七阿尔量化

import exchange_calendars as xcals
xshg = xcals.get_calendar("XSHG")
print(xshg.is_session("2022-12-30"))
# True

获取某一天后的N个交易日:

# 公众号:二七阿尔量化

import exchange_calendars as xcals
xshg = xcals.get_calendar("XSHG")
print(xshg.sessions_window("2022-12-30", 7))
# DatetimeIndex(['2022-12-30', '2023-01-03', '2023-01-04', '2023-01-05',
# '2023-01-06', '2023-01-09', '2023-01-10'],
# dtype='datetime64[ns]', freq='C')

获取某一天后的下一个交易日:

# 公众号:二七阿尔量化

import exchange_calendars as xcals
xshg = xcals.get_calendar("XSHG")
print(xshg.date_to_session("2022-01-01", direction="next"))
# 2022-01-04 00:00:00

获取某一天后的上一个交易日:

# 公众号:二七阿尔量化

import exchange_calendars as xcals
xshg = xcals.get_calendar("XSHG")
print(xshg.date_to_session("2022-01-01", direction="previous"))
# 2021-12-31 00:00:00

获取分钟级交易区间:

import exchange_calendars as xcals
xshg = xcals.get_calendar("XSHG")
print(xshg.session_minutes("2022-01-04"))
# DatetimeIndex(['2022-01-04 01:30:00+00:00', '2022-01-04 01:31:00+00:00',
# '2022-01-04 01:32:00+00:00', '2022-01-04 01:33:00+00:00',
# '2022-01-04 01:34:00+00:00', '2022-01-04 01:35:00+00:00',
# '2022-01-04 01:36:00+00:00', '2022-01-04 01:37:00+00:00',
# '2022-01-04 01:38:00+00:00', '2022-01-04 01:39:00+00:00',
# ...
# '2022-01-04 06:50:00+00:00', '2022-01-04 06:51:00+00:00',
# '2022-01-04 06:52:00+00:00', '2022-01-04 06:53:00+00:00',
# '2022-01-04 06:54:00+00:00', '2022-01-04 06:55:00+00:00',
# '2022-01-04 06:56:00+00:00', '2022-01-04 06:57:00+00:00',
# '2022-01-04 06:58:00+00:00', '2022-01-04 06:59:00+00:00'],
# dtype='datetime64[ns, UTC]', length=240, freq=None)

交易时间按指定数字分割:

import exchange_calendars as xcals
xshg = xcals.get_calendar("XSHG")
print(xshg.trading_index(
    "2021-12-30", "2021-12-31", period="30T", force=True
))
# IntervalIndex([[2021-12-30 01:30:00, 2021-12-30 02:00:00), [2021-12-30 02:00:00, 2021-12-30 02:30:00), [2021-12-30 02:30:00, 2021-12-30 03:00:00), [2021-12-30 03:00:00, 2021-12-30 03:30:00), [2021-12-30 05:00:00, 2021-12-30 05:30:00) ... [2021-12-31 03:00:00, 2021-12-31 03:30:00), [2021-12-31 05:00:00, 2021-12-31 05:30:00), [2021-12-31 05:30:00, 2021-12-31 06:00:00), [2021-12-31 06:00:00, 2021-12-31 06:30:00), [2021-12-31 06:30:00, 2021-12-31 07:00:00)],
# closed='left',
# dtype='interval[datetime64[ns, UTC]]')
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    3

    文章

    3440

    浏览量

    87144
  • 编辑器
    +关注

    关注

    1

    文章

    788

    浏览量

    30187
  • 数据分析
    +关注

    关注

    2

    文章

    1352

    浏览量

    33733
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466
收藏 人收藏

    评论

    相关推荐

    柯达股价30个交易日均低于1美元收退市警告我的搜狐

     1月4日消息,据国外媒体报道,柯达(Eastman Kodak Co)美国时间周二表示,因公司平均收盘价已连续30个交易日低于1美元,它已收到纽约证券交易所的警告通知书。这一消息导致柯达股价周二盘
    发表于 01-04 14:53

    DIY电子日历

    把以前做的电子日历那出来晒晒,有点灰尘了,不过好像还能用,只是最后的那个8*8点阵好像坏了一条线。我设计开发的是一种新型“电子日历钟”它可以全方面显示时间,年,月,日。星期,提供中文显示,农历显示
    发表于 02-15 08:45

    树莓派多功能数码壁挂日历

    本帖最后由 348081236 于 2016-1-12 11:29 编辑 还在用笔在日历上的重要日子画圈写字吗?如果是那你就OUT了。上图这个数码壁挂日历除了日历的基本功能,它还能预测天气
    发表于 01-12 11:27

    Python就业状况分析

    在Stack Overflow的2018年开发者调查中,Python是最理想的语言(即调查者最有兴趣学习的语言);这是Python连续第二年获得该排名。 Python用户在排名最高的编
    发表于 05-23 15:20

    比特币交易所系统开发如何适应海外市场

    手中的一种数字资产以现货价格兑换成另一种数字资产、法币间的交易。 点对点交易:用现金获得数字资产的交易方式,数字资产在平台托管,撮合个体用户之间通过银行卡、支付宝、微信支付手段
    发表于 05-28 14:55

    数字资产交易平台搭建交易市场

    区块链技术作为一种分布式共享数据库技术正在方兴未艾,其分散性、透明性、公平性和开放性与互联网的理念是一致的,它在互联网中的应用将进一步推动互联网的建设。随着全球市场的快速发展,由于全球用户对数字资产
    发表于 07-20 11:20

    Python谈yield表达式及其批量获得minibatches的应用

    Python 小谈 yield 表达式及其批量获得 minibatches 的应用
    发表于 05-21 08:20

    乐视网复牌时间已确定:10个交易日内复牌

    乐视官网于12月14日晚间公告称,公司运营一切正常,基本面未发生变化,正在筹划通过非公开发行股票及其他资本方式引入战略投资者。预计继续停牌时间不超过10个交易日
    发表于 12-15 09:12 8185次阅读

    在线交易日志的用户购买行为可视化分析系统

    在线交易日志,即用户通过电商平台购买商品产生的交易记录,包括用户、商品、交易及商家的相关信息,反映了用户的购买行为.现有的可视化方法未能充分结合在线交易日志的时序、层次、地理、多维等特
    发表于 12-26 15:34 1次下载

    乐视网复牌的第10个交易日 市值流失398.17亿

    据报道,自乐视宣布复牌以来,它的每一步动向都大受关注,近日乐视网股市最新消息,乐视网复牌的第10个交易日,已经连续第10天跌停,据悉市值蒸发398.17亿元。
    发表于 02-07 09:21 552次阅读
    乐视网复牌的第10个<b class='flag-5'>交易日</b> 市值流失398.17亿

    python代码示例之基于Python日历api调用代码实例

    本文档的主要内容详细介绍的是python代码示例之基于Python日历api调用代码实例。
    发表于 09-06 14:25 42次下载
    <b class='flag-5'>python</b>代码示例之基于<b class='flag-5'>Python</b>的<b class='flag-5'>日历</b>api调用代码实例

    上市第二个交易日一度暴涨90%,蔚来汽车的一切才刚刚开始

    蔚来汽车在上市第二个交易日迎来暴涨,盘中股价一度飙涨超90%,刷新盘中历史高位至12.69美元,市值也一度达到130.1994亿美元。截止收盘,蔚来汽车股价大涨75.76%报收11.60美元,市值为119.02亿。
    发表于 09-14 16:28 2856次阅读

    乐视网退市至老三板后6个交易日都涨停 共涨33%

    退市后,自2月3日起,以集合竞价的方式在老三板进行股份转让,每星期一、三、五各转让一次。转让首日报价区间为0.17元/股至0.19元/股。 截至目前,乐视网3已经在六个交易日进行转让,获得六个涨停板,最新收盘价为0.24元/股,较退市前最后一个
    的头像 发表于 02-24 10:15 3178次阅读

    特斯拉股价近10个交易日下跌19% 市值缩水超过1500亿美元

    2月24日消息,据国外媒体报道,在2月8日提交给美国证券交易委员会的文件中,特斯拉披露他们在1月份买入了15亿美元的比特币,在那之后,比特币的价格虽然有明显上涨,特斯拉也获得了可观的账面收益
    的头像 发表于 02-24 14:57 1562次阅读

    使用Raspberry Pi 3自制智能相框和日历—第二部分

    本教程的第二部分将带您完成构建智能相框和日历的框架、连接PIR运动传感器和控制相框幻灯片显示向日历显示的过渡这些步骤。该项目将继续使用本教程的使用Raspberry Pi 3自制智能相框和日历—第一部分中所设置的所有内容,并带您
    的头像 发表于 02-24 17:51 746次阅读
    使用Raspberry Pi 3自制智能相框和<b class='flag-5'>日历</b>—第二部分