quant.show 发布于2020-02-17
回复 11
浏览 8837
81
>*Plan your trades and trade your plans.
>为你的交易做好计划;按你的计划执行交易。*
CTA策略,即商品交易顾问(Commodity Trading Advisor,简称CTA)。一般而言,要求不少于60%的资产要投资于期货市场。也就是说,假设一家管理期货策略的私募基金有1亿元可投资金,至少要有6000万作为期货保证金。CTA策略一直是量化投资领域里面的一块重要组成部分,和股票的量化策略相比,CTA策略具有更稳定的收益和更小的风险。正是基于CTA策略的对冲性及其高频性,让市场的一切波动都会慢慢趋于平滑,也就是说,只要你对冲做的好,基本可以无视大盘。
疫情在家,闲来无事,便稍微学习了一下CTA策略的开发工具。市面上有TB或MC之类的可编程的交易软件,奈何一方面这些商业软件的价格不菲,另一方面,编程用的所谓的EasyLanguage其实非常小众,复杂功能的开发比较麻烦。做了一些调查后,最后还是选定了VN.PY及JoinQuant作为CTA策略的开发平台。本文是介绍的是VN.PY的入门心得及JoinQuant的比较,帮助大家了解VN.PY并快速入门,而非策略的开发(策略的开发一本书也写不完。。。)
##### 一、VN.PY安装
基于VN.PY的CTA策略主要依赖于VNStation进行,可在[官网](https://www.vnpy.com/)上下载最新版安装即可。
默认安装目录为C:\vnstudio。
【补充说明】
1)VNStation安装是自带Python包的,所以本地不需要事先安装Python。开发IDE,比如VSCode,建议选择该自带Python包作为编译器。不建议本地有其他的Python环境,最好干干净净地使用VNStation一家即可。
2)vnpy的源代码在C:\vnstudio\Lib\site-packages\vnpy目录下可以找到,但是这个源代码和[GitHub](https://github.com/vnpy/vnpy)上的源代码有一些不一样。vnpy目录下应该是一致的,但是GitHub的源代码上还有其他的目录,比如examples的目录,其中有很多可以借鉴的源代码是安装包里所不具备的。
##### 二、启动VNStation
1、策略代码目录创建
创建C:\Users\[用户名或Administrator]\strategies目录,开发完成的策略代码可以放在该目录下。
2、启动VNStation
启动VNStation,页面如下所示:

选择【VN Trader Pro】,启动如下页面:

左侧的底层接口选择【CTP】或者【CTP测试】。右侧的上层应用主要根据我们的需要选择,一般选择
【CTA自动交易模块】和【CTA回测研究模块】较多。下方的运行目录,注意和上述【1、策略代码目录创建】的目录保持一致。点击启动即可。
【补充说明】
1)CTP和CTP测试
目前上期技术是支持通过API接入看穿式监管的,主要开发语言是C++。由于VN.PY已经在底层帮我们完成这一复杂的任务了,所以我们无需关心该部分内容。但是连接看穿式监管仍然需要账号,既需要测试账号(即CTP测试),也需要实盘账号(即CTP)。我们用测试账号来验证投资策略的正确性,用实盘账号来完成实盘交易。该账号的申请主要通过自身所在的期货公司来申请。申请的步骤可以参考文章[《看完这篇,彻底搞定期货穿透式CTP API》](https://www.vnpy.com/forum/topic/603-kan-wan-zhe-pian-che-di-gao-ding-qi-huo-chuan-tou-shi-ctp-apijie-ru?page=1#pid2167)。
如果暂时只是想做一下策略的研究,不做实盘交易的情况下,还有一个方法可以获得CTP交易账号,那就是Simnow的仿真测试账号。如果准备使用Simnow账号,底层接口选择的是CTP,而非CTP测试!!
2)CTA自动交易模块和CTA回测研究模块
顾名思义,前者是CTA策略实施,后者是CTA策略回测。如果两者都不选择的话,后续启动的页面只能
做基于页面的基础买卖操作,而无法使用CTA策略交易的功能。
3、CTP或CTP测试连接
进入VNTrader的主页面,如下所示:

