如何利用Python 和 pandas_market_calendars 进行高效的财务数据分析

17,256次阅读
没有评论

共计 7575 个字符,预计需要花费 19 分钟才能阅读完成。

pandas_market_calendars 是一个 Python 库,可让您深入了解交易市场。把文章涵盖了 pandas_market_calendars 库的几个方面。

pandas_market_calendars

关于 pandas_market_calendars

pandas_market_calendars 是 Quantopian 的 Zipline 软件包的一部分,完全面向金融领域的用户。用户可以利用该库进行以下操作:

生成日期范围

语法

让我们看一下 pandas_market_calendars 的语法,先安装

pip install pandas_market_calendars

使用以下语句在 python 中引入使用,您可以开始使用该库:

import pandas_market_calendars as mcal

使用 Anaconda 安装

要使用 Anaconda 安装此库,请使用以下命令。其中任何一个都将帮助您完成安装。

conda install -c conda-forge pandas_market_calendars
conda install -c "conda-forge/label/cf202003" pandas_market_calendars

用途

这个库的其他用途包括:

依赖关系

pandas_market_calendars 的依赖关系有两种类型:直接和间接。建议在安装此库时检查所有这些依赖关系。直接依赖关系有 4 个:

  • exchange-calendars

  • pandas

  • python-dateutil

  • pytz

间接依赖关系有 6 个:

  • korean-lunar-calendar

  • numpy

  • pyluach

  • six

  • toolz

  • tzdata

使用示例

现在让我们了解如何使用这个出色的库。

import pandas_market_calendars as mcal
 
# 获取纽约证券交易所(NYSE)的日历
nyse = mcal.get_calendar('NYSE')
 
# 获取所有可用日历的列表
print(mcal.get_calendar_names())
 
# 检查一个日期是否是市场假日
print(nyse.is_holiday('2023-10-23'))
 
# 获取给定日期后的下一个工作日
print(nyse.next_open_after('2023-10-23'))
 
# 在两个日期之间生成一系列工作日期
print(mcal.date_range('2023-10-23', '2023-11-03', calendar='NYSE'))

输出结果

['ASX', 'BATS', 'CME', 'EUREX', 'FXCM', 'GLOBEX', 'HKEX', 'ICE', 'LSE', 'NASDAQ', 'NKY', 'NYSE', 'NYSEARCA', 'OTC', 'SGX', 'SSE', 'TSX']
False
2023-10-24
DatetimeIndex(['2023-10-24', '2023-10-25', '2023-10-26', '2023-10-27', '2023-10-30', '2023-10-31', '2023-11-01', '2023-11-02'], dtype='datetime64[ns]', freq='B')

正常交易时间

regular_market_times 函数显示市场是否开放进行交易。通过这种方式,可以初始化过去的数据或了解未来的事件。regular_market_times 是日历对象的一个属性。

import pandas_market_calendars as mcal
 
# 获取纽约证券交易所(NYSE)的日历
nyse = mcal.get_calendar('NYSE')
 
# 获取 NYSE 的常规交易时间
print(nyse.regular_market_times)
 
# 获取特定日期的常规交易时间
print(nyse.schedule('2023-10-24', include_times=True))

输出结果

{'market_open': ((None, time(9, 30)), ('1902-03-04', time(9, 30))), 'market_close': ((None, time(16, 0)), ('1901-02-03', time(16, 0)))}
[('2023-10-24 09:30:00', '2023-10-24 16:00:00')]

使用 pandas_market_calendars 获取日期范围

在获得日历后,您可以了解市场将开放的具体日期。这个输出会让您知道交易日的具体日期。pandas_market_calendars 的 date_range 函数帮助用户获取这个日期范围。

import pandas_market_calendars as mcal
 
# 获取纽约证券交易所(NYSE)的日历
nyse_calendar = mcal.get_calendar('NYSE')
 
# 获取下个月的日期范围
next_month = nyse_calendar.date_range('2023-11-01', '2023-11-30')
 
# 打印日期范围
print(next_month)

输出结果:

DatetimeIndex(['2023-11-01', '2023-11-02', '2023-11-03', '2023-11-06',
               '2023-11-07', '2023-11-08', '2023-11-09', '2023-11-10',
               '2023-11-13', '2023-11-14', '2023-11-15', '2023-11-16',
               '2023-11-17', '2023-11-20', '2023-11-21', '2023-11-22',
               '2023-11-27', '2023-11-28', '2023-11-29'],
              dtype='datetime64[ns]', freq='D')

