在一个 Expert Advisor 内的多个 Expert Advisor 的竞争

8 四月 2016, 13:23
Evgeniy Trofimov
1
2 021

简介

亲爱的开发者和交易 分析者,大家好

一般来说,很多交易系统(TS)在特定期间内表现稳定,但之后余额曲线就开始下降了。 交易者对它感到失望,并开始研究新的“圣杯”以及优化参数等。

我为大家带来了一个执行虚拟交易的工具 - VirtualTrend.mqh。 使用我所说的函数,你可以打开、关闭和跟踪虚拟交易。

它具有以下有用的功能:

  1. 创建自适应 Expert Advisor 后,可以根据前面交易的结果启用和禁用虚拟交易。
  2. 根据交易系统的获利能力,以百分比的形式评价多个交易系统(本例中为 5 个交易系统)。 竞争的结果用来决定哪个交易系统最适合在真实市场进行交易。
  3. 使用一个工具的多个未平仓交易,在 MetaTrader 5 平台上实现交易策略的可能性,平台上使用了累积的头寸(本文未讨论该功能,但建议作为变体使用)。

我们来看一下前两个功能。

以 Competition_v1.0.mq4 代码作为自适应 Expert Advisor 的示例;基于竞争的结果,确定要使用的交易系统。 该 Expert Advisor 使用了 5 个交易系统(你可以根据需要添加)。它们并非随机选择,而是根据在 EURUSD 日周期上运行的稳定程度。.

重要须知! 你只应该使用稳定的交易系统,即在某个期间内一直获利或亏损。

例如,一个交易结果序列 “PPPPPPPLLLLLLLLPPLPPPPPPPP”的系统,符合该 Expert Advisor 要求的条件;但如果是“LLPPLPLLPPPLLPLPPLPLPLLLPPLPL”,则不符合条件(其中“L”代表亏损交易,“P”代表获利交易)。

A 如果一个交易系统的亏损交易比获利交易更加频繁,即使获利交易填补了亏损交易的损失,也不能使用。因为这个 Expert Advisor 没有能够适应获利性。

交易系统的稳定性根据策略测试程序内最大周期(所有历史数据)上进行的测试结果“目视”确定。 得到的余额变化图表可以确定导致趋势变化的交易的平均加权数。 例如,某个交易系统进行了以下序列的交易: PPPPPPPPLLLLLLPPPPPPPPPLPLLLLLLLLLLLPPPPPPPLLLLLLLLLLLLLPPPPPPLLLLLLLLLLPLPPPLLPPPPPP. 余额趋势在 6-8 次交易后出现变化。 当计算评定结果时,建议将余额的平均周期设置为那些交易的一半。 也就是 3 或 4。

通过 RatingON 参数,可以启用和禁用评价系统,从而帮助 Expert Advisor 适应获利的动态变化。 利用它,你可以轻松找到余额的平均周期,并设置到 Tх.PeriodRating 参数。

你可以使用 Tх.Enabled 参数,随意启用或禁用每个交易系统,其中 x 是交易系统的数量。

