最近在做股票数据相关的项目,需要用到判断某一天某个时刻A股的状态,比如休市,收盘,交易中等,发动脑筋想了一下,这个其实还是比较简单的,这里我把实现方法分享给大家。
思路
当天是否休市
对于某一天来说,我们可以判断这一天是不是holiday,对于A股来说其交易日与工作日一致,只要是周六日(无论调不调休),其一定休市,那么一个较为简单的思路就是使用time.strftime()获得当前日期的week值后判断其是否在周中 ,但是对于一些在周中的法定节假日这种方法便无能为力了……
因此,最好的办法就是能够判断当前时间在日历中是否是节假日(周六日+法定节假日)
经过不懈的查找,还终于让我找到这样一个日历库,它就是chinese_calendar,
chinese_calendar获取方式
pip install chinese_calendar
并且,非常贴心的是作者还专门出了一个is_holiday()和is_workday()的方法用来判断某一天是不是节假日或工作日!
chinese_calendar使用方法
import chinese_calendar as calendar
import datetime
#chinese_calendar支持的时间格式是datetime类型的
year=2025
month=4
day=1
time=datetime.date(year,month,day)
print(f'{year}年{month}月{day}日是节假日吗?{calendar.is_holiday(time)}')
运行结果:
事情到这儿就结束了吗?还没有,注意我们前边说过,A股是非常懒的,在一些需要调休并且是周六日的日子它也不交易,仍处于休市状态,那么这个时候我们使用chinese_calendar的is_holiday()或is_workday()给出的结果都会是工作日(周六日调休) ,因此我们还是需要再判断一下这一天是不是周六日,如果是,那么A股必然休市,如果不是A股不一定就一定交易(周中是法定节假日)。
这句话听着很拗口,但是实现起来还是比较简单的,我们只需再使用time库下的strftime获得一个字符串时间戳来判断即可:
import time
#week的取值为0-6 0是星期日,1-6是周一至周六
week=int(time.strftime(r"%w"))
if week==0 or week==6:print('A股休市')
完整代码:
import chinese_calendar as calendar
import datetime
def marketstate(self):week=int(time.strftime("%W"))is_holiday=calendar.is_holiday(datetime.date.today())if is_holiday:return '休市'if week==6 or week==0:return '休市'else:return '开盘'
以上是用来判断A股某一天的交易状态,接下来我们还要判断某一个时刻的交易状态