【从零开始vnpy量化投资】简介:个人vnpy学习路线

本文主要讲述了一些笔者个人进入量化领域的经历,并将过程中的体会分享给大家,有些内容并不属于可操作的部分,仅仅是个人的一些思考,所以不太适合放入其他章节中。有理解错误的也请各位体谅。这些内容既是过去经历的描述,也可以为本系列的内容做一个简介,即笔者为何会将某些内容设计到专栏中来。作为一个懒鬼,除非出于必要,否则谁愿意写额外的代码呢。

更新一个喜讯,由于最近运气不错,行情适合自己的策略,在期货大赛中获得了月排名前十的成绩,希望以后这样的行情多来一点。
在这里插入图片描述

个人入门经历

笔者进入量化投资领域主要是因为一个偶然的机会,接触到了《Python量化交易》(张扬飞著)这本书。由于我大学是金融学专业,并且工作是软件开发,似乎天然就适合尝试量化投资,所以我在工作了近十年以后,才重新踏足金融领域的内容。
在阅读本书的过程中,笔者逐渐掌握了软件的简单使用,以及了解到一些经典的策略。这本书以前在微信读书里是免费的,这也是我以前经常推荐本书给他人的原因,虽然这本书出版时间较早,书中代码与当前版本vnpy已经有不少变动,但基本的概念是一致的。这本书可以说是目前市面上能找到的最完整的介绍vnpy的书籍之一。
总的来说量化投资这个事情同时涉及到金融与软件开发,所以笔者推荐读者至少需要掌握其中的一项技能,当然如果以技术人的角度来看,入门的时候难点在软件开发,而深入的时候则需要更多的金融和统计学知识。对于已掌握一门编程语言的人来说学习金融学知识的难度,相对金融领域读者学习编程语言来说要容易很多。本篇主要以一个纯技术人(大学学的理论内容实际对干这个基本没什么用)的角度来讲述一下个人学习vnpy的经历,以及其中涉及到的各种内容。

入门

如笔者所说,产生了尝试量化的意图后,我也没有过多地比较不同软件差异,既然有一本书介绍vnpy,就先试试vnpy好不好用。在入门的难度上,可以说vnpy还是很方便的,windows的客户端安装非常简单,只需要申请一下数据账号,就可以开始尝试简单的策略回测。

寻找策略

由于本人在此之前并没有掌握成熟的期货交易策略,所以仅能通过公开的渠道获取策略。这些渠道获得的策略大多简单易懂,但结果也很容易预见,即盈利能力非常堪忧。无论是使用vnpy官方内置的策略示例,还是网络上可以找到的策略设计,可能都无法快速发现可能盈利的策略。这将是一段非常漫长的时期,对大部分人来说都是无法避免的时期。即使是成熟的期货交易者,也是经历过这段时间后才逐渐找到适合自己的盈利策略。

尝试参数优化

vnpy内置了一个非常不错的功能,即参数优化。对于参数较少的策略,参数的值域空间可能不会太大,以双均线为例,如果两个参数的范围取值50个左右,也就是一共可能有2500种参数可以尝试。对于一次回测大概5秒的情况下,尝试所有的参数大约需要4小时。如果参数值域增加,或参数数量增加,将会极大的提高参数空间的数量,这会使参数优化变成一个几乎不可能完成的任务。
在这段时间里,对新人最大的挑战是如何找到参数空间较少但能够盈利的策略。在这里建议各位读者先尝试从最简单的策略来进行验证。比如双均线或其他vnpy自带的策略。这些策略的示例基本仅包含入场和出场的信号计算,适合新手理解策略的核心逻辑。同时参数基本不超过3个,这样也就可以在较短时间内进行参数优化。

初次找到一个回测显示盈利的策略

笔者在随机的几次尝试后,仍未发现可能盈利的策略,于是在很长一段时间内都将重心放到了其他领域的学习。
对于一个期货新手来说,不同品种之间的差异在未实际接触之前是很难了解的。这时候就需要通过各种途径去学习。无论是交易策略还是基本面分析,都应该尽可能的接触,学习其中可以利用的部分。尽量避免带有主观色彩地回避某些领域,对于任何可以量化的交易策略,如果我们感兴趣,都可以通过回测来验证这个策略的方法是否有效。
笔者在学习的过程中,了解到不同品种成交量、交易时间、是否存在外盘类似品种等差异,并且认识到这些差异对行情走势、交易滑点、策略容量的影响。过去回测的时候属于看哪个品种觉得和自己的生活更贴近,或者哪个品种听说过名字。后来开始使用成交量最大的几个品种开始回测,终于偶然间发现了可以盈利的策略。

开始交易

既然回测找到了过去能赚钱的策略,这时候我想所有人应该都会想迫不及待的进入市场,看看是否真的能够赚钱。在这之前,好在已经有了模拟盘的服务,这样我们就不需要直接用真金白银去验证软件了。笔者申请了模拟盘的账号,并且开始运行几个之前回测发现的策略。

网络问题

一开始笔者也是直接使用vnpy的客户端去运行模拟盘,但经常发现下午网络会断开,而且到了夜盘开盘时无法恢复。所以就尝试使用代码方式在每次开盘时间启动服务,如9点和21点。这样可以解决一部分下午收盘导致的网络问题。这部分代码基本在官方示例或论坛里就可以找到。

利用复利

对于一个策略来说,如果不知道当前策略所能使用的资金,就无法准确的控制开仓的数量,所以笔者为几个策略添加了资金计算。在这段时间,通过阅读源码,基本了解了vnpy的cta策略运行方式。

添加止损

