美文网首页
python3 股票交易日处理

python3 股票交易日处理

作者: 博陵韩少 | 来源:发表于2019-01-24 17:22 被阅读0次

    1 功能说明

    处理holiday列表,判断某天是否为股票交易日,获取上一个交易日等。
    python3把行情监控的交易日处理函数改成了类,加深对类不同method,datetime模块的理解。
    holiday.ini配置文件如下:

    [holiday]
    #上证
    sh=20180101;20180215-20180221;20180405-20180407;20180429-20180501;20180616-20180618;20180922-20180924;20181001-20181007
    #深证
    sz=20180101;20180215-20180221;20180405-20180407;20180429-20180501;20180616-20180618;20180922-20180924;20181001-20181007
    

    2 python源码

    # -*- coding:utf-8 -*-
    ## Edit by hanlin
    ## date 20190124
    ## 564868230@qq.com
    
    import datetime
    
    class TradeDay:
        '''Days that securities can be traded'''
        date=datetime.date.today()
        holiday='20191111'
        __today=datetime.date.today()
        __holiday_list=[]
        
        def __init__(self,date='20190101',holiday='20190101'):
            self.date=date
            self.holiday=holiday
    
        @staticmethod
        def date2str(date,format='%Y%m%d'):
            return   datetime.datetime.strftime(date,format)
        @staticmethod
        def str2date(date,format='%Y%m%d'):
            return   datetime.datetime.strptime(date,format)
        @staticmethod
        def getDaysByDaysSeg(days_seg):
            '''eg input:20160729-20160801 output:[20160729,20160730,20160801]'''
            days=days_seg.split('-')
            start_day=TradeDay.str2date(days[0])
            end_day=TradeDay.str2date(days[1])
            oneday=datetime.timedelta(days=1)
            li=[days[0]]
            while True:
                start_day=start_day+oneday
                li.append(TradeDay.date2str(start_day))
                if start_day == end_day:
                    break
            return li
    
        @classmethod
        def getToday(self):
            #today=datetime.datetime.strftime(self.__today,'%Y%m%d')
            today=TradeDay.date2str(self.__today,'%Y%m%d')
            return today
        @classmethod
        def getYesterday(self):
            oneday=datetime.timedelta(days=1)
            yesterday=self.date-oneday
            yesterday=TradeDay.date2str(yesterday,format='%Y%m%d')
            return yesterday   
        @classmethod
        def getTomorrow(self):
            oneday=datetime.timedelta(days=1)
            tomorrow=self.date+oneday
            tomorrow=TradeDay.date2str(tomorrow,format='%Y%m%d')
            return tomorrow
        @staticmethod
        def getWkday(date):
            #wkday=datetime.datetime(date).strftime("%w")
            week_day_dict = {
                0 : 'Mon',
                1 : 'Tues',
                2 : 'Wed',
                3 : 'Thur',
                4 : 'Fri',
                5 : 'Sat',
                6 : 'Sun',
                }
            #date=TradeDay.str2date(self.date,'%Y%m%d')
            dayn = date.weekday()
            return week_day_dict[dayn]
        @classmethod
        def getHolidayList(self):
            #holiday_list=[]
            #holiday
            length=len(holiday)
            for i in range(length):
                if '-' in holiday[i]:
                    li=TradeDay.getDaysByDaysSeg(holiday[i])
                    for li_day in li:
                        self.__holiday_list.append(li_day)
                else:
                    self.__holiday_list.append(holiday[i])
            return self.__holiday_list
        def isTradeDay(self):
            TradeDay.getHolidayList()
            today=TradeDay.str2date(self.date,'%Y%m%d')
            weekend=['Sat','Sun']
            if TradeDay.getWkday(today) in weekend:
                return False
            elif TradeDay.date2str(today) in self.__holiday_list:
                return False
            return True
        def getLastTradeDay(self):
            TradeDay.getHolidayList()
            lastday=TradeDay.str2date(self.date,'%Y%m%d')
            while True:
                oneday=datetime.timedelta(days=1)
                lastday=lastday-oneday
                weekend=['Sat','Sun']
                if TradeDay.getWkday(lastday) in weekend:
                    continue
                elif TradeDay.date2str(lastday) in self.__holiday_list:
                    continue
                else:
                    break
            return TradeDay.date2str(lastday)
    
    
    #### test test test       
    holiday=['20181229-20190101']
    
    dates=TradeDay('20190122',holiday)
    #dates2=TradeDay(holiday=holiday)
    print(dates.date,dates.holiday)
    
    print("Class-Today: %s"%TradeDay.getToday())
    print("Object-Today: %s"%dates.getToday())
    print(TradeDay.getYesterday())
    print(TradeDay.getTomorrow())
    
    print('--------------------')
    print(dates.getHolidayList())
    print("LastTradeDay: %s"%dates.getLastTradeDay())
    print("%s is TradeDay: %s"%(dates.date,dates.isTradeDay()))
    
    
    

    相关文章

      网友评论

          本文标题:python3 股票交易日处理

          本文链接:https://www.haomeiwen.com/subject/zerujqtx.html