vn.py官网
开源量化社区
Member
avatar
加入于:
帖子: 2
声望: 0

with open(r'D:\历史数据\SHSE_000001.csv', 'r') as f:
reader = csv.DictReader(f)
bars = []
start = None
count = 0
for item in reader:
item['bob'] = item['bob'].replace('+08:00', "")
dt = datetime.strptime(item['bob'], '%Y-%m-%d %H:%M:%S')
bar = BarData(
symbol='000001',
datetime=dt,
exchange=Exchange.SHFE,
interval=Interval.DAILY,
volume=item['volume'],
open_price=item['open'],
high_price=item['high'],
low_price=item['low'],
close_price=item['close'],
gateway_name='db'
)
bars.append(bar)
count += 1
if not start:
start = bar.datetime
end = bar.datetime
database_manager.save_bar_data(bars)
description
不知道为什么会出现这种情况,对比代码想了很久了没想明白,求指点

Member
avatar
加入于:
帖子: 18
声望: 1

看上去 是类型错了字符串类型 不能做 时间类型 处理 ,
item['bob'] = item['bob'].replace('+08:00', ""),你替换的这个字符串 是时区标记,我不太清楚 如果不去掉会怎么样
你这里 已经把它当字符串类型进行替换了

我之前遇到过这问题,现在用了比较笨的办法

1.把时区字符串 替换之后存入CSV
2.读取CSV文件时 加个参数 ,比如 :history = pandas.read_csv(file, parse_dates=True, index_col=0)
里面的 parse_dates=True 这个参数,你可以百度一下了解试试

PS 我也是个新手,以上仅供参考
当然你可以看一下这个帖子:
https://www.jianshu.com/p/f80586446151

Super Moderator
avatar
加入于:
帖子: 37
声望: 12

dt = datetime.strptime(item['bob'], '%Y-%m-%d %H:%M:%S') 这段代码有两个作用:
 

  1. 告诉python, 数据item[bob]是以%Y-%m-%d %H:%M:%S 格式储存的表示时间字符串
  2. 让python,将数据item[bob]从字符串(str)类型转化为datetime 类型。
     

%Y-%m-%d %H:%M:%S 代表着你的csv数据中的时间戳必须是 2020-04-30 08:32:30 这种类型的(注意空格和标点符号)。如果,你的数据中的时间戳格式不是这个类型就会报错。因此,你需要根据你的数据时间戳格式修改%Y-%m-%d %H:%M:%S。 解决方法可以参考python time format 中的 format time 结构化表示

Member
avatar
加入于:
帖子: 2
声望: 0

应该是时间格式的问题,而且修改以后要重新启动vnpy,谢谢各位

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3

沪公网安备 31011502017034号