vnpy怎么创建策略并回测_8款优秀量化交易回测框架!哪款适合你??

2923769a88a4243cdebe268ea5c88838.png

关注我的专栏

酷宽​zhuanlan.zhihu.com
e15575f646152d951943c8a68f5beb16.png
zhuanlan.zhihu.com​zhuanlan.zhihu.com
e15575f646152d951943c8a68f5beb16.png
知乎用户​www.zhihu.com
126fdc84f9fe32e422864508409a827d.png
www.zhihu.com​www.zhihu.com
aba6f51fde5bb2f0011d1f8757493ba5.png

一个策略从想法,到测试,在到实盘,然后改进,进入另一个循环,需要很多的时间和精力。这时候选择一款高效、灵活的测试系统就是当务之急了。即使最后你可能需要写自己的系统,但是这些框架的软工架构还是很值得借鉴的。

一个好的测试系统应该具有如下特点:

  • 代码、项目仍然在维护,测试充分
  • 代码组织好,组件灵活,方便拓展,最好开源
  • 社区健全,可以讨论相关问题
  • 文档完整、全面

下面我介绍6款开源社区贡献的会测框架,看看那一款是你的菜?排名不分先后,各有千秋,我的观点后再最后说明。

1.VNPY仿真柜台

42c99392cb16c816bb6962e7cbe520a7.png
VNPY官网​www.vnpy.cn
c2a9150bac6e3076a9836b5fb4f47ee9.png
  • 推荐指数:5 星
  • 回测类型:仿真柜台,支持所有第三方框架
  • 回测速度:慢
  • 实盘模拟:好
  • 实盘支持:是
  • 社区建设:非常好
  • 组件灵活:好
  • 文档:好
  • 语言:Python2,Python3,C++,JAVA,C#,GO,JULIA 等所有语言框架

685168efec1a21674b3b660f93e4e08f.png

是这里唯一一个国产框架,目前Github已经接近1W Star,做的非常成功。我大概是几年前开始关注这个框架的,看着他一点点重构,发展到现在的规模。社区也在欣欣向荣的发展。

这个框架,最开始的时候主要以连接多个交易平台为目的,是实盘交易导向的,回测功能是后面慢慢发展起来的,功能比较有限。但是由于代码量不大,如果有时间自己拓展也是一个不错的选择。客观的说,从代码和架构看,还有待加强。

2.Virtualapi

8f664d0d4553732261a58c23180328d8.png
VirtualApi 期货CTP TICK级本地量化交易仿真回测首页​www.virtualapi.cn
1d26888060e250bd4c9b414b8d1e9512.png
  • 推荐指数:5 星
  • 回测类型:仿真柜台,支持所有第三方框架
  • 回测速度:慢
  • 实盘模拟:好
  • 实盘支持:是
  • 社区建设:非常好
  • 组件灵活:好
  • 文档:好
  • 语言:Python2,Python3,C++,JAVA,C#,GO,JULIA 等所有语言框架

VirtualApi诞生的技术背景
现在的量化回测软件和方法有三类,一类是通过文华、TB、MC等商业软件,在商业软件中通过编写交易指标和交易公式,或通过加载用户自己开发的第三方策略库进行交易策略的开发和回测;第二类是直接使用交易所、券商、API软件服务商提供的API或券商等机构提供的行情和交易API直接开发交易策略,或通过一些回测框架调用这些原生API进行回测;第三类是利用聚宽、优矿的网站在线平台进行回测。
若采用第一类商业软件开发量化交易回测系统,虽然对从事量化交易的人来说,开发策略需要的工作量较少,对开发者编程能力要求不高。但缺点也是显而易见的,除了商业软件本身需要收费提高了交易成本以外,采用商业软件开发交易策略不够灵活,使得很多交易策略无法实现。
若采用第二类直接使用API开发策略或采用针对API的回测框架,例如python的各种回测框架、matlaba的各种回测框架、R语言的各种回测框架,PyAlgoTrade、Zipline等、虽然开发策略较为灵活,但缺点是开发交易策略的实盘代码并不能直接进行回测,必须要采用引入回测框架进行回测,待回测完毕,再将回测完成的参数接入实盘策略代码中或删除回测框架部分的代码接入实盘交易的API,使得量化交易回测代码和实盘的代码有较大的改动,增加了策略开发者的工作,也增加了量化交易爱好者时间成本,甚至对很多编程能力有限的量化爱好者来说提搞了研究难度的门槛。
若采用第三类在线回测平台进行回测,由于需要将编写的策略在网站指定的服务器上运行,由于是多用户共享一台服务器,所以回测性能无法得到保证、网站更倾向于采用精度不高的数据进行回测。还由于对策略开发者来说不是使用原生API进行开发策略,所以策略开发的自由度也不够,很多想法也无法实现。更重要的是,选择网站在线平台的方式来开发量化交易策略,就等于默认了网站管理员可随时查看自己辛辛苦苦开发的策略代码,保密性让人担忧,从事量化交易的专业机构几乎不会采用在线网站的回测方式。
近年来,量化交易在金融领域应用的越来越广发,回测系统的设计是量化交易中不可缺失的一部分,但同时也暴露出一些问题,例如商业软件成本高、自己搭建会测框架时间成本高,难度大、采用第三方回测框架难度大、回测到实盘交易的代码改动较大、量化策略保密性不高等等。
为了克服现有技术存在的上述不足,VirtualApi仿真API的回测技术应运而生,它是模拟原生API来实现的。例如通过模拟原生交易API和行情API,例如通过模拟原生API的库方法的定义、头文件的定义等,使得回测和实盘交易代码,简单的将实盘代码替换为仿真API,对底层代码可不作改动或改动较少即可实现回测和参数优化。
支持的编程语言
VirtualApi Api支持多种编程语言,包括C++、Python、Java、C#、Golang、易语言等 。
支持的操作系统
VirtualApi Api支持Windows操作系统,版本要求Windows7、Windows2008及以上。
支持的量化交易框架
VirtualApi 支持各种基于CTP接口的自编程序和框架,例如vn.py、Quicklib、海风等。
CTP实盘程序流程图(C++)
典型CTP实盘程序流程图

