好久之前听过vnpy,前两天看到还在更新,觉得可以研究一下。

主要是对其中的K线的UI

写期货回测最主要的是图形化的工具比较缺,都是用数字图表,不直观。前段时间用plot画图,发现画出来的都是静态的,且数据量多后慢的要死。

看起来这个UI画的K线要好很多,值得研究一下。

网上有说明vnpy可保存为sqlite和mongdb.

一开始用的是sqlite,原因是无需安装,直接用,按照说明下载对应的组件,因为数据源这块vnpy已经抽象出BaseDatabase,需要用到哪一种组件再实现对应的组件,sqlite实现为vnpy-sqlite

先把数据准备好:

图中表示的是RBL9的1分钟的数据,我们只需要将其转换为vnpy识别的格式,然后利用vnpy提供的接口即可实现数据存入sqlite,最终通过

save_bar_data(self, bars: List[BarData])

接口将数据存入,不过我在存入的时候遇到了不小的问题:

1)sqlite要求存入时间时是一个指定格式的字符串,而提供的组件还是按照datetime格式存入的,导致无论如何存不进去。后来没有办法,强行在存入时修改为字符串,存进去的格式如下:

然后发现存进去了,取的时候又是按照datetime格式取出来的,而且 取的时候用的是这个接口:

load_bar_data, 一定要求输入开始时间和结束时间,使用datetime转换出来的格式为2021-01-05 00:00:00,这个东西作为参数直接就获取不到数据。实在不想重头改到尾,放弃使用sqlite,考虑使用mongodb(网上能成功的我看了一下应该代码比较旧了,我拉取的代码为:

因此之前网上的所有的做法由于代码的变动都失效了。

改用mongodb的比较容易 ,直接到官网上下载mongodb-windows-x86_64-5.0.6-signed.msi,进行安装后运行即可。

然后在vnpy的运行目录加上mongo的配置:

至此,主要的工作就做完了,剩下的就是将表格中的数据与

BarData的数据对齐即可

由于datetime是一个时间数据,在表格中我们是用两个字段来表示的,这一步比较费点精神:

    datetime_format = '%Y-%m-%d %H:%M't = data['时间'].astype('str')data['时间'] = pd.to_datetime(data['日期'] + " " + t.str[:-2] + ":" + t.str[-2:], format=datetime_format)del data['日期']

然后把字段名再进行对齐:

    data.columns = ['exchange', 'symbol', 'datetime', 'open', 'high', 'low', 'close', 'volume', '成交额','open_interest', 'interval']

最后通过接口把数据存入mongdb即可:

# 封装函数
def move_df_to_mongodb(imported_data: pd.DataFrame):bars = []start = Nonecount = 0for row in imported_data.itertuples():bar = BarData(symbol=row.symbol,exchange=row.exchange,datetime=row.datetime,interval=row.interval,volume=row.volume,open_price=row.open,high_price=row.high,low_price=row.low,close_price=row.close,open_interest=row.open_interest,gateway_name="DB",)bars.append(bar)# do some statisticscount += 1if not start:start = bar.datetimeend = bar.datetime# insert into databasemongo_manager.save_bar_data(bars)print(f"Insert Bar: {count} from {start} - {end}")

注意,存的过程会报错,这个没有去深究,因为我确定已经存成功了:

后面回头看了下错误细节:

百度搜索一下,确认是由于pymongo从4.1开始移除了update等相关函数,所以需要安装早一点版本的,看了一下系统的确实安装了4.0.1的pymongo,查看 vnpy_mongodb-1.0.1源码,在setup.cfg中查找到依赖项:

将之前的pymongo删除,安装指定版本,再次运行save_data.py, 发现错误消失

存完了以后可以直接运行candle_chart中的run.py,如果没有数据,运行的效果图如下:

数据存入成功后运行的效果图如下:

最后附上save_data.py代码:

from vnpy.trader.constant import (Exchange, Interval)
import pandas as pd
from vnpy.trader.object import (BarData, TickData)
from vnpy_mongodb import Databasemongo_manager = Database()# 封装函数
def move_df_to_mongodb(imported_data: pd.DataFrame):bars = []start = Nonecount = 0for row in imported_data.itertuples():bar = BarData(symbol=row.symbol,exchange=row.exchange,datetime=row.datetime,interval=row.interval,volume=row.volume,open_price=row.open,high_price=row.high,low_price=row.low,close_price=row.close,open_interest=row.open_interest,gateway_name="DB",)bars.append(bar)# do some statisticscount += 1if not start:start = bar.datetimeend = bar.datetime# insert into databasemongo_manager.save_bar_data(bars)print(f"Insert Bar: {count} from {start} - {end}")if __name__ == "__main__":# 读取需要入库的csv文件,该文件是用gbk编码data = pd.read_csv('RBL9.csv', encoding='gbk')# 将csv文件中 `市场代码`的 SC 替换成 Exchange.SHFE SHFEdata['市场代码'] = Exchange.SHFE# 增加一列数据 `inteval`,且该列数据的所有值都是 Interval.MINUTEdata['interval'] = Interval.MINUTE# 明确需要是float数据类型的列float_columns = ['开', '高', '低', '收', '成交量', '持仓量']for col in float_columns:data[col] = data[col].astype('float')datetime_format = '%Y-%m-%d %H:%M't = data['时间'].astype('str')data['时间'] = pd.to_datetime(data['日期'] + " " + t.str[:-2] + ":" + t.str[-2:], format=datetime_format)del data['日期']data.columns = ['exchange', 'symbol', 'datetime', 'open', 'high', 'low', 'close', 'volume', '成交额','open_interest', 'interval']move_df_to_mongodb(data)

最后感谢网上一个哥们的代码,很多做了参照,一下子找不到他的相关链接,后面找着了会补上参照的相关文章。

vnpy试用candle_chart相关推荐

  1. vnpy抽离candle_chart

    前面 vnpy试用candle_chart 弄出了一个K线图形,不过那个不是目的.真正的用意是做一个简单的图表,直接将给定的数据用图表显示出来,因此不能依赖vnpy,这个东西有点复杂,需要单纯化. 方 ...

  2. 0801-3 VNPY安装

    天知道我踩了多少坑 还是感谢各位前辈的贡献,让本小白一步一步摸索出坑 使用install bat 命令安装vnpy,需要cmd的管理员权限 而且用代码打开要求你输入管理员密码,我输入自己电脑密码根本不 ...

  3. 聚宽数据python_利用聚宽(Joinquant)数据源为vnpy添加期货行情数据

    ----------------July 9 2019--------------- ----------------July 9 2019--------------- 现在基于网络量化平台做的都很 ...

  4. qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...

    作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...

  5. casperjs 安装试用

    纠结了好久,一直报错, 具体错误信息现在已经忘了,后来看了官网的prerequisite,才知道要安装特定版本或greater 的 phantomjs 和 Python.我这边主要是没装python. ...

  6. 2019智能手表推荐_智能手表一定越贵越好?试用过后这五款才真正值得推荐

    随着技术的进步,年轻人手上的普通腕表进化成了智能手表,虽说几年前智能手表产品还存在功能单一和续航太短等问题,然而,经过几年的发展迭代,智能手表技术不断革新,带给人们更好的使用体验,也有越来越多的人愿意 ...

  7. 卡巴循环30天不限次数循环试用工具

    本文需评论之后方可查看! @echo off @title 卡巴循环30天不限次数循环试用工具 @echo off echo 卡巴循环30天不限次数循环试用工具 echo. echo ======== ...

  8. 从试用到使用:计算机视觉产业新一轮发展的起步年

    参加 2018 AI开发者大会,请点击官网报名 CSDN 出品的<2018-2019 中国人工智能产业路线图>V2.0 版即将重磅面世! V1.0 版发布以来,我们有幸得到了诸多读者朋友及 ...

  9. 代码审查规范(试用版)

    目录 1.背景 2.目标 3.流程 4.指定代码审查规范 4.1.命名风格 4.2.常量定义 4.3.代码风格 4.4.注释风格 4.5.控制语句 5.执行代码审查规范 6.开展PR Bash活动 1 ...

最新文章

  1. 如何查询土地规划用途_一秒辨别“三无产品”,护肤品的猫腻如何发现?
  2. SD-WAN如何安装在企业WAN中?—Vecloud
  3. 重磅!神策智能推荐获 2019 大数据“星河奖”
  4. 语音留言无法在电话上播放
  5. 前端学习(3096):vue+element今日头条管理-回顾
  6. Linux下redmine安装插件报错
  7. arm linux挂载ubi,挂载ubifs文件系统分区
  8. css3兼容性问题归纳
  9. 另外一个给微信企业号发信息的python脚本
  10. windows mobile设置插移动卡没反应_u盘插入电脑没反应怎么办 u盘插入电脑没反应解决方法【详解】...
  11. Hbase过滤器与scala编程
  12. Director 介绍
  13. 专业音频测试软件应用比对,(精品文献)专业音频测试软件应用比对(升级版)_汤磊.pdf...
  14. 网络性能指标及测试方法
  15. Amazon ParallelCluster 3 集成 ANSYS CFD 计算
  16. iOS12-Swift5-Xcode10 Buildtime错误:/xx/Pods/Target Support Files/Pods-xx/Pods-xx.d
  17. 司马迁的智慧—东方最早的经济学综合论文《货殖列传》
  18. Lind.DDD.Events领域事件介绍
  19. 解除UVW贴图的疑惑
  20. java屏蔽游戏中骂人的话,替换为*,屏蔽敏感词汇

热门文章

  1. uni-app 整包升级/更新方案
  2. 关于微信小程序接入珊瑚助手踩过的雷
  3. 对话屏幕Dynpro(SE51) 屏幕元素 屏幕属性 PAI事件的触发、屏幕元素Function Code设置 屏幕流逻辑Screen Flow Logic 对话屏幕中的字段命名大小写问题
  4. 量子计算与量子信息之Python-qiskit实现量子隐形传态
  5. android原理分析博客,高通Android平台下zoom4X实验原理分析(一)
  6. DialogResult
  7. 个人成长系列:业务、技术学习书单
  8. 亿道信息丨12.2英寸二合一笔记本丨加固型笔记本丨三防笔记本
  9. 从零开始单排学设计模式「装饰模式」黑铁 I
  10. netty 工控网关_开源纯C#工控网关+组态软件(九)定制Visual Studio