汇商琅琊榜特约作者: zombie工作室
先说几个误区:
很多人看ea会看历史回测,这很重要,但是往往很多声称十年二十年稳定盈利的ea,只是历史回测还可以,实盘就亏钱。这里最大的问题就是过度优化,过度优化是骗局,适当的优化是正常的。
利用SQ软件,你只要输入,比如哪个品种的周期,十年交易1万笔交易次数,最少盈利多少钱,最大净值回撤多少,等这些最终的结果,SQ会生成很多个相应的策略,再利用SQ软件找出最优秀的策略,生成mq4语言,编译一下,一个好的ea就此产生。
在这片文章中我会解释如何用SQ构建一个E-mini S&P 500 Futures(mini标普)的稳定盈利的策略,包括不同稳定性测试的几个步骤。
当使用机器学习技术,如遗传编程,这是非常容易获得完美曲线的,但是危险就在于曲线拟合,因此策略构建过程的最重要部分是测试策略的稳定性,以确保策略不与历史数据曲线拟合,最大的骗局之一宣传十年稳定测试记录,其实是利用已有的十年数据,专门找出适合的策略,这就是造成测试好看,实盘不行的尴尬局面。
在本文中,我将解释如何使用双(样本外)过滤器进行测试。
通俗来说,我们做一个策略,都需要样本,比如你最近半年手动交易不错,想把这个策略写成ea,完成之后,这半年历史回测肯定是完美的,因为已经验证了可以稳定盈利。这半年的数据叫做“样本内”,那么除了这半年的数据,其他的叫做“样本外”。
下面是一个在ES/TF/EMD(三个跟标普高度相关的期货品种)上有良好表现的策略,我会一步一步解释如何通过SQ获得这个结果。
上图整个周期是2003年到2013年的一个策略,其中根据2003年到2012年的历史数据做了一个交易策略,表现不俗,然后用2013年的数据进行测试,同样表现ok。
此策略的下载地址为:
https://strategyquant.com/forum/topic/1688-emini-strategy-for-es-tf-emd/
开始我们的策略构建过程
1.获取数据
2.生成一个候选策略库
3.首次过滤---样本外检验
4.二次过滤---重复测试和二次样本外检验
5.三次过滤---EMD, TF(TF也是高度相关标普的一个期货品种)检验
6.四次过滤----稳健性测试
7.五次过滤----样本外矩阵测试
1.获取数据
在期货和外汇上有很多不同的地方,首先,获得期货数据是非常困难和昂贵的,大多数平台不会给你免费的历史数据。
和外汇不同的是期货有合约到期日。合约通常可以交易3到4个月,然后进行换月移仓。
你也可以把知名外汇经纪商OANDA的历史数据复制到SQ,以便能生成策略。要做到这一点,我们必须导出OANDATrader的数据,并将它们导入到MyjyQualt中。
2.构建候选策略池
第一步我会生成一个数量很大的候选“好”策略,然后我会测试这些策略的稳健性。
首先,好的策略是在多个品种上都有好的表现。我的目标是发现一个好的策略在ES(mini标普)上。但是我想我的策略是稳健的,因此在其他品种也是可以盈利的,比如EMD(电子迷你标普中型400期货)。我增加了EMD的数据,因此现在这个策略将在ES (mini标普)和EMD上测试。
我将使用“遗传进化模式”(SQ的一个优势在于你不懂编程,只要输入你想要的结果,就可以自动生成无数个可以盈利的ea,你再一个个测试这些ea来挑选最合适的,我使用的遗传进化模式,换句话说使用SQ可以一分钟之内生产几百个十年稳定盈利的ea)获得200个候选策略,让这些策略进化30代之后,在此基础上寻找最优策略。这样可以避免进入死胡同。最好的策略也会不断存储在数据库中(看下图)。
(遗传选项)
最后一个重要的设置是排名选项。我设置数据库存储2000个最佳策略,因为我希望有一个良好的基础,进一步的选择过程。我还设定了选择标准,回报/回撤比率-这是我最喜欢的。你可以使用其他的选择标准,也许你会得到更好的结果。
(排名选项)
策略设置初始筛选标准:
我想考虑的策略至少2000美元的利润,有回报/DD(最大风险)比率>3(因为是两个品种,ES迷你标普和EMD每个品种的回报风险比大于3),至少300笔交易,和回报/DD(最大风险)比率的“投资组合”至少为2.5(因为是两个品种,ES迷你标普和EMD综合的回报风险比大于2.5)。
因为我是在两个品种——ES和EMD上测试策略,所以策略的组合结果也将被计算。
现在我们只需点击开始按钮,让程序完成这项工作。
我希望产生至少2000个“好”的策略,这个过程取决于计算机的配置和速度,它可能需要几个小时甚至几天,所以要有耐心。如果程序在很长一段时间内没有产生任何策略,我们应该切换到更高的时间范围——30分钟、1小时,或者减少约束条件。
3.初次过滤——第一次样本外检验
当我在数据库中有2000个潜在的好策略时,我会停止生成并开始过滤。
我将应用第一个过滤器——移除所有样本表现不佳的系统,只需整理数据库中的策略,删除那些利润小于3000美元的。
(样本外检验净利润排序策略库)
第一步通常会删除大部分的策略,从最初的2000个候选策略下降到1700左右。
4.二次过滤——重新测试和第二次样本外检验
重新测试策略很简单——我只需选择数据库中的所有策略,然后点击重新测试试按钮。这将把所有的策略移到重测选项卡。
然后我将数据周期扩展到可用数据的末尾。策略是基于2003年1月2号——2012年12月31号(9年时间)的数据生成的,现在我将重新测试数据策略,直到2013年12月31号(策略生成期间未使用这一年数据),样本内数据为2003-2012,样本外数据为2012-2013。
(重新测试)
测试可能需要一些时间,在完成之后,我将再次删除所有样本外性能差的系统。同样,我可以通过净利润对数据库中的策略进行排序,删除那些利润小于1500美元的策略。
5.三次过滤——EMD, TF(TF也是高度相关标普的一个期货品种)检验
第三次过滤是可视的,我会检查策略在EMD和TF上的表现,从盈利,净值图表,然后把截图导入到投资组合的图表中对比EMD和TF的曲线。
图一
图二
EMD / TF表现对比(图一是好的策略保留,图二是差的策略舍去)
由于这些品种是高度相关的,我希望该策略在所有三个品种上都能盈利,就像第一个例子一样。我们可以在第二个例子中看到,与ES和EMD相比,TF的表现非常糟糕,它的权益曲线没有任何可取性,所以我不考虑这样的策略。
我们不应该只看盈利结果的表现,而应该看净值曲线。我们应该摒弃所有长期停滞或大幅缩水的净值曲线。过滤掉糟糕的策略,只保留表现最好的10-20个策略。
6.四次过滤——稳健型测试
去除掉所有表现差的策略,保留不到20个表现良好的策略。我将通过稳健性测试和资金管理再次测试这些策略。
我会改变资金管理的方式从固定头寸改为固定金额,让每个策略每笔交易承担500美金风险,通过对照盈亏比我们可以筛选更好的策略了。
(资金管理设置)
在蒙特卡洛稳健性测试中,我至少运行20次回测,进行各种压力测试。
(稳健性测试)
如何评价稳健性测试
稳健性测试向我们展示了该策略在现实中的表现,存在错过的交易、不同的历史数据等等。我在寻找至少95%可信度水平下,具有可接受的净利润和回撤值的策略。
(稳健性测试结果)
我们可以看到两个策略的稳健性测试结果。左边的盈利水平虽然大幅增加,但是回撤是原来结果的3倍多。右边的盈利水平没有改变,回撤也相差不多。因此右边的更好一些。在这个步骤中,我将只选择1-3个最终策略,经受下一个考验。
这些最终策略是通过稳健性测试、总体盈利能力和简单性方面来选择的——我希望策略规则尽可能简单。
7.五次过滤——样本外矩阵测试
如果策略能够通过样本外矩阵测试,说明该策略能够适应各种市场环境而且不是过度优化的。除此之外,样本外测试矩阵能够告诉我们策略是否需要持续优化和最佳工作周期。
(样本外矩阵测试)
(参数优化)
这个策略相对简单,因此我仅仅优化止损和移动止损,没有必要优化所有的参数。
评估样本外矩阵
当优化结束后,在数据库点击样本外矩阵的结果看到具体的细节。建立一个评分标准来评估优化结果。
(样本外矩阵)
3D评分图表显示,24个组合中有19个通过了我们的标准。我在寻找2×2或3×3区域,其中大多数组合都通过了——这将是最好的重新优化组合的组。
在本例中,我可以看到,30%样本外的10次运行是最好的组合之一,因为它被其他也通过的组合包围着。30%的概念可以理解成,用前三年的数据做策略优化,做出的策略今年交易。以此类推,不断适应市场的变化。
当我查看优化图时,我可以看到,策略在重新优化过程中仍然是有利可图的。
(样本外优化图表)
结论
这些策略仅仅是一个样本,演示如何使用SQ获取优质的策略。
这些策略SQ仅仅运行了两天,我个人花了1-2个小时测试。如果你有兴趣,带着自己的灵感,用自己的方法来改进这个策略。最重要的,不要试图发现在历史数据上完美的策略。这是一个灾难,因为过度优化的策略一定会在实际交易中失败。
我们的目标应该是找到一个策略,可以跨市场,跨品种,跨周期的,这种策略具有真正的优势。如果大家感兴趣,后续我将做更深入的分享,欢迎转发、点赞支持!