市场假期

现在,一旦您获得了所选择的日历,您可能想要知道哪些日期是市场假期或其他形式的市场闭市。为此,pandas_market_calendars 提供了 holidays 函数。您只需将日期作为函数的参数,并且您将了解到市场在您提供的日期中有哪些假期。

python
# 获取美联储日历
us_federal_reserve_calendar = mcal.get_calendar('USFederalReserve')
 
# 获取下个月的所有假期和其他市场闭市日
holidays = us_federal_reserve_calendar.holidays('2023-11-01', '2023-11-30')
 
# 打印假期列表
print(holidays)

所以这个日历的输出是:

['感恩节']

交易日计数

Python 的 pandas_market_calendars 具有让投资者了解交易日数量的功能。交易日计数提供了用户需要指定的两个日期之间的总交易日数的整数格式。对于那些考虑这些因素预先计划交易收入的人来说,这非常有用。

# 获取纽约证券交易所(NYSE)的日历
nyse_calendar = mcal.get_calendar('NYSE')
 
# 计算 2023-11-01 至 2023-11-30 之间的交易日数
num_trading_days = nyse_calendar.business_days('2023-11-01', '2023-11-30')
 
# 打印交易日数
print(num_trading_days)

输出结果:

使用 pandas_market_calendars 库

使用 pandas_market_calendars 库可以获取特定市场的日期限制。市场的数据限制可能是由以下原因引起的:

通过 start_date 和 end_date 可以帮助用户了解日期限制。请参考下面的代码以理解其用法:

import pandas_market_calendars as mcal
nyse_calendar = mcal.get_calendar('NYSE')
start_date = nyse_calendar.start_date
end_date = nyse_calendar.end_date
print('Start date:', start_date)
print('End date:', end_date)

输出结果将显示该日历开始运行的日期以及截至日期,格式如下:

文章来源地址 https://www.toymoban.com/diary/python/593.html

Start date: 1875-05-17 00:00:00
End date: 2203-12-31 00:00:00

如果您想了解超出日期限制的交易日,请使用 extend() 函数,但无法保证信息的准确性。最好检查日历给定时间范围内提供的日期。但是,如果您仍然希望了解其工作原理,可以参考以下代码:

import pandas_market_calendars as mcal
nyse_calendar = mcal.get_calendar('NYSE')
next_year = nyse_calendar.extend('2024-01-01', '2024-12-31')
print('Next year:', next_year)

输出将包含超出范围的日期,如下所示:

Next year: DatetimeIndex([
'2023-12-31'
, 
'2024-01-01'
, 
'2024-01-02'
, 
'2024-01-03'
, 
'2024-01-04'
, 
'2024-01-05'
, 
'2024-01-06'
, 
'2024-01-07'
, 
'2024-01-08'
, 
'2024-01-09'
, 
'2024-01-10'
, 
'2024-01-11'
, 
'2024-01-12'
, 
'2024-01-13'
, 
'2024-01-14'
, 
'2024-01-15'
, 
'...

设置时区

如果您想在 pandas_market_calendars 中设置特定的时区,可以使用两种方法之一:

使用 schedule() 方法的 timezone 参数

使用该方法非常简单易懂。您可以使用以下代码。schedule() 方法具有 timezone 参数,该参数接受您指定的时区作为参数。如果您不提供时区,则将以 UTC 格式输出。

import pandas_market_calendars as mcal
import pytz
nyse_calendar = mcal.get_calendar('NYSE')
pacific_timezone = pytz.timezone('America/Los_Angeles')
# 以太平洋时间(PT)获取纽约证交所的开盘和收盘时间
nyse_business_days = nyse_calendar.schedule(timezone=pacific_timezone)
print(nyse_business_days)

如上所示,输出结果将显示交易日期以及市场的开盘和收盘时间。

使用市场日历对象的 timezone 属性

使用此方法,您可以在不同的时区中工作。它可以提供市场的开盘和收盘时间。相比于 schedule() 方法,它的函数调用较少。因此,例如,如果您正在使用 NYSE 日历,并希望将时区设置为太平洋时间,请尝试以下代码:

import pandas_market_calendars as mcal
import pytz
nyse_calendar = mcal.get_calendar('NYSE')
pacific_timezone = pytz.timezone('America/Los_Angeles')
# 将纽约证交所的默认时区设置为太平洋时间
nyse_calendar.timezone = pacific_timezone
# 获取纽约证交所的开盘和收盘时间
nyse_business_days = nyse_calendar.schedule()
print(nyse_business_days)

输出结果将是这样的格式:

   market_open  market_close
2023-10-31     06:30:00     13:00:00
2023-11-01     06:30:00     13:00:00
2023-11-02     06:30:00     13:00:00
...

如果您想获取特定市场的开盘和收盘时间段,可以使用 pandas_market_calendars 库中的 schedule() 函数。以下是一个示例代码,演示如何获取纽约证交所(NYSE)的开盘和收盘时间

import pandas_market_calendars as mcal

nyse_calendar = mcal.get_calendar('NYSE')

start_date = '2022-10-01'
end_date = '2022-10-31'

schedule = nyse_calendar.schedule(start_date=start_date, end_date=end_date)

print(schedule)

输出结果将显示指定日期范围内的开盘和收盘时间:

                      market_open         market_close
2022-10-03 13:30:00+00:00 09:30:00 2022-10-03 20:00:00
2022-10-04 13:30:00+00:00 09:30:00 2022-10-04 20:00:00
2022-10-05 13:30:00+00:00 09:30:00 2022-10-05 20:00:00
2022-10-06 13:30:00+00:00 09:30:00 2022-10-06 20:00:00
2022-10-07 13:30:00+00:00 09:30:00 2022-10-07 20:00:00
2022-10-10 13:30:00+00:00 09:30:00 2022-10-10 20:00:00
2022-10-11 13:30:00+00:00 09:30:00 2022-10-11 20:00:00
2022-10-12 13:30:00+00:00 09:30:00 2022-10-12 20:00:00
2022-10-13 13:30:00+00:00 09:30:00 2022-10-13 20:00:00
2022-10-14 13:30:00+00:00 09:30:00 2022-10-14 20:00:00
2022-10-17 13:30:00+00:00 09:30:00 2022-10-17 20:00:00
2022-10-18 13:30:00+00:00 09:30:00 2022-10-18 20:00:00
2022-10-19 13:30:00+00:00 09:30:00 2022-10-19 20:00:00
2022-10-20 13:30:00+00:00 09:30:00 2022-10-20 20:00:00
2022-10-21 13:30:00+00:00 09:30:00 2022-10-21 20:00:00
2022-10-24 13:30:00+00:00 09:30:00 2022-10-24 20:00:00
2022-10-25 13:30:00+00:00 09:30:00 2022-10-25 20:00:00
2022-10-26 13:30:00+00:00 09:30:00 2022-10-26 20:00:00
2022-10-27 13:30:00+00:00 09:30:00

pandas_market_calendars 中的交易时间表

为了衡量交易时间表,您可以使用 pandas_market_calendars 的另一个函数,称为 Schedule() 方法。在这里,您需要输入开始日期和结束日期。该方法将获取此开始日期和结束日期内的所有交易日。现在,如果您正在查看 NYSE 日历并想了解 2023 年 11 月的交易时间表,您可以通过以下代码获得帮助:

import pandas_market_calendars as mcal
 
# Get the NYSE calendar
nyse_calendar = mcal.get_calendar('NYSE')
 
# Get the trading schedule for the month of November 2023
trading_schedule = nyse_calendar.schedule(start_date='2023-11-01', end_date='2023-11-30')
 
# Print the trading schedule
print(trading_schedule)

pandas_market_calendars 常见问题解答

使用 pandas_market_calendars 有什么好处?

准确性、灵活性和易用性是其最大的优点。

如何使用 获取特定证券交易所的交易时间 pandas_market_calendars?

要获取特定交易所的交易时间,您首先需要导入 pandas_market_calendars 并创建所需交易所日历的实例。例如,要获取纽约证券交易所 (NYSE) 日历,您可以使用 get_calendar(‘NYSE’)。然后,您可以使用诸如 schedule() 获取指定期间的详细交易时间和日期之类的方法。

到此这篇关于如何利用 Python 和 pandas_market_calendars 进行高效的财务数据分析的文章就介绍到这了, 更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持 TOY 模板网!

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计7575字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)