根据《Python量化交易》一书中的内容,我也按照固定点位和移动点位止损的方式将功能添加到策略中。经过验证,个人更喜欢移动止损,通过牺牲一些大幅回撤后的盈利机会,来换取止损金额绝对值的减少。这对于刚入门的新人来说,是一个很好的控制风险的方式。

提高参数优化的性能

笔者一开始为了使回测速度尽可能快,所以对于日内策略的参数优化,使用了0.5到1年范围的数据。当添加了止损后,参数不可避免的新增了不少,如是否需要止损、止损的百分比等。由于参数的增加,在参数精度不变的情况下,优化耗时从十几分钟可能变为数个小时。
针对这种情况,一种办法是降低参数精度,这一定程度上也可以降低过度拟合的风险。另一个途径就是优化暴力破解参数优化方法,改用爬山法或遗传算法优化。

开始实盘

获得了最近一年的最佳参数,以及模拟盘短期的盈利效果,笔者信心爆棚地进入了实盘交易。通过一些朋友的介绍,选择了一家保证金率和手续费费率都最低的服务商开始申请接入。经过约1周左右的申请、测试等工作后,终于在21年国庆前开始了实盘的生涯。

实盘限制

笔者参考vnpy的示例写法,编写了实盘的策略。每分钟进行一次开单点位计算并尝试下单和撤销前一分钟的挂单。但到了某天夜盘,我发现客户端开始显示各种挂单被撤销,于是才了解到交易所针对每个品种存在撤单次数限制。这最终也影响着我如何去编写策略代码,减少与交易所的直接交互,尽量将策略信号在系统内部处理,仅在仓位发生变化时再与交易所交互。

实盘故障

由于早期代码编写的问题,实际运行时发现策略的止损功能执行经常出现问题。于是笔者将止损移除后进行回测,发现效果和原来差不多。于是笔者将无止损的版本部署到实盘。但在21年国庆前因为这个改动,导致单日亏损了20%的本金。那天螺纹钢接近跌停,刚好触发了策略的空单开仓点,但随后大幅上涨,而我移除了策略的止损功能,导致亏损扩大了两倍以上。这也使我后来坚定了使用止损的决心。

海龟策略

之前笔者使用的都是单品种的日内策略,这些策略涉及的品种较少。而经过一些学习,笔者了解到了海龟策略,也开始认识到交易策略的核心就只有两件事,进出场信号和仓位管理。只要包含了这两件事,那就包含了一个完整的交易策略。
这时笔者再去研究vnpy自带的海龟信号策略,才了解到这个示例和实际策略之间的差异。于是笔者开始使用vnpy的组合策略重新实现自己的海龟策略。

自动换月

vnpy的换月助手需要手动操作,而且仅操作品种的信息,对于我们储存在策略中的变量则无法管理。所以笔者就自行设计了一套换月机制,以及为了计算长期均线和避免换月后的数据无法获得足够数量的k线,引入了多月份合约和主力合约的加载,这样就接近使用主力连续合约进行交易了。

优化参数回测

海龟策略是一个多品种长期的策略,所以有时需要十多个品种长达十年的数据进行回测。vnpy的默认机制是将待回测数据全部加载到内存中,并开始回测。这部分数据如果全部读取,将会占用高达百G的内存,为了完成这类高内存的任务,笔者针对vnpy的实现机制,优化了回测的启动文件,将数据分段加载,降低了运行时对内存的需求。

推进测试

在笔者实盘了快一年左右的时候,发现策略实际的收益率与参数优化的收益率差异非常大,又因为笔者之前的做法是每隔一段时间就运行一次参数优化,并在后续的时期按新的参数部署。这种方式可以通过推进测试的方式进行验证,也就是针对过去时段的数据进行优化,并对后续时段进行回测。在编写了推进测试的功能后,笔者发现了频繁优化并改动参数的缺点,于是降低了参数优化的频率。

云服务器部署

刚开始实盘的时候,使用一台个人电脑就可以了。当一切走上正轨,个人电脑的缺点将会慢慢暴露,比如断电断网、卡顿。同时没有对外ip的个人电脑需要其他软件才能远程连接,限制了突发情况的紧急处理。
笔者切换云服务器的契机是因为家中电脑因长期不关机导致的卡死。当天机器死机了,但家中并未通知我。直到发现当天行情已达到开仓点位但app中并无成交记录。仅由于这一次意外的损失就足以支付好几年的服务器费用,所以笔者在这件事以后就立刻着手开始将服务转移到云服务器上。

docker部署

因为笔者个人原因,无论是私人电脑还是办公电脑都几经更换,如果每次更新电脑都要在本地搭建开发环境,这将是一件非常麻烦的事情。因为vnpy的环境安装还是比较复杂,尤其笔者自身还有一些定制修改。如果每次都经历这完整步骤会非常耗时。并且在第一次更换电脑的时候,由于笔者不注意,使用了与开发环境不一样的vnpy版本,导致很长一段时间内笔者都要针对兼容性进行大量验证。尤其是部分代码部署后才发现vnpy内部已经修改,这会增加软件故障的风险。
针对这些问题,笔者最终希望创建一个统一的环境,这个环境中安装好了vnpy和必要的工具,在需要使用的时候只需要拉取一份镜像就可以快速启动。好在笔者本职就是软件开发,对这类工具了解较多,最终为自己创建了一个可以快速启动的镜像,省去了更换电脑后的大量环境安装工作。

结束语

以上就是笔者入门以来的经历以及各种应对方式,同时也是对本专栏内容的一个概括,如果对这些内容感兴趣的话,欢迎各位订阅。如果按照文章中的步骤操作遇到问题,可在文章下面留言,我也会根据问题将具体的步骤补充到文章中。
最后祝各位找到适合自己的策略,开启被动赚钱之路。

猜你喜欢

转载自blog.csdn.net/u011687355/article/details/130407565