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

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

 

v2.0.8版本的vn.py已于上周五正式发布。和之前一样,对于使用VN Studio的用户,启动VN Station后,直接点击界面右下角的【更新】按钮就能完成自动更新升级。
 

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

价差回测

 
价差交易策略的回测难点,在之前上海、北京、成都的三场线下活动上做了详细的分享,核心原因在于:
 

要实现最大的策略逻辑自由度和最高的策略回测精度,需要价差内每条腿的带有本地时间戳的Tick历史数据。
 

只有这样,才能保证在回测过程中任意时间点价差数据的准确性,但符合这种条件的数据非常难以获得,要么购买价格太高,要么需要自己逐笔录制。
 

考虑到vn.py社区绝大部分用户的需求,选择做了个折中:限制回测中策略的部分功能调用,从而大幅价差回测降低所依赖数据的复杂度,足以满足99%价差策略回测情景的需求(剩下那1%的大神,都这么NB了就自己折腾吧),支持的两种模式:
 

K线模式

  • 数据要求:回测期内每条腿的K线数据(1分钟最佳),若有某条腿缺失一段,则所有腿的这一段数据都会被弃用
  • 数据来源:CtaBacktester下载、CsvLoader载入、脚本载入
  • 价差计算:基于每条腿K线的收盘价数据,在回测过程中由回测引擎基于价差定义公式自动计算,并推送给策略
     

Tick模式

  • 数据要求:录制好的价差Tick盘口数据
  • 数据来源:首先需要在SpreadTrading模块中创建配置好价差后,通过DataRecorder模块来进行Tick录制,本地代码填入xx-spread.LOCAL,其中xx-spread为用户定义的价差名称,LOCAL为固定交易所后缀(代表本地生成)
  • 价差计算:回测引擎直接加载之前录制好的价差Tick数据推送给策略
     

价差回测功能,需要通过Jupyter Notebook来调用,具体代码可以参考Github仓库的示例,整体上和使用Jupyter来运行CTA策略回测的方法非常类似。
 

这里用股指期货的价差回测来做个展示,使用的是IF1911和IF1912合约构建的价差,回测的数据从10月14日到11月8日(因为IF1911刚挂牌不久):
 

description

 

四个代码单元格,分别对应以下功能:

  1. 加载回测引擎模块类以及要回测的策略
  2. 创建价差对象
  3. 创建回测引擎,设置好相关回测参数后,初始化策略实例
  4. 加载数据执行策略回测,并计算相关统计指标,绘制结果图表
     

第四个单元格执行后,将会看到回测过程中相关的工作日志输出,以及最终的回测统计结果:
 

description

 

同时回测的结果图表如下图所示,四幅子图从上至下分别为:净值曲线、净值回撤、每日盈亏、盈亏分布:
 

description

 

在回测中,基于SpreadStrategyTemplate开发的策略,无法调用以下功能(会出错):
 

  • 通过策略缓存的价差对象spread访问任何一条腿的数据
  • 所有针对价差内某条单一腿合约的下单函数,包括:
    • buy
    • sell
    • short
    • cover
    • cancel_order
    • cancel_all_orders
  • 所有查询价差内某条单一腿数据的函数,包括:
    • get_leg_tick
    • get_leg_pos
       

反向合约

 
数字货币的期货和永续合约,绝大部分都采用了反向合约的模式(inverse conrtact ),和传统的正向合约做个对比:
 

正向:CME - BTC合约

  • 合约意义:5个比特币
  • 计价单位:USD
  • 结算单位:USD
     

反向:BitMEX - XBTUSD合约

  • 合约意义:1美金对应的比特币数量
  • 计价单位:USD
  • 结算单位:BTC
     

可以看到,反向合约的尽管也同样使用美金USD来表示比特币的价格,但投资者买卖后盈亏的金额却是用BTC结算,这点满足了许多币圈投资者希望的币本位计价需求。
 

对上述概念搞不清楚的话,推荐可以看看这篇BitMEX交易所官方推荐的《BitMEX vs. CME futures guide》(英文内容),对于了解数字货币市场的衍生品合约交易规则非常好的一篇深入讲解。
 

