发布于vn.py社区公众号【vnpy-community】

 

原文作者:用Python的交易员 | 发布时间:2019-09-27

 

全新的v2.0.7版本vn.py已于上周完成所有发布工作,对于使用VNStudio的用户,启动VN Station后,直接点击界面右下角的【更新】按钮就能完成自动更新升级。

 

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

 

SpreadTrading模块

 

这次版本的开发时间较长,离上一版本v2.0.6的发布已经过去了差不多两个月的时间,主要因为针对SpreadTrading价差交易模块,做了比较彻底的重构改进。

 

先来回顾下v1.9.2版本中老的SpreadTrading模块的管理界面:

 

description

 

之前收集过大概十来家专门做套利策略的中小型机构投资者(私募、自营),该版本已经能满足他们的核心需求:

 

  • 自由定义价差,支持任意数量腿
  • 全自动计算价差的买卖价格盘口和持仓数据
  • 通过价差算法交易来执行价差盘口捕捉下单
  • 算法内置单腿风险对冲、固定范围来回交易

 

但吐槽点也不少:

 

  • 必须通过手写json文件来配置价差(非常容易写错)
  • 每个合约(腿)只能属于一个价差
  • 价差算法的执行目标价格无法自动调整,只能手动控制
  • 没有标准的模板支持用于开发价差套利策略

 

所以重构过程中的大部分精力都花在了价差业务逻辑的精细梳理和重新设计上,确定方案后写代码和做测试到相对较快(毕竟干这活都5年了嘛)。

 

这里我们先撇开繁琐的内部代码实现不谈,直接用最新v2.0.7版的vn.py加载模块跑起来:

 

description

 

启动VN Station,打开VN Trader Pro的配置界面后,勾选BitMEX接口和SpreadTrading应用,点击【启动】按钮后进入VN Trader主界面。

 

接下来连接BitMEX接口后(不会的请看本公众号的入门教程),打开价差交易管理界面(左侧红绿箭头的那个图标):

 

description

 

除了左下方的日志监控组件中有三条引擎启动的信息外,目前整个界面空空如也。

 

创建价差

 

第一步是根据自己的需求创建价差组合,点击右下角的【创建价差】按钮:

 

description

 

以上信息中:

 

  • 价差名称:自定义字符串,建议起个带有描述性的名字,不要和已有的价差重复就行

  • 主动腿代码:价差盘口价格满足条件时,先发出的那条腿的本地代码vt_symbol,必须是下面某条腿的代码

  • 每条腿请根据实际需求配置,不必都填满:

    • 本地代码:该合约的本地代码vt_symbol
    • 价格乘数:计算价差的价格时所用的乘数(只考虑价格本身)
    • 交易乘数:计算持仓和执行交易所用的乘数(需要考虑合约乘数)

 

尽管在内部引擎中每个价差同样支持任意数量的腿,但考虑到大部分用户的需求,UI界面上只提供了5条腿的设置(估计大部分人也就用到3条)。

 

在对话框中照着上图输入信息,点击【创建价差】按钮,即可完成一个BitMEX交易所的比特币永续合约XBTUSD.BITMEX以及到期期货XBTU19.BITMEX之间的日历价差创建。

 

价差数据

 

完成价差的创建后,数据引擎会自动订阅每条腿的实时行情,并在后台完成价格和持仓的计算和更新:

 

description

 

在左上角的价差监控组件中,我们已经可以看到刚刚创建的xbt合约价差,其中:

 

  1. 买卖价分别基于两条腿对价执行的最优盘口价格计算
  2. 买卖量则是取了两条腿最优盘口挂单量的较小值
  3. 净仓则是取每条腿净持仓量对应价差持仓量中的较小值

 

执行算法

 

此时我们希望买入做多这个价差,考虑到卖价在28.5的位置,我们直接以略高的价格80来下单做多5手该价差:

 

description

 

在最左上角的交易组件中输入以上信息,点击【启动】按钮后则会立即启动一个买入价差算法,简单理解这个算法的作用,就是把原来要同时交易两条腿分别执行的这件事,封装简化为了类似单个委托下单的操作(只不过交易的对象变成了上一步中我们定义的价差xbt)。

 

