开发跨平台网格 EA:测试多币种 EA

Roman Klymenko | 11 八月, 2020

概述

本文是专门针对网格智能交易系统系列文章的后记:

我们不会在本文中创建或改进智能交易系统。 我们已经创建了多币种 EA。 其新版本和测试报告,以及用于测试的 SET 文件将附在文后。

本文的主要目的是依据行情测试基于摊平和马丁格尔的 EA,而这最初并未计划。。 在标准普尔 500 指数从 3400 美元跌至 2200 美元的情况下,仅交易多头仓位的智能交易系统能否幸免? 因此,下降幅度超过了 30%。

交易系统的基本规则

在智能交易系统中实现的交易系统由以下规则组成。

市场。 该 EA 仅交易美国交易所股票。 经纪人提供数十种最受欢迎股票的访问。 测试多币种 EA 时将从可用集合当中选择股票。

入场方向。 仅在多头方向开立所有仓位。

如果您查看大多数股票的长期价格走势图,那么选择这个方向就显而易见。 特别是,如果您分析从 2010 年到 2020 年初的时间段。 例如,查看 Microsoft 股票的周线图表:

Microsoft 股票,周线图表

在行情下跌之前,股票一直稳定增长。

入场点。 仓位将根据 RSI 指标的数值开仓。 根据资产,读数将以不同的方式进行解释。 在某些资产上,当 RSI 低于 30 时将执行入场。 对于其他资产,当 RSI 升至 70 以上时,我们将入场。 因此,它完全取决于资产。

摊平层数。 使用不限层数的摊平非常危险。 如果资产价格长期在一个方向上波动,那么每增加一笔新持仓,您的亏损就会增加。

所以,每个品种的网格长度将被限制为四笔持仓(层数)。

即,如果某个品种的网格最多包含 3 层,并且品种价格达到第 4 层开仓级别时,则系统将把此价位上的所有已存在持仓平仓,而不是开立第四笔持仓。 在摊平算法中应用了止损。

摊平方法。 对现有持仓摊平(通过在较低的价位加仓),可以利用固定手数,或在新开每笔持仓时增加手数。

如果使用马丁格尔方法增加手数,则止损时的亏损将大大高于从止盈中获得的利润。 这就是为什么用马丁格尔策略在心理上难以接收的原因。 当您看到止损瞬间把您智能交易系统过去两周的全部收益回吐时,这肯定会令人十分沮丧。 故此,最好不要完全设置止损。

我们选择金融产品时,应从固定手数摊平策略表现良好的那些品种开始。

如果我们需要使用马丁格尔,则手数不应成倍增加,而是在每层中都应以初始手数增加。

下表显示了不同摊平类型的计算。

摊平类型
层数链条数量
 止损时的损失
 固定
 2
 3
 固定  3
 6
 固定  4
 10
 按初始手数值增加
 2
 4
 按初始手数值增加  3
 10
 按初始手数值增加  4  20

在层数中指定相应层数出现止损时的亏损。 也就是说,如果每层为 7 点,则在第 4 层处固定摊平的亏损将等于 10*7 = 70 点。

因此,如果按初始手数增加手数,则层数链不能超过三层。 这是因为 4 层的亏损太大。

网格大小和获利大小。 网格大小(两个未平仓合约之间的距离)和止盈大小都应基于优化进行选择。 为了限制止损时的亏损,应设置参数,从而令亏损等于盈利的 1-3 点。

交易和测试周期。 如大多数股票图表中所见,价格在很长一段时间内一直稳定增长。 但是这里的关键词是“长期”。 设计该交易系统时,周期不少于一年。 最佳周期是 4 年。 如果您决定采用该交易系统,建议您考虑四年的期限。

测试和优化取在 2016 年 1 月至 2020 年 1 月的 4 年区间。 为找到的一组金融产品增加额外测试,取在 2020 年 4 月股票市场暴跌期间。

交易手数。 测试和优化将以固定手数执行。 每个品种都用独立的手数大小。

由此产生的多币种 EA 将通过逐渐递增的交易手数进行额外测试。 在这种情况下,若余额增加了一倍,则手数也会增加一倍。 重复此增量,直到操作手数达到等于 25 倍初始手数值为止。

