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

Evgeniy Trofimov | 8 四月, 2016

简介

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

一般来说,很多交易系统(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