简介
亲爱的开发者和交易 分析者,大家好!
一般来说,很多交易系统(TS)在特定期间内表现稳定,但之后余额曲线就开始下降了。 交易者对它感到失望,并开始研究新的“圣杯”以及优化参数等。
我为大家带来了一个执行虚拟交易的工具 - VirtualTrend.mqh。 使用我所说的函数,你可以打开、关闭和跟踪虚拟交易。
它具有以下有用的功能:
- 创建自适应 Expert Advisor 后,可以根据前面交易的结果启用和禁用虚拟交易。
- 根据交易系统的获利能力,以百分比的形式评价多个交易系统(本例中为 5 个交易系统)。 竞争的结果用来决定哪个交易系统最适合在真实市场进行交易。
- 使用一个工具的多个未平仓交易,在 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 的原因。
图 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 - 评价的平均周期(历史交易的数量)