目录
–
介绍
本文以量化交易实战为学习导向,介绍了datetime模块在量化交易中的使用,学习本文可以满足交易中对时间数据格式的常用处理方法。
1.datetime基础
导入相关包
from datetime import date,time,datetime,timedelta
获取当前时间
current_dt = datetime.now()
print(current_dt,type(current_dt))
2022-06-07 21:08:05.708484 <class 'datetime.datetime'>
转化为日期
current_date = current_dt.date()
print(current_date,type(current_date))
2022-06-07 <class 'datetime.date'>
转化为时间
current_time = current_dt.time()
print(current_time,type(current_time))
21:08:05.708484 <class 'datetime.time'>
endtime = time(14,55)
print(endtime)
if current_time >= endtime:
print("执行平仓操作")
else:
print("执行正常交易")
14:55:00
执行平仓操作
创建自定义时间
option_expiry = datetime(2023,6,7,21,13,0)
print(option_expiry)
2023-06-07 21:13:00
求时间差值
time_left = option_expiry - current_dt
print(time_left,type(time_left))
365 days, 0:04:54.291516 <class 'datetime.timedelta'>
检查偏移量
print("剩余天数",time_left.days)
print("剩余秒数",time_left.total_seconds())
剩余天数 365
剩余秒数 31536294.291516
计算相对日期
today = datetime.now()
yesterday = today - timedelta(days=1)
tomorrow = today + timedelta(days=1)
print(today)
print(yesterday)
print(tomorrow)
2022-06-07 21:19:38.127347
2022-06-06 21:19:38.127347
2022-06-08 21:19:38.127347
datetime转化为字符串
current_dt.strftime("%Y-%m-%d %H:%M:%S.%f China Beijing Time")
'2022-06-07 21:08:05.708484 China Beijing Time'
字符串转datetime
demo_str = "2022/6/7 204635"
demo_dt = datetime.strptime(demo_str,"%Y/%m/%d %H%M%S")
print(demo_str,type(demo_dt))
2022/6/7 204635 <class 'datetime.datetime'>
2.VeighNa中底层接口的时间处理
在ctp_gateway文件中我们可以在这个回调函数中打印出来:这个函数每2秒会被调用一次,打印出交易所推送的信息。
运行VegihNa后,输出信息:
在数据库中记录时间戳的时候,我们需要把两个交易所的时间转换为同一时间,不然一个是北京时间一个是芝加哥时间,后面跑回测的时候还需要自己再做转换,非常麻烦。
我们在之前一片文章中有聊到这个问题【VeighNa】VeighNa载入csv历史数据
我们看到下面这个代码,用了datetime.strptime将字符串转化为datetime对象,然后再调用pytz包下的locallize实例化这个dt对象,转化为设置好的带有时区的datetime对象。