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

发布于vn.py社区公众号【vnpy-community】
 
原文作者:用Python的交易员 | 发布时间:2021-09-26
 

昨天发布了vn.py的2.6.0版本,本次更新的内容主要是新增了一系列专门针对金融时序数据的高性能数据库支持,包括:DolphinDB、Arctic和LevelDB,大幅提高各类量化策略回测研究的效率。

请注意,2.6.0新版本中包含了对数据库(database)和数据服务(datafeed)全局配置字段的修改,老版本用户升级后需要重新手动配置,具体请参考后面对应的章节内容。

和之前一样,对于使用VN Studio的用户,启动VN Station后,直接点击界面右下角的【更新】按钮就能完成自动更新升级,对于没有安装的用户,请下载VN Studio-2.6.0,体验一键安装的量化交易Python发行版,下载链接:

https://download.vnpy.com/vnstudio-2.6.0.exe

 

高性能数据库支持

 

全局配置变化

在2.6.0新版本中,参考vn.py对于交易接口的标准化设计BaseGateway(位于vnpy.trader.gateway中),添加了对于数据库适配器的标准化接口BaseDatabase(位于vnpy.trader.database中),实现简洁易用的插件化数据库支持。

新版本的VN Trader全局配置中,和数据库相关的字段全部以database作为前缀,如下图所示(点击主界面顶部菜单栏的【配置】按钮打开):

description

具体字段含义如下:

  • database.timezone:数据库时区,考虑到大部分用户都在国内,一般无需修改;
  • database.name:数据库适配器接口的名称,通常采用数据库全称的小写英文字母;
  • database.database:数据库中用于保存vn.py相关数据的实例,例如SQLite的文件名、MySQL的Schema等;
  • database.host:数据库服务器程序所在的IP地址,如果安装于本地电脑则直接使用localhost;
  • database.port:数据库服务器程序监听的IP端口,不同数据库的默认端口不同;
  • database.user:数据库的登录用户名;
  • database.password:数据库的登录密码。

2.6.0版本对原有的数据库适配器(vnpy.database)进行了剥离和代码优化,放置到了对应的独立仓库中,允许用户按需安装,这下用Linux系统的同学们再也不用为psycopg2(PostgreSQL数据库驱动)的安装折腾了。

具体的数据库配置请参考下文。

 

DolphinDB

description

项目地址:vnpy_dolphindb

DolphinDB是由浙江智臾科技有限公司研发的一款高性能分布式时序数据库,特别适用于对速度要求极高的低延时或实时性任务,在国内外金融投资领域有着丰富的应用案例。

作为国产数据库的DolphinDB,在定位上对标的是世界顶级的金融时序数据库Kdb+。目前2.6.0版本支持的所有数据库中,DolphinDB的读写速度均占据No.1的位置。由于目前我们只采用了简单的分区数据表设计,理论上还有进一步优化的空间。

description

尽管DolphinDB是商业软件,但是也提供了免费的社区版,在安装时注意要选择2.0的Beta版本,我们会在下一篇公众号文章中详细介绍DolphinDB的特点和使用方法

 

Arctic(MongoDB)

description

项目地址:vnpy_arctic

由英国量化对冲基金Man AHL基于MongoDB开发的高性能金融时序数据库,我们团队对于Arctic的了解来源于公众号【量化投资与机器学习】的这篇文章《盘点对冲基金大佬『开源』的Python工具包!》。

简单总结一下Arctic的优势:

  • 支持直接存储pandas的DataFrame和numpy的ndarray对象,在量化投研中可太实用了;
  • 允许对数据进行版本化管理(类似于数据库中的git),便于因子挖掘过程中的数据迭代管理;
  • 基于分块化存储和LZ4压缩,在网络和磁盘IO方面节省大量资源,实现每秒最高每秒百万行的数据查询。

description

Arctic底层使用的是MongoDB数据库服务器,因此安装时直接前往MongoDB官网下载最新版本安装即可。目前不支持自定义端口、用户名、密码等修改,因此请保持默认配置。

 

LevelDB

description

项目地址:vnpy_leveldb

由Google推出的高性能Key/Value数据库,基于LSM算法实现进程内存储引擎,支持数十亿级别的海量数据。LevelDB的定位是通用性数据存储方案,对于金融领域的时序数据存储没有特别大的优势,但也比一堆SQL类数据库快多了。

关于LevelDB的作者Google传奇工程师Jeff Dean,在知乎上有一个非常有趣的讨论,感兴趣的同学可以看看:有谁可以介绍一下谷歌大牛Jeff Dean以及与他相关的事迹么?

description

