python量化交易神器tushare(2)——获取最近交易日datetime

上一篇文章讲述了关于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系列的第二篇文章,讲述的仍然是一些基本的知识,作为铺垫。从下一讲开始就进入到具体指标的获取,制作与判断中来。敬请期待
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值