我们尝试参考keke大佬的Tick data导入脚本载入Tick数据(csv格式)到数据库中,导入本地的玉米合约的tick数据。
但在save_tick_data()的使用中遇到了困难。
因为数据库模块的更新,我们尝试通过get_database()来获取BaseDatabase。
因为对类的使用不太懂,参考了社区中的建议:
但是,执行后仍有错误:
本人的vnpy版本是3.3.0
代码如下:
import os
import csv
from datetime import datetime, time
### vnpy中的模块导入
from vnpy.trader.constant import Exchange
from vnpy.trader.database import get_database
from vnpy.trader.object import TickData
file = "c2005_20200203.csv"
with open(file,'r') as f:
reader = csv.reader(f)
ticks = []
start = None
count = 0
for items in reader:
# 生成dt时间
date = items[3]
second = items[4]
millisecond = items[5]
standard_time = date + " " + second + "." + millisecond
dt = datetime.strptime(standard_time, "%Y%m%d %H:%M:%S.%f")
# 筛选无效时间段
if dt.time() < time(8,59,0) or dt.time() > time(15,0,0):
continue
elif dt.time() > time(10,15,0) and dt.time() < time(10,30,0):
continue
elif dt.time() > time(11,30,0) and dt.time() < time(13,30,0):
continue
# 生成单条tick
tick = TickData(
symbol = 'c2005',
datetime = dt,
exchange = Exchange.DCE,
last_price = float(items[6]),
last_volume = float(items[7]),
high_price = float(items[8]),
low_price = float(items[9]),
open_price = float(items[10]),
ask_price_1 = float(items[13]),
ask_volume_1 = float(items[14]),
bid_price_1 = float(items[15]),
bid_volume_1 = float(items[16]),
limit_up = float(items[17]),
limit_down = float(items[18]),
open_interest = float(items[19]),
turnover = float(items[20]),
pre_close = float(items[21]),
gateway_name = "DB",
)
ticks.append(tick)
count += 1
if not start:
start = dt
end = dt
#print(ticks[:5])
database_manager = get_database()
database_manager.save_tick_data(ticks)
print("插入数据",start,"-",end,"总数量:",count)
社区中看到的另一种写法是:
from vnpy.trader.database import BaseDatabase, get_database
.....
database:BaseDatabase = get_database()
database.save_tick_data(ticks)
得到的错误是一样的