点击左上角【系统】-【连接CTP(或连接CTP测试)】进行CTP(或CTP测试)的配置:

关于CTP或者CTP测试的配置,一般期货公司会提供相关的文档。
基于Simnow的CTP配置,可以参考[官网介绍](http://www.simnow.com.cn/product.action),也可以参考文章[《国内期货CTP配置教程》](https://blog.csdn.net/frankiehello/article/details/97910678)。
Simnow连接成功后的【日志】窗口的页面如下:

期货公司的连接成功后,可能并没有Simnow那么详细,一切以期货公司的认定标准为准。
连接后可确认【持仓】和【资金】窗口的数据是否正确地显示。
另外,连接后也可测试一下是否行情数据正确能够获取,在【交易】窗口-【代码】处键入交易代码,按回车,看行情窗口是否正确地显示。注意,代码是区分大小写的。比如TF2003、rb2003这样。
##### 三、CTA回测和CTA策略
1、VNTrader的全局配置
在使用【CTA策略】或【CTA回测】之前,我们需要先进行数据的准备。因为在策略中,我们既可能需要根据历史数据进行技术指标的计算,也可能在回测中,利用历史数据进行策略的验证。
VNTrader的数据准备可以用两种方法,一是使用RQData数据,二是构建本地数据库服务。前者使用便捷,更为推荐。具体的使用方法如下:
1)打开【配置】页面
2)配置【全局配置】页面的以下两个项目

此处的rqdata.username和rqdata.password和RQData官网的用户名和密码不是同一回事!!
rqdata.username固定为:license
rqdata.password为:(申请rqdata后,官网会给一个很长字母的License)
配置完毕后,启动【功能】-【CTA回测】,在日志窗口确认RQData是否正常连接,如下图所示:

如果不能正常连接且检查无误的情况下,可以尝试通过打开VN Station prompt窗口,
输入pip install rqdatac -U 来更新后看一下是否能解决问题。
2、CTA回测
在VP.PY中已经预开发了一些经典策略供投资者回测和策略交易,比如ArtRsi策略、DualThrust策略等,初学者可以从使用或修改这些策略开始着手。
启动【功能】-【CTA回测】,选择策略,输入本地代码(格式为【商品代码.商品交易所】,比如TF2003.CFFEX)及其他回测条件,点击【开始回测】,回测页面显示如下:

各项回测指标在中间显示,【账户净值】、【净值回测】、【每日盈亏】、【盈亏分布】的图形化页面在右侧显示。
注意:
1)(回测)交易并不一定从开始日期开始,因为VN.PY需要有一定的交易日(比如10个交易日)的数据作为初始化,该天数内不会有交易数据。此时可通过回测指标的【首个交易日】进行确认。该部分的程序可以参考策略的on_init函数中的self.load_bar(10)。
2)回测页面时并不能对平今仓的手续费进行特别设置(因为平今仓和平隔夜仓的手续相差较大,会影响收益结果)
3)如果中间的回测指标栏无法正确显示的话,可以尝试
i)在全局配置中,改小font.size
ii)C:\vnstudio\Lib\site-packages\vnpy\app\cta_backtester\ui\widget.py的184行设置为较小值,比如600。

在【CTA回测】页面,亦可以进行参数优化。比如说,有个策略有均线缠绕的比较,快速均线的窗口期和慢速均线的窗口期如何设置才能获得最好的收益率或夏普比率,需要进行遍历比较。点击【参数优化】,可以对目标值、快速均线窗口值、慢速均线窗口值进行遍历比较,比较结束后,可点击【优化结果】进行查看。

3、CTA策略
启动【功能】-【CTA策略】,确认日志窗口的信息如下:

