????????最近在做股票數據相關的項目,需要用到判斷某一天某個時刻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股某一天的交易狀態,接下來我們還要判斷某一個時刻的交易狀態