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

估计大家都已经陆续复工了吧,国内疫情逐步缓和,国外反而开始全球爆发。最近全球金融市场的动荡走势,已经相当接近次贷危机期间的情形:
 

  • 今天中国引领欧美,明天欧美再引领中国
  • 原油带着其他商品一起暴跌
  • 抛资产买美元和美国国债,Risk Off模式

总之,现阶段如果手上有策略在跑的,复杂点的基于VaR模型,简单点的基于ATR指标,都得开始逐步降低仓位,平衡风险敞口暴露了吧。

抛开题外话回到vn.py,周二发布的v2.1.1版本主要更新了历史数据管理方面的功能,和之前一样,对于使用VN Studio的用户,启动VN Station后,直接点击界面右下角的【更新】按钮 就能完成自动更新升级。

对于没有安装的用户,请下载 VNStudio-2.1.1,体验一键安装的量化交易Python发行版,下载链接:

下载地址

 

DataManager模块

 

v2.1.1新增的DataManger模块,是VN Trader内部针对历史数据的全功能管理工具。

 

数据导入

 

打开DataManager模块的界面后,点击右上角的【导入数据】按钮,即可看到如下图所示的对话框:
 

description

 
该对话框复用了CsvLoader组件中的功能:

  1. 点击顶部的【选择文件】按钮,来选择要加载的CSV文件路径;
  2. 在合约信息中,输入合约代码,选择对应的交易所和周期;
  3. 查看CSV文件的表头信息,并将对应的表头字符串输入在表头信息中,对于【持仓量】字段,如果CSV文件中不存在的话(比如股票数据)请留空即可
  4. 在格式信息中,配置时间戳的日期时间格式,用于后续的时间解析处理
  5. 点击【确定】按钮,开始从CSV文件导入数据到数据库中。

导入过程中界面会处于半卡住的情况,对于越大的CSV文件(数据量越多),卡住的时间也会越长。

最后需要注意的是,这里导入的合约代码(symbol)和交易所(exchange)两个字段组合起来,才能构成在CTA回测等模块中使用的 本地代码(vt_symbol)。举例来说,合约代码为IF2003,交易所选择CFFEX(中金所),则在CtaBacktester中回测要用到的本地代码应为IF2003.CFFEX

 

数据查看

 
目前VN Trader中获取数据的方式一共有三种:

  • 通过RQData下载
  • 从CSV文件导入
  • 使用DataRecorder模块录制

不管采用何种方法获取数据,点击左上角的【刷新】按钮,即可看到当前数据库中已有数据的统计情况。

统计情况采用树形结构显示,包括分钟线、小时线和日线三类,每一组数据都包括了总数据量、开始时间、结束时间等信息。

选择任意一个合约,点击该合约行数据右侧的【查看】按钮后,弹出对话框:
 

description

 

选择好要显示的数据范围后,点击【确定】按钮即可在右侧表格中看到每个时间点上具体的数据字段:
 

DataManger_5

 

数据导出

 

除了从CSV导入数据外,社区用户也提出了将数据库中的数据导出为CSV文件的需求。对于熟悉vn.py的用户可能20行代码就能解决问题,不过考虑到对于新用户的友好性,还是决定将导出功能集成到了图形界面上。

选择任意一个合约,点击该合约行数据右侧的【导出】按钮后,再次弹出对话框:

 
description

 

选好要导出的数据区间范围点击【确定】后,会再次弹出对话框选择输出文件的位置,输入确定即可完成CSV文件的导出。

 

RPC公网加密通讯

 

从发布过了差不多大半年后,越来越多的用户开始使用vnpy.rpc模块(基于ZeroMQ开发)来对标准的VN Trader进行扩展,构建各类分布式的交易应用程序。

早期版本的ZeroMQ官方文档中,有提到过ZeroMQ并不适合直接在公网(即互联网)上使用、主要原因是其通讯收发的数据,原生并没有提供任何加密和安全验证功能。用户需要自行实现客户端访问服务端时的登录机制,以及登录后的双向数据加密功能,否则就只能在可信安全的环境内通讯,比如本机跨进程或者公司局域网。

好消息是,最新版本的ZeroMQ已经内置了多个级别的鉴权机制,其中包括了专门用于公网(互联网)通讯的CURVE加密模式。最新版本的vnpy.rpc模块中也已经实现了对CURVE加密功能的支持,使用步骤如下:

  1. 在任意目录打开cmd,运行python进入交互式模式
  2. 加载模块:import vnpy.rpc
  3. 生成客户端秘钥:vnpy.rpc.generate_certificates("client")
  4. 生成服务端秘钥:vnpy.rpc.generate_certificates("server")
  5. 在该目录下找到certificates目录,进入其中找到已经生成好的公钥和私钥
  6. 创建RpcServer对象后,在start时传入参数server_secretkey_path(服务器私钥文件路径)
  7. 创建RpcClient对象后,在start时传入参数client_secretkey_path(客户端私钥文件路径)和server_publickey_path(服务器私钥文件路径)

以上过程代码可以参考examples/simple_rpc中的示例,完成上述操作后可以起到两个安全保护作用:

  • 只有拿到服务器公钥的客户端才能连接服务器
  • 服务器和客户端互相发送数据时,均会使用自身的私钥加密

有点稀里糊涂看不懂?没关系,只需要知道这样加密后的双向加密通讯几乎是不可能被破解的就行了~

 

其他更新

 
老规矩,v2.1.1版本也新增了一个接口:

  • SgitGateway,飞鼠柜台接口,主要提供上海黄金交易所的黄金T+D交易

此外,v2.1.1也对中泰证券的XTP接口进行了重构开发(包括api和gateway),恢复到和CTP同样的封装模式(基于pybind11),除了支持股票和两融外,也完整支持了上交所和深交所的ETF期权交易功能。

《vn.py全实战进阶 - 期权零基础入门》课程已经更新过半!内容专门面向从未接触过期权交易的新手,共计30节课程带你一步步掌握期权的基础知识、了解合约特征和品种细节、学习方向交易和套利组合等各种常用期权交易策略,详细内容请戳新课上线:《期权零基础入门》