选择策略,点击【添加策略】,

strategy_name:表示策略名字,可以设任意字符串,比如demo1
vt_symbol:表示交易代码,格式为【商品代码.商品交易所】,比如TF2003.CFFEX
其他则根据自己策略的需要设置。

可以看到部分变量,比如atr_value、atr_ma等值为0,这主要是尚未通过历史数据计算,
点击【初始化】,完成策略初始化,并对上述需要的值进行赋值。


初始化后,可点击【启动】,启动策略,此时便开始按照策略进行量化交易。

此时即便关闭【CTA策略】窗口,亦不会关闭策略的执行。
#### 四、VN.PY的相关学习资料
本文介绍了VN.PY的快速入门,显然对于博大精深的VN.PY的学习而言仅仅是冰山一角。以下的一些
学习资料可以供大家更多地了解VN.PY。
1、VN.PY公众号视频教程(付费)
教程名称:《全实战进阶策略—CTA策略》。该教程由于是一边操作电脑页面,一边授课,且逐步分解,由易到难,非常适合作为首选学习资料。根据自身的定位(投资家、策略开发者、平台开发者),可以选择性观看不同的章节(该选择需要自己判断)。
2、VN.PY官网的项目文档
https://www.vnpy.com/docs/cn/index.html
该项目文档由于比较精炼,更适合作为资料查询,对于初学者来说有点难,可以和视频结合看,可方便理解。
3、VN.PY知乎
https://zhuanlan.zhihu.com/vn-py
这是VN.PY作者的知乎频道,胜在不停地更新,可以作为持续的学习资料。
4、VN.PY蜗牛博客
http://www.snailtoday.com/archives/category/qihuo/vnpy
这是一位大牛的VN.PY学习博客,有很多文章可以和VN.PY官方文档形成互补,涉及很多VN.PY源码的原理,且实战性很强,更多地适合于平台开发者。
5、《Python量化交易》(张杨飞著)
这本书是基于VN.PY的而写的量化交易,优点是非常细致地介绍了VN.PY的原理,另外,对于VN.PY预开发的一些经典交易策略,进行了详细的金融层面的介绍和说明,弥补了官方资料的不足(官方资料侧重于Python的开发方面),缺点是VN.PY更新版本的速度也很快,很多书中介绍的和最新版本已经不是非常相符。
##### 五、VN.PY与JoinQuant的比较
目前,JoinQuant也可以来开发期货的CTA策略。那么是否可以用JoinQuant来代替VN.PY呢?我个人觉得,这就要看每个人的目标指向了。有人仅仅需要对策略本身做出历史评价,有人干着模拟盘指导实盘,手动下单的神操作,有人就是追求完全自律的实盘自动化交易。不同的目标指向可以选择不同利器为自己服务。以下是我个人对这两者的比较总结:

文章的更新可以访问我的个人独立博客:
https://quant.show/vn-py-introduction-to-cta-strategy/
评论
joinQuant可以收购了VN.PY,用户群体可以扩大。但往往做技术的会想你这个技术含量,我几个人几个月就做出来了。参考张朝阳面对QQ的决策,雷军面对HOTMAIL的决策。
2020-02-17
@solarhe2006 收购的不仅仅是技术含量,更重要的是用户群体,或者说市场。
2020-02-18
已经有小伙伴将vnpy和jqdatasdk数据连接起来了;
https://www.joinquant.com/view/community/detail/26c6fe9c09ef3f35b8296caf728044be?type=1
感兴趣的小伙伴也可以在vnpy社区提提需求,这个主要得VNPY来对接。
2020-02-25
@Supercritical-JoinQuant聚宽 感谢!我也去试试。
2020-02-25
@solarhe2006 VN.PY是开源得不用收就能拿到代码....
2020-02-25
两个平台的策略是否可以通用?
2020-05-19
@Hugo2046 收购的还有开发人才,人才最难得!
2020-05-21