【Python实战】chinesecalendar模块处理中国股市交易日期

我们知道中国上海证券交易所和深圳证券交易所日常交易日期为星期一到星期五,并且法定节假日不交易。
我们可以通过chinesecalendar模块判断某一天是否为工作日(中国法定工作日,调休的时候有可能周末也是工作日),通过datetime模块判断某一天是否为周末。
实际案例:判断离当天间隔N天是否为股票交易日,N可以为负数,正数时为当前日期N天前,负数时为当前日期N天后。

chinesecalendar模块
pip install chinesecalendar
有两个函数is_workday(date)-是否为工作日、is_holiday(date)-是否为节假日
内置datetime.date模块
有一个函数weekday()-某一天星期几   规则:星期一为0、星期天为6
比如2020-10-10日,为星期六,因为放假调休该日尽管是周末,但是工作日

比如2020-10-08日,为星期四,因为放假调休该日不是周末,但不是工作日

完整代码段

# -*- coding: utf-8 -*-
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#博客:https://blog.csdn.net/sinat_37967865
#文件:chinese_workday.py
#日期:2020-10-16
#备注:中国节假日  pip install chinesecalendar  https://pypi.org/project/chinesecalendar/
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

from chinese_calendar import is_workday, is_holiday
from datetime import date
from datetime import timedelta

def is_work_day():
    april_last = date(2020, 10, 10)   # datetime.date
    print(is_workday(april_last))     # True
    print(is_holiday(april_last))     # False
    print(april_last.weekday())       # 5-星期六


# 当前日期N天前的证券交易日
def get_trade_day(n):
    dt = date.today()
    trade_day = '20201016'
    if n < 0:
        t = -n
    else:
        t = n
    for i in range(100):
        if n<0:
            delta_day = timedelta(days=-i)
        else:
            delta_day = timedelta(days=i)
        trade_day = dt-delta_day
        if is_workday(trade_day) and trade_day.weekday()<5:       # 工作日并且不是周末
            if t ==0:
                break
            t = t -1
    print(trade_day.strftime('%Y%m%d'))
    return trade_day.strftime('%Y%m%d')


if __name__ == '__main__':
    #is_work_day()
    get_trade_day(-2)

 

 

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值