作为单机数据库的LevelDB,和SQLite类似只需要配置一个数据存储的路径(文件夹)即可,适合作为SQLite的轻量级高性能替代方案。

 

原有数据库

之前版本中原有的数据库适配器也都进行了剥离优化:

  • SQL类

  • NoSQL类

    • MongoDB:剥离到vnpy_mongodb,改用pymongo替代mongoengine重构实现,大幅提高了性能;
    • InfluxDB:剥离到vnpy_influxdb,改用influxdb-client支持2.0版本的InfluxDB。

 

灵活数据服务支持

 

全局配置变化

和数据库适配器类似,对于数据服务也新增了标准化接口BaseDatafeed(位于vnpy.trader.datafeed中),实现了更加灵活的数据服务支持。在全局配置中,和数据服务相关的字段全部以datafeed作为前缀。

具体字段含义如下:

  • datafeed.name:数据服务接口的名称,同样是全称的小写英文字母;
  • datafeed.username:数据服务的用户名;
  • datafeed.password:数据服务的密码。

以上字段对于所有数据服务都是必填,如果是token方式授权请填写在database.password字段中,具体每个数据服务的细节如下。

 

RQData

米筐RQData一直以来是我们vn.py官方团队长期推荐的数据服务,对于大部分个人投资者应该是性价比较高的选择:

  • 项目地址:vnpy_rqdata
  • 数据分类:股票、期货、期权、基金、黄金TD
  • 数据周期:日线、小时线、分钟线、TICK(实时更新)
  • 注册申请:RICEQUANT

 

UData

恒有数UData是由恒生电子最新推出的云端数据服务,提供不限次、不限量的多种金融数据获取:

  • 项目地址:vnpy_udata
  • 数据分类:股票、期货
  • 数据周期:分钟线(盘后更新)
  • 注册申请:恒有数UData

 

TuShare

国内知名的开源Python金融数据接口项目,由大神Jimmy团队长期开发维护,除了行情数据外还提供许多另类数据:

 

TQSDK

天勤TQSDK是由信易科技推出的Python程序化交易解决方案,提供当前所有可交易合约上市以来的全部历史数据获取:

 

其他更新

 

价差交易模块优化

2.6.0版本中对SpreadTrading模块(vnpy_spreadtrading)进行了大幅优化,包括:

  1. 移除对反向合约、交易开平选项的支持,减少价差交易算法中的整体逻辑长度;
  2. 移除对老版本中线性价差的支持,统一改为使用灵活价差,提供更加灵活的价差构建方案;
  3. 当用户手动或者由策略停止价差交易算法时,必须等到全部委托结束且各条腿平衡后,算法才会结束运行,避免出现价差瘸腿;
  4. 价差的持仓数据不再使用账户底层各个合约的持仓计算,而是改为基于价差算法的成交结果进行维护,方便在多个价差中使用同一条合约腿。

以上功能优化涉及到对价差交易配置文件的修改,如果在启动VN Trader时出现和SpreadTrading相关的报错,请进入程序运行缓存目录(C:\Users\Administrator.vntrader),删除下述文件后重启即可:

  • spread_trading_setting.json
  • spread_trading_advanced.json
  • spread_trading_strategy.json

交易应用模块剥离

  1. OptionMaster期权波动率交易模块,剥离到vnpy_optionmaster项目中;
  2. ChartWizard图表分析模块,剥离到vnpy_chartwizard项目中;
  3. DataRecorder实盘数据录制模块,剥离到vnpy_datarecorder项目中。

 

CHANGELOG

 

新增

  1. 增加双边报价业务的发送和撤销函数功能
  2. 增加双边报价监控UI组件
  3. 增加用于对接数据库的抽象接口vnpy.trader.database
  4. 新增基于Arctic的MongoDB数据库接口项目vnpy_arctic
  5. 新增LevelDB数据库接口项目vnpy_leveldb
  6. 新增DolphinDB数据库接口项目vnpy_dolphindb
  7. 增加用于对接数据服务的抽象接口vnpy.trader.datafeed
  8. 新增TuShare数据服务项目vnpy_tushare
  9. 新增恒生UData数据服务项目vnpy_udata
  10. 新增天勤TQSDK数据服务项目vnpy_tqsdk
  11. 新增CoinAPI数据服务项目vnpy_coinapi

调整

  1. 移除批量委托和批量撤单相关的函数功能
  2. 移除老虎证券交易接口TigerGateway
  3. 移除鑫管家交易接口XgjGateway
  4. 移除AlgoTrading算法交易模块对于金纳算法服务的支持
  5. RestClient增加对操作系统代理配置的支持
  6. RestClient和WebsocketClient的默认异常处理逻辑由抛出异常修改为打印输出
  7. 价差交易模块移除对反向合约、线性价差、开平字段的支持
  8. 价差交易模块优化对灵活价差的支持,优化价差行情推送过滤判断
  9. 价差交易算法停止时,等待全部委托结束、各条腿平衡后,再结束算法

