上一篇文章讲述了关于tushare这个量化交易的基本情况和相应的下载、安装方法。
以及处理数据的基础pandas和dataframe的基本使用方法。
这次再来讲一个比较基础,但又比较关键的方法:获取交易日
由于数据的延后性,tushare往往是在当天交易日的交易结束后更新数据。
因此,要想获得一个长期稳定的模型来使用,而不是需要你每天手动进行修改日期。我在这里介绍一下我常用的一些获取时间的方法。
更新时间如下图示:
可以看到,大部分的数据更新发生在15点到17点之后,因此我们获取日期时以17点为界限,17点以后的,我们获取当天交易日的信息,17点以前的我们获取前一个交易日的信息(而不是前一天)
首先,获取当天时间的函数为datetime函数,下载方法:
pip install datetime
获取到当天的时间:
today = datetime.datetime.now()
他的格式为:
2021-01-11 20:05:51.164923
是datetime.datetime类型的数据。
针对这类数据,有两个专门的函数来实现datetime类型和string类型之间的转化。
strftime()和strptime()
其中,利用strftime()函数将datetime转化为str类型:
我们确定好想要的数据,比如说我们想要“20210111”这个日期数据,以及“20:05:51”这个时间数据:
now = datetime.datetime.now()
today = now.strftime("%Y%m%d") #获取到"20210111"这个字符串
nowatime = now.strftime("%H:%M:%S") #获取到"20:05:51"这个字符串
today = now.strftime("%Y-%m-%d") #获取到"2021-01-11"这个字符串
通过观察我们可以发现,strftime后面跟的参数不同,他所输出的值就不同,其中格式化字符串代表着now里面的不同值,%Y代表年份、%m代表月份、%d代表日期;%H代表小时、%M代表分钟、%S代表秒数等。还有其他参数可以参考网上datetime使用方法。
同时它还支持不同格式,在strftime参数里输入不同的连接符(空格、横杠)等,它都能在字符串中表现出来,比较方便。
其次,利用strptime()函数将str类型转化为datetime类型:
这样做的目的是为了获取到前一个交易日,避免出现跨了一年或者是跨了一个月的,没法辨识。
这样做只需要逆向上面的函数即可,原理代码如下所示:
#第一个值是字符串时间str,第二个值是他的格式化的值
#获取到2021-01-11 20:05:51的datetime类型
today = datetime.strptime('2021-01-11 20:05:51', '%Y-%m-%d %H:%M:%S')
#获取到20210111 20:05:51的datetime类型
today = datetime.strptime('20210111 20:05:51', '%Y%m%d %H:%M:%S')
#获取到20210111的datetime类型
today = datetime.strptime('20210111', '%Y%m%d')
即我们可以理解为strptime函数是strftime函数的逆向函数,两者的操作规律类似。
接着我们进入实战,无差别的获取离你最近的交易日:
#获取str类型的时间,来匹配tushare的格式
def get_today_str():
today = datetime.datetime.now()
now = datetime.datetime.now().strftime("%H:%M")
if now < '17:00':
today = today + datetime.timedelta(days=-1)
today_str = self.is_open(today)
return today_str
def is_open(today):
today_str = today.strftime("%Y%m%d")
while not pro.query('trade_cal', start_date=today_str, end_date=today_str, fields="is_open").iloc[0,0]:
today = today + datetime.timedelta(days=-1)
today_str = today.strftime("%Y%m%d")
return today.strftime("%Y%m%d")
这里利用获取到的时间,判断它是否在17点以后,如果在的话我们认定今天是交易日,从而获取今天的数据,如果没有在17点以后,我们认定昨天为交易日,传入到is_open函数里,参数类型为datetime
进入is_open函数,我们获取到的是离传入参数最近的一个交易日。
首先将参数转变为str方法,来使用到tushare里trade_cal函数:
接口:trade_cal
描述:获取各大交易所交易日历数据,默认提取的是上交所
传入到这个函数中去,获取到is_open这个参数,如果这个值为0的话,那么他为休市,如果值为1,则为交易日。
根据这个写一个循环,如果不是交易日的话,那么就找到当前日期的前一天,循环判断,直到找到离当天最近的一个交易日,返回它的str模型。
因此,调用了get_today_str()函数便可自动获取到离当天最近的交易日期了,也实现了无差别的交易日期的选择。
tushare注册:
https://tushare.pro/register?reg=411785
上一篇:
https://blog.csdn.net/weixin_43900310/article/details/112317757
这是tushare系列的第二篇文章,讲述的仍然是一些基本的知识,作为铺垫。从下一讲开始就进入到具体指标的获取,制作与判断中来。敬请期待