VeighNa量化社区
你的开源社区量化交易平台
lv502's Avatar
Member
离线
8 帖子
声望: 0

xiaohe wrote:

VtBarData应该是1.9.2的了吧,1.9.2版本已经不再维护了。
如果想要导入数据进mongodb,可以先参考此帖配置好数据库然后通过data_manager模块导入

好的,谢谢!

已解决

用Python的交易员 wrote:

这个是1.0老版本的代码了,目前已经停止支持,如果一定要用可以去www.github.com/vnpy/vnpy下载1.9.2-LTS分支的代码

这个代码原来是安装VNPY2.1.8时下载的。谢谢指导!

在调用CsvToMgDB.py时出现错误:
line 59, in <module>
loadMC12Csv('j0000.csv',MINUTE_DB_NAME,'j0000')
NameError: name 'MINUTE_DB_NAME' is not defined

请问怎么解决?


VNPY2.1.8,CsvToMgDB.py源码:

倒入MongoDB数据库

倒入库

import csv
from datetime import datetime,timedelta
from time import time

import pymongo

from vnpy.trader.vtGlobal import globalSetting #VN 1.0版本的写法

from vnpy.trader.setting import Settings #VN 2.0版本的写法

from vnpy.trader.setting import SETTINGS #VN 2.1.8版本的写法

from vnpy.trader.vtConstant import * #VN 1.0版本的写法

from vnpy.trader.constant import * #VN 2.0版本的写法

from vnpy.trader.vtObject import VtBarData #VN 1.0版本的写法

from vnpy.trader.object import BarData #VN 2.0版本的写法

from vnpy.trader.app.ctaStrategy.ctaBase import SETTING_DB_NAME,TICK_DB_NAME,MINUTE_DB_NAME,DAILY_DB_NAME #VN 1.0版本的写法

构建函数

def loadMC12Csv(fileName,dbName,symbol):
"""将MC12版本Csv导出的历史数据插入MongoDB数据库中"""
import csv

start = time()
print(u'开始读取CSV文件%s中的数据插入到%s的%s中:'%(fileName,dbName,symbol))

#锁定集合并创建索引
client = pymongo.MongoClient(globalSetting['mongoHost'],globalSetting['mongoPort'])
collection = client[dbName][symbol]
collection.ensure_index([('datetime',pymongo.ASCENDING)],unique=True)

#读取数据和插入数据库
reader = csv.DictReader(file(fileName,'r'))
for d in reader:
    bar = VtBarData()
    bar.vtSymbol = symbol
    bar.symbol = symbol

    bar.open = float(d['Open'])
    bar.high = float(d['High'])
    bar.low = float(d['Low'])
    bar.close = float(d['Close'])
    bar.date = datetime.strptime(d['Date'].split(' ')[0],'%Y/%m/%d').strftime('%Y%m%d')
    """日期格式可能有问题"""

    bar.time = d['Time']
    bar.datetime = datetime.strptime(bar.date + ' ' + bar.time,'%Y/%m/%d %H:%M:%S')
    bar.volume = d['Volume']

    flt = {'datetime':bar.datetime}
    collection.update_one(flt,{'$set':bar._dict_},upsert=True)

print(u'插入完毕,耗时:%s:'% (time()-start))

在Jupyter Notebook中输入下面的代码即可开始导入

loadMC12Csv('j0000.csv',MINUTE_DB_NAME,'j0000') #出现错误的代码

CsvToMgDB_Exaple.py出现NameError: name 'BtBaseData' is not defined,怎么解决?

VNPY2.1.8中CsvToMgDB_Exaple.py源码如下:

默认空值

EMPTY_STRING = ''
EMPTY_UNICODE = u''
EMPTY_INT = 0
EMPTY_FLOAT = 0.0

数据库名称

TICK_DB_NAME = 'VnTrader_Tick_Db'
DAILY_DB_NAME = 'VnTrader_Daily_Db'
MINUTE_DB_NAMW = 'VnTrader_1Min_Db'

--------------------------------------------------------------

VtBarData规定K线的格式

class VtBarData(BtBaseData): #该语句出现错误提示。BtBaseData
"""K线数据"""

------------------------------------

def int(self):
"""Constructor"""
super(VtBarData,self).int()

  self.vtSymbol = EMPTY_STRING    #品种代码,交易所
  self.symbol = EMPTY_STRING      #品种代码
  slef.exchange = EMPTY_STRING    #交易所

  self.open = EMPTY_FLOAT
  self.high = EMPTY_FLOAT
  self.low = EMPTY_FLOAT
  self.close = EMPTY_FLOAT

  self.date = EMPTY_STRING        #日期
  self.time = EMPTY_STRING        #时间
  self.datetime = NONE            #datetime时间对象

  self.volume = EMPTY_INT         #成交量
  self.openInterest = EMPTY_INT   #持仓量

水底游 wrote:

解决了多谢

怎么解决的,我也发现了这个问题。

好的,我试试。谢谢!

(求助)使用VN Trader 2.1.8的“CTA回测”,出现如下的错误提示,怎么回事?


策略回测失败,触发异常:
Traceback (most recent call last):
File "d:\vnstudio\lib\site-packages\vnpy\app\cta_backtester\engine.py", line 180, in run_backtesting
engine.run_backtesting()
File "d:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\backtesting.py", line 313, in run_backtesting
for ix, i in enumerate(range(0, total_size, batch_size)):
ValueError: range() arg 3 must not be zero

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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