修复

  1. 修复在Linux/Mac系统上,运行多进程优化时的进程启动错误
  2. 修复WebsocketClient由于心跳机制不完善,导致的频繁断线问题

剥离

  1. 将米筐数据接口剥离到vnpy_rqdata项目中,并升级到2.9.38版本
  2. 将行情录制模块剥离到vnpy_datarecorder项目中
  3. 将K线图表模块剥离到vnpy_chartwizard项目中
  4. 将SQLite数据库接口剥离到vnpy_sqlite项目中
  5. 将MySQL数据库接口剥离到vnpy_mysql项目中
  6. 将PostgreSQL数据库接口剥离到vnpy_postgresql项目中
  7. 将MongoDB数据库接口剥离到vnpy_mongodb项目中
  8. 将InfluxDB数据库接口剥离到vnpy_influxdb项目中
  9. 将期权波动率交易模块剥离到vnpy_optionmaster项目中
Member
avatar
加入于:
帖子: 2
声望: 0

tushare该如何使用呢

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

2.6版本是否向下兼容啊?

Member
avatar
加入于:
帖子: 5055
声望: 305

不是

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

部分包更新失败怎么解决呢

Administrator
avatar
加入于:
帖子: 4548
声望: 325

浓汤野人 wrote:

部分包更新失败怎么解决呢

通常再次更新即可,如果持续失败可能是到pypi的网络连接问题,请直接卸载安装最新版本VNStudio

Administrator
avatar
加入于:
帖子: 4548
声望: 325

浓汤野人 wrote:

部分包更新失败怎么解决呢

通常再次更新即可,如果持续失败可能是到pypi的网络连接问题,请直接卸载安装最新版本VNStudio

Administrator
avatar
加入于:
帖子: 4548
声望: 325

浓汤野人 wrote:

部分包更新失败怎么解决呢

通常再次更新即可,如果持续失败可能是到pypi的网络连接问题,请直接卸载安装最新版本VNStudio

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

description

前缀写错了吧 应该是Datafeed 吧

Administrator
avatar
加入于:
帖子: 4548
声望: 325

anzejia wrote:

description

前缀写错了吧 应该是Datafeed 吧

已修改,感谢反馈

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

请问 tushare的怎么填写这几个字段啊?
datafeed.name:tushare 对不?
datafeed.username: 用户名不清楚是哪个?

description
是id? 是邮箱?

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

anzejia wrote:

请问 tushare的怎么填写这几个字段啊?
datafeed.name:tushare 对不?
datafeed.username: 用户名不清楚是哪个?

description
是id? 是邮箱?

应该没影响的,tushare 这是依赖 token,就是 vnpy 的 datafeed.password

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

vnpy_arctic 这个 repo 没有了,是删了?不再支持的意思?

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

您好,DolphinDB 和talib 在调用numpy有版本冲突问题。
安装dolphindb 模块要求使用numpy-1.19.3,但是numpy切换到这个版本后talib无法调用。
description

description

Administrator
avatar
加入于:
帖子: 4548
声望: 325

zion wrote:

您好,DolphinDB 和talib 在调用numpy有版本冲突问题。
安装dolphindb 模块要求使用numpy-1.19.3,但是numpy切换到这个版本后talib无法调用。
description

description

这个可能因为你的talib是自行编译安装的,请使用VNStudio-2.6.0试试吧

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

数据库配置成Arctic后,重启trader pro直接抛异常,启动失败了,有遇到过类似的问题的么,异常的窗口还不能复制,一点就卡死了。

description

Administrator
avatar
加入于:
帖子: 4548
声望: 325

请在cmd中用python -m vnstation启动,然后截图下完整的报错输出

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

用Python的交易员 wrote:

请在cmd中用python -m vnstation启动,然后截图下完整的报错输出
这个方法好,赞。

description
看样子是pandas的问题,帮忙看看是需要手动降版本么?

Member
avatar
加入于:
帖子: 716
声望: 63

对的,arctic要求pandas版本低于或等于1.0.3

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

郭易燔 wrote:

对的,arctic要求pandas版本低于或等于1.0.3

降低版本后正常了,arctic使用pandas的Panel,需要pandas的版本<=1.0.3,vnpy2.6中默认安装的是1.3.3,需要手动降低版本
卸载1.3.3

pip uninstall pandas

安装版本1.0.3

pip install pandas==1.0.3
# 或者使用国内镜像
pip install pandas==1.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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