发布于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刚挂牌不久):
四个代码单元格,分别对应以下功能:
- 加载回测引擎模块类以及要回测的策略
- 创建价差对象
- 创建回测引擎,设置好相关回测参数后,初始化策略实例
- 加载数据执行策略回测,并计算相关统计指标,绘制结果图表
第四个单元格执行后,将会看到回测过程中相关的工作日志输出,以及最终的回测统计结果:
同时回测的结果图表如下图所示,四幅子图从上至下分别为:净值曲线、净值回撤、每日盈亏、盈亏分布:
在回测中,基于SpreadStrategyTemplate开发的策略,无法调用以下功能(会出错):
- 通过策略缓存的价差对象spread访问任何一条腿的数据
- 所有针对价差内某条单一腿合约的下单函数,包括:
- buy
- sell
- short
- cover
- cancel_order
- cancel_all_orders
- 所有查询价差内某条单一腿数据的函数,包括:
- get_leg_tick
- get_leg_pos
投资组合
2019年初和对冲研投合作搞了一次线下活动,主题是基本面量化策略的实盘交易,当时提出要开发的PorfolioManager自动投资组合交易模块,总算在2019年底之前完成了:
该模块主要面向各种采用基本面策略的投资者(不一定是量化!):
- 针对每个投资策略,创建一个独立的投资组合策略对象(可以理解为子账户),设置该策略所交易的合约;
- 所有的交易下单操作,都指定分配到某个投资组合策略上;
- 该投资组合策略,可以维护自身的持仓情况(和底层账户持仓独立),并实时计算盈亏数据(包括持仓盈亏和平仓盈亏),以及其他相关的记录功能(支持用户按需扩展GUI)。
2019年vn.py核心团队的最后一期小班课开始报名:
两天共计10小时的密集提高课程
8套高端CTA策略源代码分享
DoubleChannel
KeltnerBandit
RsiMomentum
SuperTurtle
TrendThrust
Cinco
Cuatro
SuperCombo
动态风险仓位管理模型
策略内嵌复杂算法交易
详情请戳:第四期vn.py小班课上线:CTA策略开发