2.0.8版本对于反向合约,在策略回测以及实盘交易上增加了一些特殊的程序算法处理,来保证结果的正确性。
 

CTA策略回测

 

CTA策略的回测功能,在配置回测参数时支持选择反向合约模式(下图底部的“合约模式”):
 

description

 

以这里的XBTUSD合约为例,选择为反向模式后,回测过程中策略交易的单位依旧是合约本身的数量,但在统计最终盈亏时,会自动转换为BTC的数量,注意此时回测资金也应该是开始交易时准备的BTC本金(而不是USD本金了)。
 

价差实盘交易

 
价差交易的实盘交易功能,在创建价差时允许选择每条腿具体的合约模式:
 

description

 

上图中,XBTUSD.BITMEX设置为反向合约腿,且价差的最小交易量设置为0.01(币数量),和之前版本(默认正向合约)的区别包括:

  1. 反向合约XBTUSD.BITMEX的盘口挂单量(合约数量),在用来计算价差盘口挂单量时,会转换为对应的币数量,并和正向合约btcusd.BITSTAMP的盘口挂单量(币数量)做比较;
  2. 上一步中反向合约计算盘口挂单的币数量时,小数部分精确到0.01,即最小允许交易0.01个币;
  3. 计算价差持仓量时,会将XBTUSD.BITMEX的持仓合约数量,除以持仓的平均成本价格,计算得到持仓的币数量;
  4. 执行价差交易时,用户启动价差算法传入的是币数量,在算法底层执行反向合约腿交易时,会自动转化为真实的合约数量,并发送到交易所执行。
     

通过以上的4步转化处理,用户只需要在创建价差时配置好每条腿的合约模式,以及对应的价差最小交易数量,在后续执行价差交易的过程中,就可以只需要去考虑想交易的真实币数量,而无需再手动做各种转化了。

投资组合

 

2019年初和对冲研投合作搞了一次线下活动,主题是基本面量化策略的实盘交易,当时提出要开发的PorfolioManager自动投资组合交易模块,总算在2019年底之前完成了:
 

description

 

该模块主要面向各种采用基本面策略的投资者(不一定是量化!):

  1. 针对每个投资策略,创建一个独立的投资组合策略对象(可以理解为子账户),设置该策略所交易的合约;
  2. 所有的交易下单操作,都指定分配到某个投资组合策略上;
  3. 该投资组合策略,可以维护自身的持仓情况(和底层账户持仓独立),并实时计算盈亏数据(包括持仓盈亏和平仓盈亏),以及其他相关的记录功能(支持用户按需扩展GUI)。
     

新增接口

 
最后,2.0.8版本新增的接口主要集中在数字货币方面:

  • BybitGateway:Bybit是19年新兴的一家永续合约交易所,流动性深度相当优秀,且在市场波动大时不会拒单(约1个月实盘测试结果),对BitMEX频繁Overload深恶痛绝的用户强烈推荐试试
  • BitstampGateway:现存最老牌的数字货币现货交易所之一,Bistamp持有欧盟正规交易所牌照,提供法币交易对(BTC/USD),而不是大多数交易所的币币交易对(BTC/USDT);
  • GateiosGateway:Gate.io交易所的永续合约接口,这家特点是提供USDT计价的正向永续合约;
  • OandaGateway:OANDA外汇接口,做外汇交易的应该久闻大名(OANDA本身可能就代表了零售外汇电子化交易的整个历史);
  • BitfinexGateway:增加保证金交易支持,社区内诸多用户反馈是做期现套利时,法币套利腿比较好的选择之一。
     

2019年vn.py核心团队的最后一期小班课开始报名

  • 两天共计10小时的密集提高课程

  • 8套高端CTA策略源代码分享

    • DoubleChannel

    • KeltnerBandit

    • RsiMomentum

    • SuperTurtle

    • TrendThrust

    • Cinco

    • Cuatro

    • SuperCombo

  • 动态风险仓位管理模型

  • 策略内嵌复杂算法交易

详情请戳:第四期vn.py小班课上线:CTA策略开发