在输入参数里定义递增手数。 这些参数用于指定资金量,递增的可操作手数最高达此大小(请参见下图)。

递增操作手数的输入参数

总结。 这些都是我们交易系统操作所依据的规则。 我们在单个金融产品上测试系统的盈利能力。


单一金融产品的优化参数

我不会为每个产品提供单独的优化详细信息,因为本文的意图并不在此。

在基于实际报价的每次报价模式中执行优化。

优化结果按恢复因子排序。 如果某次测试显示盈利,则返回恢复因子值。 如果某次测试亏损,则会显示帐户余额减少的百分比(带有负号),而不是恢复因子。 如果 EA 在测试期间执行的交易少于 30 笔,则返回 0,因为交易太少,不足以得到客观的统计信息。

在标准选项中,未提供排序方法。 它是在智能交易系统中实现的。 为了使用它,打开策略测试器中的设置选卡,然后选择自定义最大(请参见下图)。

自定义条件的最高值

还有,在单一品种优化和测试过程中使用了前向验证测试。 在 4 年间隔内我们得到的最佳前向验证周期为 1/4 。 这意味着前三年用于复盘测试,而最后一年用于前向验证测试。

为多币种智能交易系统选择的品种

现在,我们研究测试结果。 此处是金融产品的余额表,即在我们的多币种智能交易系统里最终包含的。 其中有 11 种金融产品。 首先,EA 并非设计用来交易更多金融产品。 其次,很难选择无关联的品种。

AAPL:

AAPL, 2016-2020

BRK.B:

BRK.B, 2016-2020

PEP:

PEP, 2016-2020

WMT:

WMT, 2016-2020

CVX:

CVX, 2016-2020

EBAY:

EBAY, 2016-2020

MSFT:

MSFT, 2016-2020

DIS:

DIS, 2016-2020

JPM:

JPM, 2016-2020

JNJ:

JNJ, 2016-2020

S&P500:

S&P 500, 2016-2020

图表末端附近的大幅下跌实际上并费暴跌。 该位置显示的是复盘测试结束,并开始前向验证测试。 这是因为前向验证测试需从初始本金额度开始,而并非从复盘测试结束时的余额开始。

此处的表格列出了所选金融产品的测试结果:

 品种 恢复因子(复盘/前向验证)
盈利因子(复盘/前向验证)  最大回撤 (复盘/前向验证) 交易 (复盘/前向验证)
 AAPL
 7.25 / 11.04
 3.93 / 37.99
 49.41 / 30.36
 134 / 58
 BRK.B  7.41 / 1.79
 3.11 / 2.01
 15.06 / 14.96
 70 / 29
 PEP  5.2 / 3.26
 2.49 / 5.42
 13.96 / 10.42
 55 / 15
 WMT  5.9 / 3.19
 2.51 / 2.56
 25.52 / 20.7
 67 / 25
 CVX  6.51 / 3.25
 3.03 / 4.26
 19.17 / 14.82
 78 / 24
 EBAY  4.57 / 1.95
 8.87 / 8.85
 20.7 / 12.96
 43 / 12
 MSFT  7.41 / 3.13
 6.69 / 5.26
 16 / 20.93
 72 / 44
 DIS  3.97 / 1.19
 2.32 / 1.84
 26.97 / 32.02
 101 / 49
 JPM  4.34 / 3.07
 1.75 / 2.81
 12.69 / 10.86
 164 / 54
 JNJ  6.24 / 1.23
 5.66 / 2.31
 28.94 / 44.36
 68 / 29
 S&P500  2.55 / 1.98
 1.65 / 1.57
 17.81 / 21.18
 85 / 91

本末附有所有策略测试器的报告。

可以相信,前向验证测试可以得到更准确的结果,并且还可以避免过度优化。 我不太同意这种观点。 尽管如此,我在优化时也采用了这种类型的测试。

我的观点,前向验证测试有一个优势。 它能够令测试 EA 从两个不同的起点运行。 这样可以节省您的时间。

至于其余的,结果的解释可能比前向验证测试更加复杂。

