个人入门经历
寻找策略
由于本人在此之前并没有掌握成熟的期货交易策略,所以仅能通过公开的渠道获取策略。这些渠道获得的策略大多简单易懂,但结果也很容易预见,即盈利能力非常堪忧。无论是使用vnpy官方内置的策略示例,还是网络上可以找到的策略设计,可能都无法快速发现可能盈利的策略。这将是一段非常漫长的时期,对大部分人来说都是无法避免的时期。即使是成熟的期货交易者,也是经历过这段时间后才逐渐找到适合自己的盈利策略。
尝试参数优化
vnpy内置了一个非常不错的功能,即参数优化。对于参数较少的策略,参数的值域空间可能不会太大,以双均线为例,如果两个参数的范围取值50个左右,也就是一共可能有2500种参数可以尝试。对于一次回测大概5秒的情况下,尝试所有的参数大约需要4小时。如果参数值域增加,或参数数量增加,将会极大的提高参数空间的数量,这会使参数优化变成一个几乎不可能完成的任务。在这段时间里,对新人最大的挑战是如何找到参数空间较少但能够盈利的策略。在这里建议各位读者先尝试从最简单的策略来进行验证。比如双均线或其他vnpy自带的策略。这些策略的示例基本仅包含入场和出场的信号计算,适合新手理解策略的核心逻辑。同时参数基本不超过3个,这样也就可以在较短时间内进行参数优化。
初次找到一个回测显示盈利的策略
笔者在随机的几次尝试后,仍未发现可能盈利的策略,于是在很长一段时间内都将重心放到了其他领域的学习。对于一个期货新手来说,不同品种之间的差异在未实际接触之前是很难了解的。这时候就需要通过各种途径去学习。无论是交易策略还是基本面分析,都应该尽可能的接触,学习其中可以利用的部分。尽量避免带有主观色彩地回避某些领域,对于任何可以量化的交易策略,如果我们感兴趣,都可以通过回测来验证这个策略的方法是否有效。笔者在学习的过程中,了解到不同品种成交量、交易时间、是否存在外盘类似品种等差异,并且认识到这些差异对行情走势、交易滑点、策略容量的影响。过去回测的时候属于看哪个品种觉得和自己的生活更贴近,或者哪个品种听说过名字。后来开始使用成交量最大的几个品种开始回测,终于偶然间发现了可以盈利的策略。
开始交易
既然回测找到了过去能赚钱的策略,这时候我想所有人应该都会想迫不及待的进入市场,看看是否真的能够赚钱。在这之前,好在已经有了模拟盘的服务,这样我们就不需要直接用真金白银去验证软件了。笔者申请了模拟盘的账号,并且开始运行几个之前回测发现的策略。
网络问题
一开始笔者也是直接使用vnpy的客户端去运行模拟盘,但经常发现下午网络会断开,而且到了夜盘开盘时无法恢复。所以就尝试使用代码方式在每次开盘时间启动服务,如9点和21点。这样可以解决一部分下午收盘导致的网络问题。这部分代码基本在官方示例或论坛里就可以找到。
利用复利
对于一个策略来说,如果不知道当前策略所能使用的资金,就无法准确的控制开仓的数量,所以笔者为几个策略添加了资金计算。在这段时间,通过阅读源码,基本了解了vnpy的cta策略运行方式。
添加止损
根据《Python量化交易》一书中的内容,我也按照固定点位和移动点位止损的方式将功能添加到策略中。经过验证,个人更喜欢移动止损,通过牺牲一些大幅回撤后的盈利机会,来换取止损金额绝对值的减少。这对于刚入门的新人来说,是一个很好的控制风险的方式。
提高参数优化的性能
笔者一开始为了使回测速度尽可能快,所以对于日内策略的参数优化,使用了0.5到1年范围的数据。当添加了止损后,参数不可避免的新增了不少,如是否需要止损、止损的百分比等。由于参数的增加,在参数精度不变的情况下,优化耗时从十几分钟可能变为数个小时。针对这种情况,一种办法是降低参数精度,这一定程度上也可以降低过度拟合的风险。另一个途径就是优化暴力破解参数优化方法,改用爬山法或遗传算法优化。
开始实盘
实盘限制
实盘故障
由于早期代码编写的问题,实际运行时发现策略的止损功能执行经常出现问题。于是笔者将止损移除后进行回测,发现效果和原来差不多。于是笔者将无止损的版本部署到实盘。但在21年国庆前因为这个改动,导致单日亏损了20%的本金。那天螺纹钢接近跌停,刚好触发了策略的空单开仓点,但随后大幅上涨,而我移除了策略的止损功能,导致亏损扩大了两倍以上。这也使我后来坚定了使用止损的决心。
海龟策略
之前笔者使用的都是单品种的日内策略,这些策略涉及的品种较少。而经过一些学习,笔者了解到了海龟策略,也开始认识到交易策略的核心就只有两件事,进出场信号和仓位管理。只要包含了这两件事,那就包含了一个完整的交易策略。这时笔者再去研究vnpy自带的海龟信号策略,才了解到这个示例和实际策略之间的差异。于是笔者开始使用vnpy的组合策略重新实现自己的海龟策略。
自动换月
vnpy的换月助手需要手动操作,而且仅操作品种的信息,对于我们储存在策略中的变量则无法管理。所以笔者就自行设计了一套换月机制,以及为了计算长期均线和避免换月后的数据无法获得足够数量的k线,引入了多月份合约和主力合约的加载,这样就接近使用主力连续合约进行交易了。
优化参数回测
海龟策略是一个多品种长期的策略,所以有时需要十多个品种长达十年的数据进行回测。vnpy的默认机制是将待回测数据全部加载到内存中,并开始回测。这部分数据如果全部读取,将会占用高达百G的内存,为了完成这类高内存的任务,笔者针对vnpy的实现机制,优化了回测的启动文件,将数据分段加载,降低了运行时对内存的需求。
推进测试
在笔者实盘了快一年左右的时候,发现策略实际的收益率与参数优化的收益率差异非常大,又因为笔者之前的做法是每隔一段时间就运行一次参数优化,并在后续的时期按新的参数部署。这种方式可以通过推进测试的方式进行验证,也就是针对过去时段的数据进行优化,并对后续时段进行回测。在编写了推进测试的功能后,笔者发现了频繁优化并改动参数的缺点,于是降低了参数优化的频率。
云服务器部署
刚开始实盘的时候,使用一台个人电脑就可以了。当一切走上正轨,个人电脑的缺点将会慢慢暴露,比如断电断网、卡顿。同时没有对外ip的个人电脑需要其他软件才能远程连接,限制了突发情况的紧急处理。笔者切换云服务器的契机是因为家中电脑因长期不关机导致的卡死。当天机器死机了,但家中并未通知我。直到发现当天行情已达到开仓点位但app中并无成交记录。仅由于这一次意外的损失就足以支付好几年的服务器费用,所以笔者在这件事以后就立刻着手开始将服务转移到云服务器上。
docker部署
结束语
以上就是笔者入门以来的经历以及各种应对方式,同时也是对本专栏内容的一个概括,如果对这些内容感兴趣的话,欢迎各位订阅。如果按照文章中的步骤操作遇到问题,可在文章下面留言,我也会根据问题将具体的步骤补充到文章中。最后祝各位找到适合自己的策略,开启被动赚钱之路。
文章为作者独立观点,不代表股票交易接口观点