c03c2184d12e0fce5cb729493d1d24da.gif


VirtualApi回测程序流程图(C++)
VirtualApi For CTP回测程序流程图

239b74eb-1819-eb11-8da9-e4434bdf6706.png

代码CTP库文件
CTP Api是C++库,理论上可以用于包括C++、Python、Java、C#、等在内的多种编程语言的调用。
VirtualApi For CTP一样是采用C++开发,目前只支持Windows操作系统,运行采用VirtualApi Api的计算机和TradeAgent.exe的计算机采用要求Windows7、Windows2008及以上系统,对于Windwo7和Windows Server2008这些较为陈旧的Windows系统安装微软运行时库redist2015补丁。
以最常用的CTP无中继代理模式为例(于2019.6.14实施的穿透式和老的非穿透式),CTP API Windows版本含以下文件:

5b529818e4fd636c54460372a9b2eb3f.gif


其中ThostFtdcMdApi.h、ThostFtdcTraderApi.h、ThostFtdcUserApiDataType.h、ThostFtdcUserApiStruct.h 是头文件,thostmduserapi.dll、thosttraderapi.dll、thostmduserapi.lib、thosttraderapi.dll。VirtualApi库文件VirtualApi For CTP库文件
包含以下文件:

0f764368a43440007f59086e16fd262c.gif


可以看到VirtualApi 库在原CTP库基础上增加了list.csv,Price.exe,Graph.exe这3个文件,而对于thostmduserapi.dll、thosttraderapi.dll、thostmduserapi.lib、thosttraderapi.dll这4个文件是VirtualApi提供模拟CTP的实现,而ThostFtdcMdApi.h、ThostFtdcTraderApi.h、ThostFtdcUserApiDataType.h、ThostFtdcUserApiStruct.h 这4个头文件则保持和CTP对应版本一模一样。
list.csv作用:该程序放到回测程序的目录下,用于指定csv格式的数据文件的存放路径,并非自己存放Tick数据,在回测时VirtualApi会从上至下依次读取list.csv种这些文件的Tick数据,并触发CTP方法里的深度行情通知回调函数 virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData),使得和CTP的OnRtnDepthMarketData回调方法一致。 值得注意的是,list.csv指定的数据文件库的字段顺序目前不能更改,将来可能提供字段顺序的自定义设置功能。

基于Web

3. QuantConnect

f3949e49f1067bd9336d10b78ac29994.png

QuantConnect, 与Quantopian的模式非常类似,但是除了提供Web接口以外,还提供本地的SDK进行测试,代码已经开源:QuantConnect/Lean,核心的代码是C#完成的,但是提供F#和Python 的API。

Lean Engine是一个开源算法交易引擎,专为简单的策略研究,回溯测试和实时交易而构建。我们与通用数据提供商和经纪商集成,因此您可以快速部署算法交易策略。
LEAN引擎的核心是用C#编写的;但它可以在Linux,Mac和Windows操作系统上无缝运行。它支持用Python 3.6,C#或F#编写的算法。QuantConnect的社区建设也很不错,结合相关的Web前端,交流比较方便。

由于开放了本地SDK,你可以不必上传自己的策略,隐私保护方便比较完善。同时定制方便也更加优秀。

  • 推荐指数:3 星
  • 回测类型:Event driven
  • 回测速度:快
  • 实盘模拟:好
  • 实盘支持:是
  • 社区建设:好
  • 组件灵活:好
  • 是否开源:是
  • 文档:非常好
  • 语言:C#,F#, Python