例如,简单地加上复盘和前向验证测试的结果其实并不能令你获得整个测试期间的总恢复因子。 这是因为在这些区间内,最大回撤通常不同。 但我们需要这个共同的最大回撤,从而来判断初始成交量或最低存款额。 因此,我们必须取用最大回撤值作为整个区间的最大值。 在此情况下,回撤率较低的区间中计算出的恢复因子并不精准。

甚至,如果您可以查看余额表,即使不进行前向验证测试,您也不会过度优化智能交易系统。 如果余额表在整个测试区间都在稳定增长,则表明您已选到合适的参数。 如果主要增长只是出现在余额表的开头,而资金水平保持不变,或位于图表的右侧,则该参数并不合适。

行情暴跌前的多币种 EA 测试

在智能交易系统里,若将选定的金融产品合并为一个会产生什么影响? 结果会比单独交易每个品种的结果更好吗? 此处是交易固定手数时的余额图和测试结果:

同时交易 11 种金融产品(固定手数)时的余额图

即使单凭肉眼,您也可以看到与交易单一金融产品相比,余额图已经平滑了很多。 我们另外查验测试结果表格。

 恢复因子  盈利因子 净盈利
 最大回撤 交易
 20.56  2.94
 1 992
 96.91
 1 308

该表格还显示了多元化的影响。

初始本金为 200 美元。 四年之后,我们已得到 1,992 美元。 这意味着在交易固定手数时,四年的利润几乎达到 900%。

这似乎是一个很好的结果。 然而,实际情况有些糟糕。 首先,200 美元的初始本金太少了。

最大回撤为 97 美元。 但这并不意味着该系统用 97 美元的本金就足以交易。 您还需要考虑需为持仓保留的保证金大小。

测试之后,EA 在日志栏中添加有关测试期间得到的最大回撤的信息。 在我们的案例中,最大回撤值为 190 美元。 这意味着舒适的交易,至少需要有 97 美元 + 190 美元 = 280 美元。 我们四舍五入到 300 美元。 这意味着 4 年的利润几乎是 600%。

该利润是按固定手数达成的。 如果每当余额增加初始存款值的倍数时,我们也增加手数会如何? 智能交易系统最多可将初始手数增加 25 倍。 我认为这个限制足以满足我们的测试要求:

同时交易 11 种金融产品时的余额图(递增手数)

这次图表不是那么平滑。 但最终的利润是惊人的! 存款从 200 美元(或所需的 300 美元)增加到 20,701 美元。 这相当于四年内几乎达到 7,000%!

在此情况下,EA 开始依据本金 7,100 美元采用最大手数。 这意味着如果我们不加以限制,操作手数可以进一步增加。

多币种 EA 测试,包括行情下跌区间

结果也是非常喜人。 但在近期行情暴跌期间,EA 的表现如何?

这一部分涉及本文的主题。 下一个测试区间是从 2016.01.01 到 2020.04.01。

具有相同设置的多币种 EA 测试结果,交易固定手数:

同时交易 11 种金融产品(固定手数)时的余额图

乍一看,回撤几乎无法察觉。 现在我们看一下测试结果:

 恢复因子  盈利因子 净盈利
 最大回撤 交易
 13.91  2.54
 1 971
 141.69
 1 400

现在您看到了区别。 恢复因子降低了 7。 最大回撤增加了 1.5 倍。 利润几乎保持不变。 实际上,我们从一月到二月底的收入都亏损掉了。 下降幅度超过 30%。

现在我们看一下采用逐渐增加手数到 25 倍时的测试结果:

同时交易 11 种金融产品时的余额图(递增手数)

即使在这种情况下,跌幅也不是很明显。 利润为 20,180美元,仅比 2020 年初少了 600 美元。

我们来汇总一下。

通常来说,我希望我已经证明,即使交易采用摊平和马丁格尔策略系统也并非那么危险。 当然,您应该为摊平设置担责限制。 这意味着止损也应与摊平和马丁格尔同时采用。

结束语

自 2008 年上一次市场大崩盘以来,已经过去了 10 多年。 自那时以来,市场一直在稳定增长。 无人知晓,在 2020 年股市崩盘后,也许会开始类似的 10 年增长。 对于本文所述的交易系统而言,这将是完美的时机。

对于我来说,我确定会启动一个机器人,令其根据阐述的系统进行真实交易。 智能交易系统附在文后,故您也可以使用它。