description

 

右上角的算法监控组件中,我们可以看到这个算法的实时运行情况,包括方向、触发价格(类似限价)、总数量、已成交量、当前状态等信息。类似主界面的委托监控组件双击撤单,直接双击上面的单元格就能停止一个运行中的算法。

 

description

 

同时日志监控组件中,也会有该算法在运行过程中的交易细节的信息输出,这里可以看到是先发出了主动腿XBTUSD.BITMEX的买入委托,在收到其成交回报后,再立即发出了XBTU19.BITMEX的卖出委托,也收到成交回报后则该笔算法执行完毕。

 

description

 

这时再回去看价差的净持仓数量,可以看到也已经变为了5手的多头持仓。

 

价差策略

 

除了通过手动的方式来启动算法买卖价差外,新的SpreadTrading模块也同样支持用户使用策略模板SpreadStrategyTemplate来开发各种价差类的量化交易策略,在v2.0.7版本中我们内置了BasicSpreadStrategy,对标v1.9.2版本中的固定价格来回买卖的价差算法功能:

 

description

 

点击上图中的【添加策略】按钮来创建一个新的策略实例(有没有觉得和CTA策略模块很像?)。

 

description

 

在弹出的对话框中,输入策略的配置信息,其中:

 

  • strategy_name:策略名,自定义即可,不能重复
  • spread_name:价差名,之前定义的xbt
  • buy_price/sell_price/cover_price/short_prie:四个方向的交易价格,根据自己的实际交易需求进行设置
  • max_pos:价差的最大持仓数量,来回买卖时会保证持仓量不超过这个数
  • payup:下单时的超价
  • interval:下单后到撤单前等待的时间(秒)

 

点击【添加】按钮后,在右下方的策略监控组件中,可以看到该策略的状态信息:

 

description

 

对于老用户来说,是不是非常的眼熟?和CTA策略几乎完全一样的管理界面,怎么用这里就不多说了。

 

需要注意的是,尽管和CTA策略模块在某些方面看起来很类似(管理UI界面、策略开发模板),但实际内部的代码实现还是有着较大的区别。尤其是价差策略模板SpreadStrategyTemplate,除了回调函数和CTA策略模板有较多不同外,在内部引擎的调度方面也是针对价差交易的特点专门设计(比如可以访问账户底层持仓,而不再是策略逻辑持仓),用的时候请注意区别。

 

线下活动

 

10月份将分别在北京(10月13日)和成都(10月27日)举办一场以价差交易为主题的社区线下活动,讲解更多关于如何使用SpreadTrading模块来实现和开发价差套利策略的细节。

 

内容:

  1. SpreadTrading模块:价差交易解决方案
  2. 价差交易SpreadingAlgo的原理讲解
  3. 基于SpreadTrading的多品种跨市场统计套利策略
  4. QA问答环节(所有关于vn.py的问题都欢迎)

 

名额:40人

报名费:99元

 

北京活动报名请扫描:

description

 

成都活动报名请扫描:

 

description

报名的时候注意看清楚,别弄错了城市啊......

 

新增接口

 

按照惯例,新版本也是增加了一系列的接口:

 

  • SecGateway:CTP的ETF期权接口,注意目前只有曾经报备过期权程序化接入的老账户才能用
  • DaGateway:直达期货接口,国内专业投资者交易海外期货市场最好的通道之一(手续费、延时等对比IB优势明显)
  • XgjGateway:鑫管家期货资管系统接口
  • RohonGateway:融航期货资管系统接口
  • OkexsGateway:OKEX数字货币永续合约接口
  • CoinbaseGateway:Coinbase数字货币现货接口

 

其中RohonGateway和XgjGateway两个期货资管接口,尽管和CTP高度类似(官方建议是直接替换dll文件就能用),但实测下来还是需要编译避免某些函数找不到的情况,所以索性由vn.py官方来支持掉了,注意运行时需要VC++的运行时环境,请安装vcredist x64的2010、2013、2017三个版本。

 

其他更新

 

最后,针对RPC模块(vnpy.rpc)增加多线程安全支持以及内置的心跳机制,解决某些vn.py深度用户在部署内网分布式交易环境时的通讯问题。