下面给出的所有的交易系统测试都是 1999 年 1 月 1 日到 2006 年 6 月 1 日期间在 EURUSD (D(时间周期为 1 天)。

1 号交易系统

  • 进入市场的条件:快速移动平均线交叉慢速移动平均线(请参阅 T1_SignalOpen() 函数)。
  • 退出市场的条件:跟以上相反的交叉(请参阅 T1_SignalClose() 函数)。


图 1 1 号交易系统在禁用适应下的测试(RatingON = )

从测试结果可以得出结论:每过 18-20 次交易该策略就会改变其获利动态。

这就是将 T1.PeriodRating 参数设置为 20 的原因。

1 号交易系统在启用适应下的测试(RatingON = 真)

图 2 1 号交易系统在启用适应下的测试(RatingON = )

2 号交易系统

  • 进入市场的条件: CCI 从上向下交叉某个水平(请参阅 T2_SignalOpen() 函数)。
  • 退出市场的条件:当相反的方向出现信号时(请参阅 T2_SignalClose () 函数)。

在相同周期的测试过程中,我们发现稳定性等于 10 此交易。


图 3 2 号交易系统在禁用适应下的测试


  4. 2 号交易系统在启用适应下的测试

3 号交易系统

进入和退出市场的逻辑跟 1 号交易系统一样,但是移动平均线的平均周期不同。

说一点离题的话: 你可以重新编写整个 Competition_v1.0.mq4 并从只包含不同周期的移动平均线的策略组合得出。

我还没有进行这项有趣的研究,但如果我做了,将会通知你们。


图 5 3 号交易系统在禁用适应下的测试

该交易系统在长时间内(接近 11 年)只进行了几次交易。 我不建议在真实交易中使用这种策略,因为策略测试程序中的交易数量过少。

添加该策略的目的是为了更加清晰的显示我对适应性的开发。 对于该策略,将 T3.PeriodRating 参数设置为 2。


图 6 3 号交易系统在启用适应下的测试

4 号交易系统

我在文献中已经多次看到这种策略。

即使没有适应,它也很有吸引力。但使用它进行交易并不需要自动交易,因为它是一个长期的交易系统。

  • 它在三条移动平均线以既定顺序排列并且 MACD 高于规定的水平时进入市场 - T4.LimitMACD(请参阅 T4_SignalOpen() 函数)。
  • 如果价格交叉第二条移动平均线则退出市场(请参阅 T4_SignalClose() 函数)。


图 7 4 号交易系统在禁用适应下的测试

该交易策略具有很高的稳定性,所以处理用于评价计算的数据的周期不应小于 20 次交易。 我设置 T4.PeriodRating 等于 20。


图 8 4 号交易系统在启用适应下的测试

5 号交易系统

该交易系统由我开发,我希望以这种复杂的方式跟你们分享。

  • 如果 CCI 指标从下向上交叉 T5.LevelCCI,我们就买入(请参阅 T5_SignalOpen() 函数)。. 将平仓水平 MyLevel 设置为低于开仓水平 T5.LevelCCI,差值为 T5.TralingCCI 指标的点数。 观察 CCI 指标并以特定的步长提高平仓水平 MyLevel,同时保持 CCI 指标和 MyLevel 水平的当前值之差不大于 T5.TralingCCI 值的两倍。
  • 如果 CCI 从上向下交叉 MyLevel 水平则建立买入头寸(请参阅 T5_SignalClose() 函数)。


图 9 5 号交易系统在禁用适应下的测试

该图表可以不用禁用适应,但我们还是设置 T5.PeriodRating=10。


图 10 5 号交易系统在启用适应下的测试

多系统的 Expert Advisor

上面展示了启用适应和禁用适应下 5 个 Expert Advisor 的运行。

现在我们来考虑这些 Expert Advisor 协作的示例:

交易品种:

EURUSD (欧元 vs 美元)

时段

1999.05.24 00:00 - 2010.07.05 00:00 (1999.01.01 - 2010.07.05)

模型

控制点(非常粗略的方法,一定不能考虑其结果)

参数

RatingON=false; FastTest=true; file="virtual.csv"; MinRating=50; _tmp1_="---- Trading system 1 ----"; T1.Enabled=1; T1.Magic=101; T1.lot=0.1; T1.Fast=10; T1.Slow=100; T1.TS=7000; T1.PeriodRating=20; _tmp2_="---- Trading system 2 ----"; T2.Enabled=1; T2.Magic=102; T2.lot=0.1; T2.PeriodCCI=30; T2.LevelCCI=200; T2.SL=500; T2.PeriodRating=10; _tmp3_="---- Trading system 3 ----"; T3.Enabled=1; T3.Magic=103; T3.lot=0.1; T3.Fast=30; T3.Slow=200; T3.TS=5000; T3.PeriodRating=2; _tmp4_="---- Trading system 4 ----"; T4.Enabled=1; T4.Magic=104; T4.lot=0.1; T4.SL=5000; T4.TS=5000; T4.LimitMACD=0.002; T4.PeriodRating=60; _tmp5_="---- Trading system 5 ----"; T5.Enabled=1; T5.Magic=105; T5.lot=0.1; T5.PeriodCCI=90; T5.LevelCCI=100; T5.TralingCCI=100; T5.SL=5000; T5.TS1=5000; T5.PeriodRating=10;






测试的柱数

2994

建模的价格变动

219840

建模质量

不可用

初始保证金

500000.00





总净利润

617173.70

毛利润

1342671.82

毛亏损

-725498.13

获利系数

1.85

预计获利

2373.74



绝对亏损

76798.13

最大亏损

172676.05 (28.98%)

相对亏损

28.98% (172676.05)


总交易次数

260

空头仓位(获利 %)

126 (29.37%)

多头仓位(获利 %)

134 (33.58%)


盈利交易(总交易次数的百分比)

82 (31.54%)

亏损交易(总交易次数的百分比)

178 (68.46%)

最大

获利交易

78151.67

亏损交易

-18831.39

平均

获利交易

16374.05

亏损交易

-4075.83

最大

连续获利交易次数(盈利金额)

6 (89681.19)

连续亏损交易次数(亏损金额)

21 (-100325.23)

最大

连续收益(盈利次数)

95057.65 (3)

连续亏损(亏损次数)

-100325.23 (21)

平均

连续盈利

2

连续亏损

4



图 11 多系统的 Expert Advisor 在禁用适应下的测试

将交易系统组合的结果是利润、亏损和交易次数的增加。

现在我们看一下启用 RatingON 参数的同一个测试。

时段

1999.05.24 00:00 - 2010.07.05 00:00 (1999.01.01 - 2010.07.05)

模型

控制点(非常粗略的方法,一定不能考虑其结果)

参数

RatingON=true; FastTest=true; file="virtual.csv"; MinRating=1; _tmp1_="---- Trading system 1 ----"; T1.Enabled=1; T1.Magic=101; T1.lot=0.1; T1.Fast=10; T1.Slow=100; T1.TS=7000; T1.PeriodRating=20; _tmp2_="---- Trading system 2 ----"; T2.Enabled=1; T2.Magic=102; T2.lot=0.1; T2.PeriodCCI=30; T2.LevelCCI=200; T2.SL=500; T2.PeriodRating=10; _tmp3_="---- Trading system 3 ----"; T3.Enabled=1; T3.Magic=103; T3.lot=0.1; T3.Fast=30; T3.Slow=200; T3.TS=5000; T3.PeriodRating=2; _tmp4_="---- Trading system 4 ----"; T4.Enabled=1; T4.Magic=104; T4.lot=0.1; T4.SL=5000; T4.TS=5000; T4.LimitMACD=0.002; T4.PeriodRating=60; _tmp5_="---- Trading system 5 ----"; T5.Enabled=1; T5.Magic=105; T5.lot=0.1; T5.PeriodCCI=90; T5.LevelCCI=100; T5.TralingCCI=100; T5.SL=5000; T5.TS1=5000; T5.PeriodRating=10;






测试的柱数

2994

建模的价格变动

219840

建模质量

不可用

初始保证金

500000.00





总净利润

227123.75

毛利润

388438.79

毛亏损

-161315.05

获利系数

2.41

预计获利

2341.48



绝对亏损

10921.17

最大亏损

76482.03 (12.48%)

相对亏损

12.48% (76482.03)


总交易次数

97

空头仓位(获利 %)

50 (40.00%)

多头仓位(获利 %)

47 (46.81%)


盈利交易(总交易次数的百分比)

42 (43.30%)

亏损交易(总交易次数的百分比)

55 (56.70%)

最大

获利交易

71192.28

亏损交易

-12680.47

平均

获利交易

9248.54

亏损交易

-2933.00

最大

连续获利交易次数(盈利金额)

5 (80463.85)

连续亏损交易次数(亏损金额)

13 (-50753.48)

最大

连续收益(盈利次数)

80463.85 (5)

连续亏损(亏损次数)

-50753.48 (13)

平均

连续盈利

2

连续亏损

3


. 多系统的 Expert Advisor 在启用适应下的测试

余额线变得平坦,严重亏损的数量下降,利润下降了 2.71 倍,亏损下降了 2.32 倍,交易次数下降了 2.68 倍, 获利系数增加了 1.3 倍。

图 12中,跟之前的测试不同,出现了交易量的图表。 它的出现是活动评价系统的结果。

它是通过以下方式得出的 - 首先,对所有平仓的虚拟交易的利润 Tх.PeriodRating 求和,然后除以执行那些交易的天数。 得到的值再加上 所有未平仓头寸的累积利润,然后除以它们的活动天数。

如果得到的值为负,则将其设置为零。 在每一个交易系统上执行该操作。

评价系统使用 Tх.Magic 初始参数中分配给活动交易策略的幻数来区别交易系统。 它按照利润的最大值搜索最获利的交易系统,并评价该系统为 100%。

其他所有交易系统都参照领先的交易系统分配一个相对评价。 最后,产生一个具有三列的表格。

示例:

幻数
利润
评价,%
1
9
40.9
2
0
0.0
3
3
13.6
4
10
45.5
5
0
0.0
6
17
77.3
7
0
0
8
12
54.5
9
0
0.0
10
22
100.0

在真实交易中,获得的评价值乘以净额 Tх.lot 然后除以 100。 这样,所有评价大于零的交易系统都可以用于真实交易。

如果仅使领先的交易系统用于真实交易,在 Competition_v1.0 Exper Advisor 中设置 MinRating 参数等于 100。

总结

所给出的方法并不能 100% 保证获利,但是,我可以保证余额曲线的平滑。 也就是说 - 保证了利润、亏损和执行的交易次数的下降! 而获利系数的增加 - 很可能。

至于它是好是坏,你自己决定。

Competition_v1.0.mq4 Expert Advisor 的参数描述:

  • RatingOn 评价的开关(如果禁用,则文件中的交易必须符合真实交易)
  • FastTest – 测试过程中 ,在虚拟交易的数组改变时不改变
  • file - 虚拟交易的文件(在 TerminalPath()+"\experts\files" 文件夹中)
  • MinRating – 建立真实头寸所需的最低评价(以百分比表示)
  • Tх.Enabled – 交易系统开关
  • Tх.Magic – 幻数
  • Tх.lot – 当评价为 100% 时用于交易的最大交易量
  • Tх.Fast – 快速移动平均线周期
  • Tх.Slow – 慢速移动平均线周期
  • Tх.SL – 以点数表示的止损
  • Tх.TS1 – 以点数表示的一次性跟踪止损(将止损移动至保本水平)
  • Tх.TS – 以点数表示的跟踪止损
  • Tх.PeriodRating - 评价的平均周期(历史交易的数量)
相似话题的链接: http://forum.mql4.com/ru/23455

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
原文地址: https://www.mql5.com/ru/articles/1578

附加的文件 |
RealTrend.mqh (8.17 KB)
VirtualTrend.mqh (36.03 KB)
最近评论 | 前往讨论 (1)
Zhiqiang Zhu
Zhiqiang Zhu | 13 6月 2018 在 13:11
MetaQuotes Software Corp.:

新文章 在一个 Expert Advisor 内的多个 Expert Advisor 的竞争已发布:

作者:Evgeniy Trofimov

首先感谢你的文章,我认真拜读,也认真下载了,并且运行了您的文件。在相同的货币对,以日为交易周期,时间跨度2000-2018年的执行结果看,

选择不适应交易模式反而比适应的要好。而且又执行了其他几个货币对,发现竞争的模式效果没有特别突出。非常遗憾,这个工具不能用在我自己的

交易模式里了。也只能当学习学习了。

通过"单元测试"的帮助来提高代码质量 通过"单元测试"的帮助来提高代码质量

就算是简单程序也会经常出现看似难以置信的错误。 “我怎么会编出这种东西?”是我们发现这种错误时的第一反应。 “我应该如何避免它?”则是较少会映入脑海的第二个问题。 编写完美无缺的代码是不可能的,特别是在大型项目里,但可通过技术手段及时检测出这些错误。 本文介绍如何借助通用的“单元测试”方法来提高 MQL4 代码质量。

创建手动交易策略的模糊逻辑 创建手动交易策略的模糊逻辑

本文提出使用模糊理论来改善手动交易策略的方法。作为例子,我们给出了如何一步步构建策略和选则参数,然后将模糊逻辑应用与进入市场的标准选择上。这样,在修改策略后,我们获得了能对市场情况做出合理反应的弹性开仓条件。

过滤的魔力 过滤的魔力

大部分自动化交易系统开发员会使用某种形式的交易信号过滤。 在本文中,我们将探索带通滤波和 Expert Advisor 离散滤波器的创造和实施,以提高自动交易系统的特性。

烛台方向统计再现的研究 烛台方向统计再现的研究

是否能够基于烛台方向的再现趋势,在一天内的特定时间预测市场在即将到来的一小段时间内的市场行为? 即,是否可以在第一时间找出此类事件。 每个交易者可能都想过这个问题。 本文的目的是尝试基于烛台在特定时间间隔内的统计再现来预测市场行为。