VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 20
声望: 0

我们尝试参考keke大佬的Tick data导入脚本载入Tick数据(csv格式)到数据库中,导入本地的玉米合约的tick数据。
但在save_tick_data()的使用中遇到了困难。

因为数据库模块的更新,我们尝试通过get_database()来获取BaseDatabase。

description

因为对类的使用不太懂,参考了社区中的建议:

description

但是,执行后仍有错误:

description

本人的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)

得到的错误是一样的

Member
avatar
加入于:
帖子: 4622
声望: 284

升级一下vnpy_mongodb吧

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

xiaohe wrote:

升级一下vnpy_mongodb吧

能否简单说明一下具体的问题?
是我代码有问题,还是因为官方团队对mongodb的模块升级导致现有代码不能使用?

我的疑问是,因为我们安装的是一站式的vn studio,这意味着各个模块之间的协同工作在同一版本下是没有问题的。即只要我们不主动升级,现有版本的正常运行就不会乱。
如果是因为模块升级导致代码不能执行,那将来在实盘中不是会引发很多问题吗?(原来的版本下运行的好好的,因为官方模块升级导致出错)

一来,vnpy官方没有详细的文档,说明具体使用方法;(有课程,但都是老版本的。)
二来,自行频繁升级,又导致用户需要实时修正。关键还不知道何时需要修正?怎么修正?

开发团队是如何考虑这个问题的呢?
有无实盘交易的用户,他们是如何解决这个问题的呢?

还请赐教,非常感谢!

Member
avatar
加入于:
帖子: 4622
声望: 284

vnpy_mongodb1.0.3版本没有get_tick_overview,1.0.4提供的get_tick_overview支持

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

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】