![开发跨平台网格 EA(最后部分):多元化是提高盈利能力的一种途径](https://c.mql5.com/i/articles/overlay.png)
开发跨平台网格 EA(最后部分):多元化是提高盈利能力的一种途径
概述
在本系列的前几篇文章中,我们尝试了各种方法来创建或多或少能够盈利的网格智能交易系统。 我们设法来实现短语的第二部分:“或多或少能够盈利”。 障碍出现在第一部分当中。 智能交易系统在很长一段时间内都在盈利,但其低额利润不足以证明使用订单网格或马丁格尔是合理的。
我们的终极目标是每年赚取 100% 的利润,而最大回撤不超过 20%。 我们无法实现这个目标。
在本文中,我们将尝试实现这个终极性能。 如果我们可以超越这些数字,当然更好。
增加 EA 盈利能力的方法
如果我们不改造交易系统底层,则还有另外两种可能的途径,能够有助于我们提高盈利能力。
第一种方法是降低时间周期,这可在 EA 参数里优化。 这可令我们准确地调整 EA,令其适合当前市场周期,并获得最大的利润。
但是,该方法具有明显的缺点。 曾经盈利不能保证未来依然盈利。 在 EA 测试所用的时间间隔越短,则行情变化摧毁策略的可能风险就越高。
第二种方法是多币种交易(多元化)。 每种金融产品的手数将小于单币种交易的手数。 运用此种亏损管理,即便您在任意金融产品上有回撤或止损,最大余额回撤也会少于单币种交易。 而且,其他交易品种的盈利可助您迅速地回款。
所以,多元化的宗旨主要不是为了提升交易利润,而是为了降低最大回撤。 唯一的例外则是,在单一金融产品上进行的交易非常稀少,因此在异种金融产品上进行的交易几乎不会重叠。
再说,我们考虑到一种理想化的情形,当只有一种金融产品出现亏损,而其他金融产品并未出现问题时,它们就会持续盈利。 这会在现实中发生吗? 请注意,主要外汇对的强劲走势几乎总会影响其他货币对。 那么其中一个品种出现问题会自动意味着其他金融产品出现问题吗? 在这种情况下,我们将遇到更大的回撤,而非回撤减少。
为了检查金融品种是否独立,我们需要一款可以一次交易多种金融产品的智能交易系统。
研究新的智能交易系统
当然,我们可以利用来自上一篇文章的智能交易系统(开发跨平台网格 EA(第三部分):基于调整且支持马丁格尔的网格),它只能交易一个品种。 我们可以在不同的金融产品上分别运行测试,然后比较优化结果,并尝试了解多货币交易将如何影响最大回撤。
然而,此过程将花费大量时间。 这种比较的结果也会令人怀疑。
因此,在本文中,我修改了最后的 EA,令其能够同时在多个品种上运行:它同时可以交易多达 11 个金融产品:
新的智能交易系统名为 griderKatMultiAEA。 其源代码和编译版本附挂于下。
我们将不会研究新智能交易系统的结构和源代码。 与之前版本的智能交易系统唯一的区别是,每个交易品种都使用单独的输入参数。 当前版本拥有 11 组参数,而以前的 EA 只有一组。 对于每个参数组,您可以添加需要在测试中使用的品种名称。
智能交易系统测试和优化
尽管事实上这仍然是一款跨平台的 EA,但只能在 MetaTrader 5 中对其进行测试和优化。
MetaTrader 4 不支持多种金融产品上的测试。 甚至,它不允许测试与当前启动时的金融产品不同的其它品种。 好在,多货币智能交易系统(包括本文里开发的这一款)可以在 MetaTrader 4 中运行。
操作的时间帧再次选中 M5。 优化将在模式基于真实即时报价的每次即时报价下执行。 测试结果则依据余额和回报率进行评估。
在上一篇文章中,EA 在 5 年期内进行了测试。 现在我们将测试间隔降低到 1 年。 那么测试期为:从 2018.10.01 到 2019.10.01。
如上所述,通过降低时间间隔,我们可以选择适合当前价格走势的最佳 EA 参数。 但是,若您降低测试间隔,请确保每次都要重新优化 EA 参数。 例如,如果在 1 年期内执行优化,则可以每月一次重新优化 EA 设定。
修订交易系统
上一篇文章自发布以来,已经过去了很长时间。 在真实帐户上测试网格 EA 肯定需要时间。 在此期间,一个帐户的存款亏损殆尽,第二个帐户几乎亏空,而 EA 管理的第三个帐户上资金增加了一倍,随后所有盈利回吐。
鉴于这种令人沮丧的结果,我添加了新规则,即在本文中提到的优化智能交易系统时应遵循的规则。
亏空的帐户和近乎亏空的帐户开立之时用于进行证券交易。 这里的问题与交易系统完全无关,而是与持仓所需的保证金级别有关。
实践证明,股票市场不能接受大量的持仓链。 鉴于在股票市场上可以使用的杠杆通常很小,因此在开仓和维持仓位时帐户中大量资金被冻结。 当走势处于不利方向时,第五次开仓之后,再开新仓会发现余额不足。 在这种情况下,智能交易系统将不再根据底层算法进行交易。 它无法建立新仓位,甚至现有持仓都无法由止损平仓,因为链条尚未达到最大可能间距。
由于此特点以及英特尔股价的下跌,第一个帐户亏空了。 第二个帐户也在股票市场里操作,一种金融产品的最大持仓数限制为 4。 但是事件似乎很多,如果耐克的股价走高,它也会亏损,因为保证金不足以开新仓,故不能完成链条。
如果保证金足以令 EA 正常运行,将会发生什么? 这可以在另一个帐户上验证; 其信号在此链接。 最初,该帐户获得了 $400 的利润,但是在上个月仅剩下 $140 的利润。 仍然还有盈利。
至于外汇市场的信号,它表现良好,直到其中一种金融产品开始出现强劲走势,而在之前 15 个交易日内赚到的 100% 利润亏损殆尽。
EA 在交易该金融产品时使用了浮动止损价位。 这意味着该品种的加仓不是按固定等级开仓,而是取决于价格行为。 即,它们是在回滚时开仓。 这个主意看起来不错,但随后开始的走势几乎没有回滚,在此期间全部利润回吐。
结果就是,我们要在测试中添加以下规则。
- 首先,仅在外汇市场中执行交易,在该市场中可以使用较大的杠杆,这意味着您可以用有限的资金开立大量仓位。
此外,链条中的最大持仓数量为 2。 此即,如果价格达到链条中第 3 个开仓价位时,则 EA 将链条中所有持仓全部平仓。
假设该间距等于 40 个点。 那么,如果价格相对于第一笔持仓的价位移动了 80 个点,将触发止损。 总的止损大小等于 120 个点(第一笔持仓的止损点为 80 个点,第二笔持仓的止损点为 40 个点)。
当然,最好将链条限制为一笔持仓。 然而,那就不再是网格了。 甚至,如果没有一条成交链,我们的策略几乎无法赚取任何可观的利润。
- 另一条新规则:持仓之间的间距必须为固定点数。
在这种交易策略中,仅当价格相对于最后一笔持仓移动了确定的点数,我们才会加仓。
至于开仓原则,它也有变化。
在上一篇文章中,我们测试了若干种开立第一笔持仓的方法:
- 按前一天的移动方向;
- 按一系列单向柱线的走势方向或逆反方向;
- 取决于当前价格持仓相对于移动平均线的位置。
现在,我们将测试另一种方法:根据 RSI 指标值开立第一笔持仓。 如果 RSI 数值超过 80,开空头交易。 如果 RSI 数值低于 30,开多头交易。 这意味着将根据当前趋势开仓。
根据我的观察,在 5 分钟时间帧的 RSI 最适合我们的 EA,因此我们会使用此时间帧进行测试和优化。 甚至,RSI 的指标周期也会固定。 它将设置为 35。 测试表明,在任何金融产品上,周期值超过 35 都会急剧降低成交数量,这对我们来说是不可接受的。 如果该值低于35,则止损数量会增加,交易将无利可图。
因此,我们将使用 3 个参数优化 EA:
- 网格大小
- 入场方向(任意方向,仅多头,仅空头)
- 止盈级别
在单独的品种上测试新系统
我们将采取以下行动:
- 首先,针对每种外汇金融产品进行测试和优化
- 根据得到的结果,选择 5 种表现最佳的金融产品
- 之后,我们将尝试各种金融产品组合,然后看看是否有可能通过多元化提升 EA 回报率。 即为,是否可以提高交易盈利能力。
结果在此。 所有测试和优化均已执行。 根据得到的结果确定以下优胜者:USDCAD,EURUSD,EURGBP,EURAUD,AUDNZD。 策略测试器报告附在下面。 此为测试结果的摘要表格:
品种 |
回报率 |
最大 回撤, $ |
交易数 |
入场方向 |
---|---|---|---|---|
USDCAD |
7.78 |
39 |
104 |
任意 |
EURUSD |
6.05 |
52 |
49 |
空头 |
EURGBP |
5.17 |
51 |
51 |
多头 |
EURAUD |
3.61 |
77 |
42 |
多头 |
AUDNZD | 2.57 | 63 | 75 | 任意 |
除了 AUDNZD,这里没有必要提供余额图表,因为这些图表非常相似,回报率值很高。 尽管如此,我在这里还是加上了它们。 屏幕截图还包含带有 D1 时间帧的 1 年期金融产品价格图表,其中示意了开仓点数。 因此,我们可以查看测试年份价格走势的特性。
USDCAD, 任意方向:
EURUSD, 空头:
EURGBP, 多头:
EURAUD, 多头:
AUDNZD, 任意方向:
用一组产品测试交易系统
根据之前的测试,EA 在 USDCAD 品种上表现最佳。 其回报率为 7.78。 这意味着,以 $100 最大盈利计算,按固定交易手数,我们一年赚 $778。
但 $100 的回撤等于 100%。 为了实现回撤目标 20%,我们需要将手数减少 5 倍。 在这种情况下,回报率也会降低 5 倍: 7.78 / 5 = 1.5。
因此,通过缩短测试间隔,我们设法超过了目标值:取而代之年盈利 100% 且回撤 20%,我们设法获得了 150%。
但是风险仍然巨大。 我们将整体资金托付给一个品种。 如果链条中出现止损,我们将亏损相当大一部分利润。 我们继续研究,看看多元化将如何影响系统。
优化将使用选定的一组金融产品来执行。 我们将测试 5 个品种的组合,并观察它们如何相互作用。
执行测试之后,同时交易所选五个品种所获得的最佳结果:
- 回报率: 17.11;
- 最大回撤, $: 77;
- 总交易数: 324
一次交易 5 个品种时的最终余额图:
回报率提高到 17.11。 此即,通过多元化策略,我们的盈利能力提高了近 2.25 倍。 这是由于所有金融产品都使用固定手数从而实现的。 从上表可以看出,所交易品种的最大回撤有所不同。 因此,我们可以给最大回撤较小的金融产品增加一些持仓量。 这种方式可以进一步增加利润。
即使在上述设定下,赚取 100% 的年利润足够了,多元化也可以帮助我们将交易量降低 2.25 倍,从而降低风险。
股市交易策略
有办法交易股票市场的金融产品吗? 早些时候,由于杠杆率太小,我们决定不进行股票交易。 然而,我们尝试根据股票市场调整策略。
修改手数递增方法。 第一个修改如下:网格手数几何增加原理由算术公式代替。 这可以在 EA 设置中的 Chain increase 参数来完成。
这有什么效用? 我们来研究一个网格示例,它有 10 笔开仓。 初试网格手数为 0.01:
- 几何递增: 0.01 + 0.01 + 0.02 + 0.04 + 0.08 + 0.16 + 0.32 + 0.64 + 1.28 + 2.56 = 5.44 总手数
- 旧的算术值: 0.01 + 0.01 + 0.02 + 0.03 + 0.05 + 0.08 + 0.13 + 0.21 + 0.34 + 0.55 = 1.45 总手数
- 新的算术值: 0.01 + 0.02 + 0.03 + 0.04 + 0.05 + 0.06 + 0.07 + 0.08 + 0.09 + 0.1 = 0.55 总手数。
如您所见,几何递增的总手数比其他类型高得多。
"旧的算术值" 指传统的算术级数。 它用在以前的 EA 版本中,在以前的文章中附带了该版本。
在此 EA 版本中使用了 "新的算术值" 选项,它实际上是在计算下一笔开仓的交易量时累加初始手数。 它与原始的算术级数无关。
入场方向。 如果您打开股票交易市场主要金融产品的月线图表,那么您用肉眼都可看出 99% 的金融产品图表都在上涨。 因此,无需试验入场方向。 趋势是您最好的朋友! 在股市中,这个朋友几乎总是朝着多头方向前进。
我们所有的网格也将在“多头”方向上开立。 没有任何条件。 如果没有品种的持仓,则会以初始手数开立多头持仓。
如果您的经纪商支付股票股息,那么只开立多头持仓会有额外的股息形式的收入。 这意味着您不会因做空而错失股息。
测试周期。 您可能会注意到,行情并不是 100% 的单边上涨。 其中一个例子是 2008 年。
很难说如果股价下跌 40% 或更多,该策略将如何反应。 不幸的是,我的经纪商没有提供 2008 年的历史数据。 但是最近 4 年的事件是,股票并不仅在上涨。 还有价格调整。 现在,我们将看到在调整的情况下网格如何生存。 我们的测试期限为 2015.10.01 至 2019.10.01。
除余额图外,还将进一步提供 4 年期的品种价格图表。 该图表展示了我们基于网格的系统可以承受的回撤。
部分平仓。 今后,我们还将用到本系列之前文章中未提及的功能。 这些包括用最近持仓的利润来冲抵网格中最久远的亏损持仓,将其平仓。
例如,价格走向与我们的网格相悖。 网格已有 5 笔持仓。 首笔持仓交易量为 0.01 手,已亏损 $1。 最后一笔开仓的交易量为 0.05 手。 然后,品种价格开始朝有利方向移动。
由于最近的持仓交易量比网格中的第一笔交易量大得多,因此其利润可以迅速超过 1 美元。 如此,我们可以将其获利了结,并用其冲抵第一笔持仓的亏损。
两笔平仓的结果,我们仍可赚得一些利润。 期望的利润金额可在 EA 设置中指定。
部分平仓有什么益处?
- 如果这并非全局性价格反转,而只是很小的调整,那么我们将一些网格平仓并从中赚得利润。 这意味着我们可甩掉最差价格持仓的拖累,并将网格移近当前价格。 如果价格再次开始朝不利方向移动,则回撤将减少,因为一些持仓已被平仓。
- 在横盘走势当中,我们可以择机平仓更多。 当价格来回波动时,我们将在横盘走势的低位开立交易量较大的新持仓,并在横盘走势的高位将其与开仓最久的持仓一并了结,从而减少我们网格的总体交易量。 在较长的横盘期间,即使价格最终不会上涨,我们也可以逐步将整个网格平仓。
- 如果是全局性反转,则网格的平仓时间要比不使用部分平仓时迟得多。 但价格持续下跌当中全局性价格反转不像调整或横盘波动那样普遍。 即便在这种情况下,部分平仓也是有益的,因为最终会将网格清空。
股市测试结果
我们已经概述了交易策略规则。 现在该是针对股市金融产品进行测试和优化的时候了。
该策略将按照以下方式进行优化:
- 网格间距: 35 - 250 个点
- 部分平仓利润: 2 - 9 美元
- 边界持仓冲抵的利润大小:0.5 - 2 美元。
该策略已在 41 种金融产品上进行了测试。 本文仅考虑其中 9 种表现出较佳盈利结果的产品。
在所有 41 种经过测试的金融产品中,只有 1 种试遍所有优化选项依旧亏损。 那些关注股市变化的人能够猜出该金融产品。 它就是通用电气:很长时间以来该股的价格一直在稳步下跌。
在过去的四年之中,所有其他品种均展现出正利润。 甚至,大多数测试产品在任何 EA 设置下均展现出正利润。 换言之,没有任何设置组合会导致亏损。
败兴的事则是,即使是最佳品种,也几乎无法展现出当最大回撤 100%时,每年有 150% 的利润。 因此,如果我们减少手数来保证 20% 的回撤,那么年利润将仅为 30%。
以下是表现最佳的金融产品:
品种 |
回报率 4 年期 / 平均 1 年期 |
最大 回撤, $ |
交易数 |
---|---|---|---|
VZ |
5.24 / 1.3 |
50 |
306 |
MCD |
5.39 / 1.3 |
176 |
522 |
JPM |
6.41 / 1.6 |
156 |
774 |
KO |
7.18 / 1.8 |
27 |
197 |
MSFT |
11.2 / 2.8 |
67 |
429 |
NKE | 6.37 / 1.6 |
116 | 384 |
ORCL |
5.52 / 1.3 |
106 | 367 |
CSCO | 5.48 / 1.3 |
43 | 139 |
EBAY | 5.15 / 1.3 |
102 | 677 |
如您所见,四年期的平均交易次数从 130 到 780 不等,甚至若干内的交易量少于 1。 其他品种的结果相似。 交易越多,总利润就越低。
这种状况经常发生:EA 开仓的频率越低,获得的结果就越好。
但这仅是我个人的观点。 因此,我们来查看以上产品的余额图和价格走势。
VZ:
MCD:
JPM:
KO:
MSFT:
NKE:
ORCL:
CSCO:
EBAY:
预先进行了初步测试,而在文章发表的前一刻才进行截图。 这就是为什么您会注意到最近更新的策略测试器拒绝在 2018 年 5 月之后对 MSFT 和 CSCO 执行测试的原因。 在较早的测试中,已成功执行。
然而,这并不重要。 我们来看一下 EBAY,KO,MCD 和 VZ 的价格图表。 它们有实质性的价格调整。 但这不会影响余额图。
当然,如果回撤进一步加深,则资金可能会受到影响。 这就是为何不建议时不时地提取利润。 还希望您在一个账户上只交易一种产品。 在这种情况下,即使其中一家公司的股票大幅下跌,或在其破产的情况下,其他产品也不会受到影响。 即使资金亏空殆尽,其他产品的利润也可以弥补它。
多元化的无限网格
我们回到本文的主要目的。 首先,我们正在测试多元化的可能性。
在本文的第一部分中,我们测试了网格中间距数量较少时多元化的影响。 在这种情况下,我们未经历深度和长期的净值回撤,因为回撤会很快由止损了结。 在这种情况下,品种之间的影响要小于保持回撤的影响。 但这种交易策略的思路是利用无限间距的网格承受可能的亏损。
多元化则有机会同时操作 9 种产品进行测试。 这些要用到的产品会加以优化。 一些产品可能具有很强的相关性。 在这种情况下,我们可以通过排除此类产品来提高总体回报率。
测试表明,某些产品值得排除。 但 9 个中只有 2 个品种:ORCL 和 CSCO。 交易 9 个品种和 7 个品种之间的差异不是很大,约为回报率的 0.5。 尽管如此,还是有区别的。 通过排除这些品种可获得以下结果:
品种 |
回报率 4 年期 / 平均 1 年期 |
最大 回撤, $ |
交易数 |
---|---|---|---|
VZ, MCD, JPM, KO, MSFT, NKE, EBAY |
10.92 / 2.73 |
368 |
3 055 |
这个结果出乎我的意料。 我认为股票的方式运行更同步。 即,如果其中任何一家经历了回撤,那么其他许多公司也会回撤。 请记住,2018 年 12 月几乎所有股票都经历了暴跌。 因此,亏损可能会重叠,并降低回报率。 但实际上,总体回报率与最佳测试品种 MSFT 几乎相同。 这种情况下的风险低于交易一个品种时的风险。
多元化 — 迷信亦或可靠
多元化是迷信还是可靠? 据说多元化是优秀的。 但没人能提供任何证据。 通过运行我们自己的实验,我们可以看到多元化对于余额是有用的。
不过,应该理解,这是一种特殊情况。 这意味着您不应该无所顾忌地使用多元化。 理想的解决方案是针对您期望交易的品种进行多元化回测。 但是,不幸的是,这并不一定总能做到。
在任何情况下,针对不同产品用小交易量开立若干笔交易,总比针对一种产品开立大交易量交易要好得多。
结束语
我们已经完结了有关网格智能交易系统的系列文章。 在本文中,我们测试了不同类型的网格 EA。 我们已经测试了一串链条中的少量仓位,一个平均数和无限链条,它们仅受资金规模的限制。 每个变体都有其优势。 例如,小链条更适合多元化。 大量的间距即使在非常不利的走势下也可以获利。
当然,我们并未考虑改善 EA 性能的所有可能选择。
例如,我们可以测试持仓在达到一定数量时增加 EA 交易时间的选项。
尾随可能也会影响 EA 交易。
开立首笔仓位的附加条件也可改进。 尽管我们使用了 RSI,但还有许多其他选择。
如您所见,更多的思路可以实现。 我希望本系列中的资料和思路能令您感到有用和有趣。
本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/7219
![基于 Merill(梅里尔) 形态的策略构建器](https://c.mql5.com/2/37/Article_Logo.png)
![继续迈进优化(第一部分):操控优化报告](https://c.mql5.com/2/37/MQL5-avatar-continuous_optimization.png)
![轻松快捷开发 MetaTrader 程序的函数库(第 二十二部分):交易类 - 基准类,限制验证](https://c.mql5.com/2/37/MQL5-avatar-doeasy__4.png)
有人能提供 setting set ? 我跑這個EA 都無發開啟正常的交易... 真的想試試看這個
謝謝
有人能提供 setting set ? 我跑這個EA 都無發開啟正常的交易... 真的想試試看這個
謝謝
感觉无法设置参数,总显示 timer not set 哪位大神能提供帮助
gsc:
代码里没有开单程序,只有平单程序,大量重复的参数和程序,毫无用处的错误判断和创建物件,这是我见过的最垃圾的
能不能帮忙写个ea谢谢
能不能帮忙写个ea谢谢
就一个功能,开仓后设置多少秒自动平仓,用在所有持仓单和挂单