vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 526
声望: 24

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

v2.1.2版本的vn.py已经于本周三正式发布,此次主要更新的内容包括多标的组合策略模块PortfolioStrategy以及OptionMaster模块对于数字货币反向期权合约的支持。

 

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

下载地址

 

PortfolioStrategy模块

 

PortfolioStrategy模块专门针对需要同时交易多合约的量化策略设计,满足其历史数据回测和实盘自动交易的需求,一些策略例子包括:

 

  • ETF基金轮动策略
  • 期货多空组合策略
  • 量化资产配置策略
  • 期权套利类策略
  • 波动率交易策略
  • 股票Alpha类策略

 

目前模块自带的Demo策略只有个最简单的趋势跟踪策略(AtrRsiStrategy移植过来的),后面更新中争取会把上述每个策略类型都提供一个Demo。

 

相同点

 

PortfolioStrategy模块在设计上为了降低大家的学习成本,采用了尽可能接近CTA策略模块的方案。下图中展示的是一套铁矿石期权平价套利策略在Jupyter Notebook中的回测结果,同时涉及到三个合约,包括看涨期权、看跌期权、铁矿石期货:

 

description

 

除了上图中的回测功能外,PortfolioStrategy的实盘自动交易管理界面也和CtaStrategy比较相似,只是少掉了右上角停止单状态的显示区域:

 

description
 

对于已经掌握CTA策略开发的用户来说,基本可以无缝过渡到多标的组合策略开发上:

 

  1. 继承策略模板StrategyTemplate,创建一个新的策略类
  2. 在回调函数on_bars中,接收K线行情推送,并实现核心交易逻辑
  3. 调用buy/sell/short/cover/cancel_order等函数来发送交易请求

 

不同点

 

当然,毕竟是针对不同类型的量化策略,PortfolioStrategy在一些细节方面和CTA策略模块还是有所区别:

 

CtaStrategyCTA策略 PortfolioStrategy组合策略
K线推送 on_bar收到单一合约的K线 on_bars同时收到所有合约的K线
TICK推送 on_tick回测和实盘均支持 on_tick只有实盘中会调用,回测不支持
成交推送 on_trade
委托推送 on_order
查询持仓 通过访问策略的pos获取 调用get_pos获取某一合约的持仓
查询委托 调用get_order获取某一委托的状态
查询活动委托号 调用get_all_active_orderids获取当前全部活动委托号
交易委托 buy/sell/short/cover只需传入价格、数量 buy/sell/short/cover需要传入合约代码、价格、数量

 

其中最主要的区别,在于组合策略在接收K线推送时,是通过on_bars回调函数一次性接收该时间点上所有合约的K线数据,而不是通过on_bar函数一个个接收(无法判断当前时点的K线是否全部走完了 )。组合策略的回测只支持K线模式,但在实盘中用户可以在on_tick回调下自行管理所有K线的合成推送逻辑(比如用非标准的K线切分点)。

 

第二个区别点,在于组合策略中需要对多合约同时下单交易,在回测时无法判断某一段K线内部每个合约委托成交的先后时间顺序,因此无法提供on_order和on_trade获取委托成交推送,而只能在每次on_bars回调时通过get_pos和get_order来进行相关的状态查询。

 

第三点区别在于委托下单函数:组合策略在调用委托函数下单时必须传入具体要交易合约的代码,而不像CTA策略只能交易一个合约所以用不着。同时组合策略模块只支持限价单交易,不提供停止单功能(StopOrder)。

 

数字货币反向期权支持

 

币圈期权市场的历史很短,基本可以认为是从2019年开始的,体现在Deribit期权成交量的逐步上升,以及OKEX推出了多到期日和多行权价的“正规”期权市场(那种每个到期日只有一个看涨一个看跌的太过“山寨”)。

 

数字货币反向合约的概念在之前的公众号分享文章中已经详细讲解过了,主要特点就是使用BTC(交易的商品)而非USD(计价的货币)来结算资金盈亏。在之前的版本中,也都已经分别实现了币本位CTA策略回测(CtaStrategy模块)以及正向现货和反向合约的价差交易功能(SpreadTrading模块)。

 

在v2.1.2版本中,也增加了OptionMaster模块对于反向期权合约的支持(主要涉及到定价模型和标的升贴水算法),已经可以完整实现数字货币期权的波动率交易策略。

 

首先,在配置期权投资组合时,选择反向合约模式,以及希腊值的小数位数(BTC定价导致小数位较多):

 

description
 

然后,基于波动率曲面寻找交易机会:

 

description

 
其次,使用电子眼算法来执行交易:

 

description
 

最后,通过Delta自动对冲算法来实现Gamma Scalping:

 

description

 

其他更新

 

DataManager模块发布后,有一堆用户询问了如何删除不需要的数据的问题,所以新版本中我们加上了一键删除的功能,就在查询出来后的数据统计结果每行的最右侧按钮。
 

接口方面的更新包括:
 

  1. 新增中亿汇达ComStar接口,主要用于国内银行间市场(中国外汇交易中心,简称CFETS)的债券固收产品交易,请注意ComStar只有各类大型金融机构才能用(券商自营交易部、银行金融市场部等),私募或者个人都用不了;
  2. 新增恒生集中柜台期权接口HsoptionGateway,实现提供ETF期权的API接入,主要是部分券商使用,比如中信证券;
  3. 中泰证券的XtpGateway增加期权交易功能的支持,至此XTP已经成为vn.py证券这边支持功能最完整的接口了(现货、两融、期权);
  4. 对易盛外盘接口TapGateway进行了代码重构,提供更好的代码可读性方便修改。

 

 
 

vn.py核心团队的底层接口开发小班课上线

日期:2020年5月16日(周六)和5月17日(周日)

时间:两天下午1点-6点,共计10小时

内容:

  • 两天共计10小时的实战训练课程

  • 市场微观结构知识的详细剖析

  • C++代码的Python封装实操

    • pybind11
    • ctypes
    • cython
  • 底层接口业务功能的对接设计

    • 扩展订单类型:FOK、FAK、Post-Only
    • 特殊交易指令:询价RFQ、做市报价Quoting

价格:9999元

报名请发送邮件到vn.py@foxmail.com,注明想参加的课程、姓名、手机、公司、职位。

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

StrategyTemplate 的 on_tick 方法接受的tickdata我理解是多个标的物的tickdata混在一起的?如果有n个标的物,我需要自己合成n个BarGenerator,因此在on_tick里面我需要判断tickdata的symbol,并update_tick到对应标的物的BarGenerator中去,这样理解是否正确?

Administrator
avatar
加入于:
帖子: 4028
声望: 221

是的,每个合约的TICK推送都会调用on_tick,然后需要创建多个BarGenerator来做合成

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

想用vnpy在火币进行永续合约交易,请问vnpy2.1.2支持吗

Administrator
avatar
加入于:
帖子: 4028
声望: 221

呆萌大虾球 wrote:

想用vnpy在火币进行永续合约交易,请问vnpy2.1.2支持吗

目前不行,5月中的下个版本2.1.3会支持

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

希望增加一个on_timer,对于某些策略来说on_tick的速度是不够的,因为1个tick要500毫秒

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

赞多标的策略!
请问下后续有没有开发PortfolioBacktester上层APP,UI的计划?
源文件看见有Backtester.py了

Administrator
avatar
加入于:
帖子: 4028
声望: 221

charonlkl wrote:

赞多标的策略!
请问下后续有没有开发PortfolioBacktester上层APP,UI的计划?
源文件看见有Backtester.py了

目前没,主要多标的策略需要的配置比较繁杂,这块界面反而不如Jupyter来的方便了

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3