[英]Python Pandas Market Calendars day count (Trading day vs Calendar Days)
[英]Get next trading day using pandas market calendar
我想修改下面的代码,以便我可以从现在或 n 天前获取交易天数:
import pandas_market_calendars as mcal
holidays = nyse.holidays()
mydate = pd.to_datetime("12/24/2019")
holidays(mydate)
Timestamp('2019-12-26 00:00:00')
有没有办法提供天数作为假期()的参数?
我可以让它与联邦假期一起使用,如下所示:
from pandas.tseries.holiday import USFederalHolidayCalendar
bday_us1 = CustomBusinessDay(calendar=USFederalHolidayCalendar(), n=2)
mydate + bday_us1
Timestamp('2019-12-27 00:00:00')
我假设你已经在某处有这条线:
nyse = mcal.get_calendar('NYSE')
您可能正在寻找的是这样的:
nyse.valid_days(start_date='2016-12-20', end_date='2017-01-10')
这将返回包含开始日期和结束日期的所有有效日期(非节假日)的列表。 要获取此日期范围:
mydate = pd.to_datetime("12/24/2019")
d = datetime.timedelta(days = 10)
start_date = mydate - d
end_date = mydate + d
没有采用日期范围的holidays
方法。 以当前日期为基础,我们可以生成一个包含 5 天前和 5 天前的日期列表。 然后每天我们将下一个假期收集到一个set
中以避免重复。 可选地,我们对获得的list
进行排序,因为set
不维护顺序。
import pandas_market_calendars as mcal
import pandas as pd
from datetime import timedelta
mydate = pd.to_datetime("12/24/2019")
nyse = mcal.get_calendar('NYSE')
holidays = nyse.holidays()
delta = timedelta(5)
start = mydate - delta
end = mydate + delta
date_list = [end - (timedelta(x)) for x in range((end-start).days)]
holidays = list(set(holidays(d) for d in date_list))
for day in sorted(holidays):
print(day)
输出
2019-12-23 00:00:00
2019-12-24 00:00:00
2019-12-26 00:00:00
2019-12-27 00:00:00
2019-12-30 00:00:00
我找到了一个有效的解决方案,我只是在我的函数中使用有效交易日的日期,而不是假期:
def next_business_day(start_day, business_days, HOLIDAYS):
ONE_DAY = datetime.timedelta(days=1)
temp_day = start_day
for i in range(0, business_days):
next_day = temp_day + ONE_DAY
while next_day.weekday() in [5,6] or next_day not in nyse.valid_days(start_date='2000-12-20', end_date='2020-01-10'):
next_day += ONE_DAY
temp_day = next_day
return temp_day
请注意,这是基于来自不同论坛的帖子,其中使用了假期:
def next_business_day(start_day, business_days, HOLIDAYS):
ONE_DAY = datetime.timedelta(days=1)
temp_day = start_day
for i in range(0, business_days):
next_day = temp_day + ONE_DAY
while next_day.weekday() in [5,6] or next_day in HOLIDAYS:
next_day += ONE_DAY
temp_day = next_day
return temp_day
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.