基于本地

4. Zipline

3370167c9f73bdab750430dd0d20b37b.png

Zipline是一个Pythonic算法交易库。它是一个事件驱动的回溯测试系统。 Zipline目前在生产中用作为Quantopian提供动力的回测和实时交易引擎 - 一个免费的,以社区为中心的托管平台,用于构建和执行交易策略。

这个框架由于是Python 构建的,已经集成了许多机器学习相关的应用,可以方便的将机器学习模型结合进自己的策略中。

  • 推荐指数:3 星
  • 回测类型:Event driven
  • 回测速度:慢
  • 实盘模拟:好
  • 实盘支持:是
  • 社区建设:非常好
  • 组件灵活:中
  • 是否开源:是
  • 文档:非常好
  • 语言:Python3

5. Backtrader

Welcome - Backtrader​www.backtrader.com
716570e73323000d10b926938d197055.png
www.backtrader.com​www.backtrader.com
716570e73323000d10b926938d197055.png

Backtrader, 是一款纯Python的回测+实盘框架。从软件工程的角度,这个项目非常值得学习。这个框架的代码风格非常Pythonic,也值得借鉴和学习。作者是一个很严谨的德国人,从他的代码审查和社区管理可见一斑。

backtrader允许您专注于编写可重复使用的交易策略,指标和分析器,而不必花时间构建基础架构。

我仔细研究过这个框架的源代码,作者软件工程功力不错,代码干净、架构合理,特别容易拓展。代码量并不大,元测试相对比较完善。得益与清晰的源代码,二次开发非常容易。

社区相对比较完整,参与度较高。作为一款没有任何商业支持的开源框架,我认为他做的非常成功。

  • 推荐指数:5 星
  • 回测类型:Event driven 和 Vectorized
  • 回测速度:中
  • 实盘模拟:好
  • 实盘支持:是
  • 社区建设:好
  • 组件灵活:非常好
  • 是否开源:是
  • 文档:非常好
  • 语言:Python3

6. Pyalgotrade

PyAlgoTrade - Algorithmic Trading​gbeced.github.io gbeced.github.io​gbeced.github.io

Pyalgotrade,也是一个纯Python回测框架,同样没有任何商业支持,完全开源。从代码风格看,作者应该具有很强的Java背景,无论是代码风格,还是代码架构,非常Old School!在功能性方便,框架的提供的功能少与Backtrader。

PyAlgoTrade是一个Python算法交易库,专注于回溯测试和对纸张交易和实时交易的支持。假设您对交易策略有所了解,并且您希望使用历史数据对其进行评估,并了解其行为方式。

但是,该框架目前还没有社区,只能在Github上面提交Issues。

  • 推荐指数:4 星
  • 回测类型:Event driven
  • 回测速度:中
  • 实盘模拟:好
  • 实盘支持:是
  • 社区建设:差
  • 组件灵活:中
  • 是否开源:是
  • 文档:非常好
  • 语言:Python2&3

7. Backtesting.py

ae2a58d1e48915b3497d2f71a5366042.png

应评论区的要求,增加了backtesting.py。这两天花时间读了一下代码,总体来说这个框架比较新,还处于早期的阶段。属于事件驱动为主的类型,用了numpy, pandas, bokeh等一些比较经典的库。

8. Quantopian

a55f213412e8723fdc24e4dec9629c4b.png

Quantopian, 是最早开始在Web做量化测试的公司之一,目前他已经变成一个基金。提供的Web接口非常简单,平台默认提供了丰富的历史数据,可以方便的开始测试,可以说是入门最为容易的平台了。社区聚集了大量对量化感兴趣的人,市场能看见非常有深度的讨论,而且由于平台本身基于Web,讨论的时候可以方便的引用代码和图表,整体使用体验非常好。

但是Quantopian的回测速度不尽如人意,可调整的组件不多,不容易接入定制的数据、模拟逻辑等等。而且,你需要把你的策略上传到Quantopian服务器。如果你仅仅是用自己定制的信号,用Quantopian进行测试,那么隐私保护就不是问题。

Quantopian后台主要用的Zipline的代码,但是肯定已经加以定制,所以源代码并不开源,Debug或者更深度的定制不能实现。

  • 推荐指数:2 星
  • 回测类型:Event driven
  • 回测速度:慢
  • 实盘模拟:好
  • 实盘支持:-
  • 社区建设:好
  • 组件灵活:中
  • 是否开源:否
  • 文档:非常好
  • 语言:Python

结论

我个人最开始进入量化领域,用的Quantopian,后来用过一段时间Pyalgotrade,在然后换到了Vn.py,目前比较常用的是Backtrader。

如果,你钟爱.NET,QuantConnect无疑是你最好的选择。

如果,你钟爱Python,Backtrader比较适合你。

如果,你主要针对本土市场实盘交易,那么VNPY可能更加适合。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值