发布于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作为前缀,如下图所示(点击主界面顶部菜单栏的【配置】按钮打开):
具体字段含义如下:
- 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
项目地址:vnpy_dolphindb
DolphinDB是由浙江智臾科技有限公司研发的一款高性能分布式时序数据库,特别适用于对速度要求极高的低延时或实时性任务,在国内外金融投资领域有着丰富的应用案例。
作为国产数据库的DolphinDB,在定位上对标的是世界顶级的金融时序数据库Kdb+。目前2.6.0版本支持的所有数据库中,DolphinDB的读写速度均占据No.1的位置。由于目前我们只采用了简单的分区数据表设计,理论上还有进一步优化的空间。
尽管DolphinDB是商业软件,但是也提供了免费的社区版,在安装时注意要选择2.0的Beta版本,我们会在下一篇公众号文章中详细介绍DolphinDB的特点和使用方法。
Arctic(MongoDB)
项目地址:vnpy_arctic
由英国量化对冲基金Man AHL基于MongoDB开发的高性能金融时序数据库,我们团队对于Arctic的了解来源于公众号【量化投资与机器学习】的这篇文章《盘点对冲基金大佬『开源』的Python工具包!》。
简单总结一下Arctic的优势:
- 支持直接存储pandas的DataFrame和numpy的ndarray对象,在量化投研中可太实用了;
- 允许对数据进行版本化管理(类似于数据库中的git),便于因子挖掘过程中的数据迭代管理;
- 基于分块化存储和LZ4压缩,在网络和磁盘IO方面节省大量资源,实现每秒最高每秒百万行的数据查询。
Arctic底层使用的是MongoDB数据库服务器,因此安装时直接前往MongoDB官网下载最新版本安装即可。目前不支持自定义端口、用户名、密码等修改,因此请保持默认配置。
LevelDB
项目地址:vnpy_leveldb
由Google推出的高性能Key/Value数据库,基于LSM算法实现进程内存储引擎,支持数十亿级别的海量数据。LevelDB的定位是通用性数据存储方案,对于金融领域的时序数据存储没有特别大的优势,但也比一堆SQL类数据库快多了。
关于LevelDB的作者Google传奇工程师Jeff Dean,在知乎上有一个非常有趣的讨论,感兴趣的同学可以看看:有谁可以介绍一下谷歌大牛Jeff Dean以及与他相关的事迹么?
作为单机数据库的LevelDB,和SQLite类似只需要配置一个数据存储的路径(文件夹)即可,适合作为SQLite的轻量级高性能替代方案。
原有数据库
之前版本中原有的数据库适配器也都进行了剥离优化:
SQL类
- SQLite:剥离到vnpy_sqlite;
- MySQL:剥离到vnpy_mysql;
- PostgreSQL:剥离到vnpy_postgresql;
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团队长期开发维护,除了行情数据外还提供许多另类数据:
- 项目地址:vnpy_tushare
- 数据分类:股票、期货
- 数据周期:日线、分钟线(盘后更新)
- 注册申请:Tushare大数据社区
TQSDK
天勤TQSDK是由信易科技推出的Python程序化交易解决方案,提供当前所有可交易合约上市以来的全部历史数据获取:
- 项目地址:vnpy_tqsdk
- 数据分类:期货
- 数据周期:分钟线(实时更新)
- 注册申请:天勤量化 - 信易科技 (shinnytech.com)
其他更新
价差交易模块优化
2.6.0版本中对SpreadTrading模块(vnpy_spreadtrading)进行了大幅优化,包括:
- 移除对反向合约、交易开平选项的支持,减少价差交易算法中的整体逻辑长度;
- 移除对老版本中线性价差的支持,统一改为使用灵活价差,提供更加灵活的价差构建方案;
- 当用户手动或者由策略停止价差交易算法时,必须等到全部委托结束且各条腿平衡后,算法才会结束运行,避免出现价差瘸腿;
- 价差的持仓数据不再使用账户底层各个合约的持仓计算,而是改为基于价差算法的成交结果进行维护,方便在多个价差中使用同一条合约腿。
以上功能优化涉及到对价差交易配置文件的修改,如果在启动VN Trader时出现和SpreadTrading相关的报错,请进入程序运行缓存目录(C:\Users\Administrator.vntrader),删除下述文件后重启即可:
- spread_trading_setting.json
- spread_trading_advanced.json
- spread_trading_strategy.json
交易应用模块剥离
- OptionMaster期权波动率交易模块,剥离到vnpy_optionmaster项目中;
- ChartWizard图表分析模块,剥离到vnpy_chartwizard项目中;
- DataRecorder实盘数据录制模块,剥离到vnpy_datarecorder项目中。
CHANGELOG
新增
- 增加双边报价业务的发送和撤销函数功能
- 增加双边报价监控UI组件
- 增加用于对接数据库的抽象接口vnpy.trader.database
- 新增基于Arctic的MongoDB数据库接口项目vnpy_arctic
- 新增LevelDB数据库接口项目vnpy_leveldb
- 新增DolphinDB数据库接口项目vnpy_dolphindb
- 增加用于对接数据服务的抽象接口vnpy.trader.datafeed
- 新增TuShare数据服务项目vnpy_tushare
- 新增恒生UData数据服务项目vnpy_udata
- 新增天勤TQSDK数据服务项目vnpy_tqsdk
- 新增CoinAPI数据服务项目vnpy_coinapi
调整
- 移除批量委托和批量撤单相关的函数功能
- 移除老虎证券交易接口TigerGateway
- 移除鑫管家交易接口XgjGateway
- 移除AlgoTrading算法交易模块对于金纳算法服务的支持
- RestClient增加对操作系统代理配置的支持
- RestClient和WebsocketClient的默认异常处理逻辑由抛出异常修改为打印输出
- 价差交易模块移除对反向合约、线性价差、开平字段的支持
- 价差交易模块优化对灵活价差的支持,优化价差行情推送过滤判断
- 价差交易算法停止时,等待全部委托结束、各条腿平衡后,再结束算法
修复
- 修复在Linux/Mac系统上,运行多进程优化时的进程启动错误
- 修复WebsocketClient由于心跳机制不完善,导致的频繁断线问题
剥离
- 将米筐数据接口剥离到vnpy_rqdata项目中,并升级到2.9.38版本
- 将行情录制模块剥离到vnpy_datarecorder项目中
- 将K线图表模块剥离到vnpy_chartwizard项目中
- 将SQLite数据库接口剥离到vnpy_sqlite项目中
- 将MySQL数据库接口剥离到vnpy_mysql项目中
- 将PostgreSQL数据库接口剥离到vnpy_postgresql项目中
- 将MongoDB数据库接口剥离到vnpy_mongodb项目中
- 将InfluxDB数据库接口剥离到vnpy_influxdb项目中
- 将期权波动率交易模块剥离到vnpy_optionmaster项目中