python3 股票交易日处理

2019-01-24  本文已影响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()))


上一篇下一篇

猜你喜欢

热点阅读