神经网络实验(第 3 部分):实际应用
概述
在系列的前几篇文章中,重访几何,和智能神经网络优化,我分享了我对神经网络的观察和实验。此外,我还对生成的 EA 进行了优化,并提供了一些有关它们操作的解释。 尽管如此,我几乎没有触及所获得结果的实际应用的主题。 在本文中,我将修复这个不幸的遗漏。
我将展示所获得结果的实际应用,并重点介绍一种允许我们扩展 EA 功能的新算法。 与往常一样,我只会用到 MetaTrader 5 工具,而不使用任何第三方软件。 本文很可能类似于分步指导。我将尝试以最易于访问和最简单的方式解释所有内容。
1. 应用思路
在优化前两个系统时,我收获了一些结果,其中包含盈利因子、或复杂准则的最佳值,以及感知器和神经网络的一组权重。 对获得的结果的测试展现出相当的可容忍值。 如此改进的主要思路是将所有优化结果组合到一个 EA 当中,并令它们同时工作。 正如您可能想象的那样,保持 10 个图表并运行 10 个 EA 不是很方便。 此外,这将令我们能够以扩展(全面)的方式查看结果,例如同时使用 10-20 个参数。
2. 货币对。 优化和前瞻测试范围。 设置
以下是所有优化和测试参数:- 外汇;
- EURUSD;
- H1;
- 指标: 2 个 TEMA 指标,周期分别为 1 和 24。 我忍痛放弃 MA,因为 TEMA 指标在多次测试中都摆明效果更好。
- 止损和止盈相应改为 600 和 60;
- “仅开盘价”和“最复杂准则”优化和测试模式。 与“最大盈利”相比,“最大复杂准则”模式显示出更稳定和可盈利结果;
- 优化范围 3 年。 2018.12.09 - 2021.12.09。 3 年并非是一个可靠的准则。 您可以自行试验此参数;
- 前向验证测试范围为 1 年。 2021.12.09 - 2022.12.09;
- 在所有前向验证测试中,同时用到了 20 个优化结果;
- EA 优化采用“快速(基于遗传算法)”感知器;
- EA 优化采用 DeepNeuralNetwork.mqh “慢速完整算法” 函数库;
- 初始本金 10,000;
- 杠杆 1:500。
3. 基于感知器的 EA
根据大量观察,事实证明,带有感知器的 EA 不需要 200 的权重深度。 20 足矣。 因此,感知器代码本身和优化参数发生了变化。 现在我们自 0 增量为 1 直到 20 优化权重。
还引入了 “Param” 参数,该参数负责向感知器的正侧或负侧回撤的深度。 此参数会影响交易数量及其准确性。 交易数量减少了,而准确性却提高了。
每个系统用到 2 个 EA。 第一个用于优化,而第二个直接用于操作。 我决定通过订单注释来安置订单划分,因为我相信这是最简单、最方便的方式。 唯一的订单索引是样品本身中的序列号。 该样本是包含所获得的优化结果的存档。 MaxSeries 参数用于限制同时操作的数量。
for(int i=0; i<=(ArraySize(EURUSD)/6)-1; i++){ comm=IntegerToString(i); x1=(int)StringToInteger(EURUSD[i][0]); x2=(int)StringToInteger(EURUSD[i][1]); x3=(int)StringToInteger(EURUSD[i][2]); x4=(int)StringToInteger(EURUSD[i][3]); Param=(int)StringToInteger(EURUSD[i][4]); //SELL++++++++++++++++++++++++++++++++++++++++++++++++ if (CalculateSeries(Magic)<MaxSeries && (perceptron1()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment+" En_"+comm)==0) && (ind_In1[1]>ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, TakeProfit, StopLoss, EAComment+" En_"+comm); } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if (CalculateSeries(Magic)<MaxSeries && (perceptron1()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment+" En_"+comm)==0) && (ind_In1[1]<ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, TakeProfit, StopLoss, EAComment+" En_"+comm); } }
新的感知器代码:
1 个感知器 4 角度 SL TP 和 1 个感知器 4 角度
double perceptron1() { double w1 = x1 - 10.0; double w2 = x2 - 10.0; double w3 = x3 - 10.0; double w4 = x4 - 10.0; double a1 = (((ind_In1[1]-ind_In1[6])/Point())/6); double a2 = (((ind_In1[1]-ind_In1[11])/Point())/11); double a3 = (((ind_In2[1]-ind_In2[6])/Point())/6); double a4 = (((ind_In2[1]-ind_In2[11])/Point())/11); return (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4); }
1 个感知器 8 角度 SL TP 和 1 个感知器 8 角度
double perceptron1() { double w1 = x1 - 10.0; double w2 = x2 - 10.0; double w3 = x3 - 10.0; double w4 = x4 - 10.0; double v1 = y1 - 10.0; double v2 = y2 - 10.0; double v3 = y3 - 10.0; double v4 = y4 - 10.0; double a1 = (((ind_In1[1]-ind_In1[6])/Point())/6); double a2 = (((ind_In1[1]-ind_In1[11])/Point())/11); double a3 = (((ind_In2[1]-ind_In2[6])/Point())/6); double a4 = (((ind_In2[1]-ind_In2[11])/Point())/11); double b1 = (((ind_In1[1]-ind_In1[11])/Point())/11); double b2 = (((ind_In2[1]-ind_In1[11])/Point())/11); double b3 = (((ind_In1[1]-ind_In2[11])/Point())/11); double b4 = (((ind_In2[1]-ind_In2[11])/Point())/11); return (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4 + v1 * b1 + v2 * b2 + v3 * b3 + v4 * b4); }
2 个感知器 а 4 角度 SL TP 和 2 个感知器а 4 角度
double perceptron1() { double w1 = x1 - 10.0; double w2 = x2 - 10.0; double w3 = x3 - 10.0; double w4 = x4 - 10.0; double a1 = (((ind_In1[1]-ind_In1[6])/Point())/6); double a2 = (((ind_In1[1]-ind_In1[11])/Point())/11); double a3 = (((ind_In2[1]-ind_In2[6])/Point())/6); double a4 = (((ind_In2[1]-ind_In2[11])/Point())/11); return (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4); } double perceptron2() { double v1 = y1 - 10.0; double v2 = y2 - 10.0; double v3 = y3 - 10.0; double v4 = y4 - 10.0; double b1 = (((ind_In1[1]-ind_In1[11])/Point())/11); double b2 = (((ind_In2[1]-ind_In1[11])/Point())/11); double b3 = (((ind_In1[1]-ind_In2[11])/Point())/11); double b4 = (((ind_In2[1]-ind_In2[11])/Point())/11); return (v1 * b1 + v2 * b2 + v3 * b3 + v4 * b4); }
入场激活码:
1 个感知器 4 角度 SL TP 和 1 个感知器 4 角度
//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)==0) && (ind_In1[1]>ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, TakeProfit, StopLoss, EAComment); } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)==0) && (ind_In1[1]<ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, TakeProfit, StopLoss, EAComment); }
1 个感知器 8 角度 SL TP 和 1 个感知器 8 角度
//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)==0) && (ind_In1[1]>ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, TakeProfit, StopLoss, EAComment); } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)==0) && (ind_In1[1]<ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, TakeProfit, StopLoss, EAComment); }
2 个感知器 а 4 角度 SL TP 和 2 个感知器а 4 角度
//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()<-Param) && (perceptron2()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)==0) && (ind_In1[1]>ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, TakeProfit, StopLoss, EAComment); } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()>Param) && (perceptron2()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)==0) && (ind_In1[1]<ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, TakeProfit, StopLoss, EAComment); }
优化设置:
1 个感知器 4 角度 SL TP 和 1 个感知器 4 角度
1 个感知器 8 角度 SL TP 和 1 个感知器 8 角度
2 个感知器 а 4 角度 SL TP 和 2 个感知器а 4 角度
3.1 EA 1 个感知器 4 角度 SL TP
此 EA 修改依据止损和止盈离场。 策略 1 感知器和 4 个 TEMA 指标的倾角。 执行优化 10 次。 倾角的结构和优化原理可以在第一篇文章中找到。 在这里重复它们是没有意义的。
优化结果:
复杂准则的大量结果 99.99。 盈利因子处于 4-8 的高水平。
接下来,将得到的结果导出到 Excel。 保留前 100 个最佳结果,并删除其它所有结果。 删除 х1、х2、х3、х4 和 Param 之外的所有列。 文件保存为 CSV (以逗号作为分隔符)。为了清楚起见,我将文件命名为 EURUSD 。 我们可在 EA 代码当中将此格式作为文本数组加载。 它应该如下图所示。
通过 MetaEditor 菜单将文件插入到代码中。
获取带有优化结果的现成文本数组。
string EURUSD[][6]= { {"19","1","3","6","1100"}, {"20","1","4","6","1000"}, {"20","0","4","4","1200"}, {"19","0","6","4","1100"}, {"19","1","5","4","1100"}, {"17","0","7","4","1100"}, {"19","1","3","8","1000"}, {"20","0","4","3","1300"}, {"17","0","7","0","1400"} };
编译并执行前向验证测试。
结果不错。 我们可以稳步上升贯穿全年。
3.2 EA 1 感知器 4 角度
此 EA 修改版未用 止损和止盈。平仓由感知器回调执行。
//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()<-Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)==0) && (ind_In1[1]>ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenSell(symbolS1.Name(), LotsXSell, 0, 0, EAComment); } if ((perceptron1()>0) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment)>0)){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL); } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((perceptron1()>Param) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)==0) && (ind_In1[1]<ind_In2[1]) && (SpreadS1<=MaxSpread)){ OpenBuy(symbolS1.Name(), LotsXBuy, 0, 0, EAComment); } if ((perceptron1()<0) && (CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment)>0)){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY); }
优化结果:
复杂准则的结果略低于前一种情况。 盈利因子处于 2-2.5 的水平。
前向验证测试结果:
余额曲线重复了上一次结果,但回撤更深。
3.3 EA 1 个感知器 8 角度 SL TP
此 EA 修改依据止损和止盈离场。 策略 1 感知器和 8 个 TEMA 指标的倾角。
对于此 EA,我们需要准备一个 Excel 文件,如下所示。 在此,我们优化 х1, х2, х3, х4, y1, y2, y3, y4 和 Param 参数。
优化结果:
复杂准则结果很高。 盈利因子处于 2.5-3 的水平。
前向验证测试结果:
余额曲线不是很稳定。 回撤也相当大。 不过,结果是正面的。
3.4 EA 1 感知器 8 角度
未用止损和止盈 。 由感知器的逆向信号执行平仓。策略 1 感知器和 8 个 TEMA 指标的倾角。
优化结果:
复杂准则结果很高。 盈利因子处于 2.5-3 的水平。
前向验证测试结果:
余额曲线很稳定。 账面大幅增加贯穿全年。 回撤也不深。
3.5 EA 2 个感知器 8 角度 SL TP
未用止损和止盈。 策略 2 感知器,第一个有 4 个倾角,第二个有 4 个倾角,这与之前不同。
优化结果:
复杂准则的结果处于 99.99 水平。 结果的盈利因子几乎同样是 4.3。
前向验证测试结果:
锯齿余额线。 盈利贯穿全年。
3.6 EA 2 感知器 8 角度
无止损和止盈。 策略 2 感知器,第一个有 4 个倾角,第二个有 4 个倾角,这与之前不同。 平仓由感知器逆向信号执行。
优化结果:
复杂准则的结果处于 99.8。 结果的盈利因子范围在 2.8-3.2。
前向验证测试结果:
锯齿余额线,不稳定。 盈利贯穿全年。 年底时有大幅回撤。
4. 基于 DeepNeuralNetwork.mqh 函数库的 EA
在本文中,我将使用 4 个基于 DeepNeuralNetwork.mqh 函数库的 EA —角度 4-4-3 SL TP,和角度 8-4-3 SL TP,应用止损和止盈平仓,以及角度 4-4-3,和角度 8-4-3,其中收盘信号来自神经网络。 所有 EA 都采用倾角作为策略。 此处不用在实验第二部分中介绍的形状。
止损和止盈代码:
//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment+" En_"+comm1)==0) && (yValues[1]>LL) && (SpreadS1<=MaxSpread)){ if(CalculateSeries(Magic)<MaxSeries){ OpenSell(symbolS1.Name(), LotsXSell, TP, SL, EAComment+" En_"+comm1); } } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment+" En_"+comm1)==0) && (yValues[0]>LL) && (SpreadS1<=MaxSpread)){ if(CalculateSeries(Magic)<MaxSeries){ OpenBuy(symbolS1.Name(), LotsXBuy, TP, SL, EAComment+" En_"+comm1); } }
来自神经网络的平仓代码:
//SELL++++++++++++++++++++++++++++++++++++++++++++++++ if ((CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment+" En_"+comm1)==0) && (yValues[1]>LL) && (SpreadS1<=MaxSpread)){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment+" En_"+comm1); if(CalculateSeries(Magic)<MaxSeries){ OpenSell(symbolS1.Name(), LotsXSell, TP, SL, EAComment+" En_"+comm1); } } //BUY++++++++++++++++++++++++++++++++++++++++++++++++ if ((CalculatePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment+" En_"+comm1)==0) && (yValues[0]>LL) && (SpreadS1<=MaxSpread)){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment+" En_"+comm1); if(CalculateSeries(Magic)<MaxSeries){ OpenBuy(symbolS1.Name(), LotsXBuy, TP, SL, EAComment+" En_"+comm1); } } //CLOSE ALL++++++++++++++++++++++++++++++++++++++++++ if (yValues[2]>LL){ ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_SELL, EAComment+" En_"+comm1); ClosePositions(symbolS1.Name(), Magic, POSITION_TYPE_BUY, EAComment+" En_"+comm1); }
现在,我们应用一个更复杂的方案。 我们在每套当中有 3 个智能交易系统。 第一个用于优化,第二个用于将获得的结果转换为文本数组,而第三个用于测试和处理结果数组。
您也许还记得,在优化过程中,EA 会在 C\Users\Your 用户名 \AppData\Roaming\MetaQuotes\Terminal\Common\Files 处创建一个含有一组优化权重的 CSV 文件。 将 CSV 优化报告文件复制到该文件夹。
在货币对图表上启动 Angle EA 4-4-3 convert。
EA 转换参数:
- Param – 复杂准则值,低于该值的结果不会复制到数组中。我设置 80;
- OptimizationFileName1 – CSV 优化报告文件
- OptimizationFileName2 – CSV 在优化期间由EA 创建的 CSV 文件,包含神经网络权重;
- OptimizationFileName3 – 要插入到 EA 中的数组文件。 该文件将自动创建。
您可以在日志中观看该过程。
将所获文件插入到 Angle EA 4-4-3 交易系统的代码当中:
string Result[][37]= { {"17293","0.8","-0.1","-0.2","1.0","0.9","0.6","0.4","1.0","0.6","-0.4","0.9","-0.5","0.1","-0.5","-0.5","0.9","-0.1","-0.8","0.4","0.0","-0.1","0.1","0.2","-0.4","-0.7","-0.6","-0.9","-0.8","-0.9","-0.7","-0.5","0.4","0.4","0.8","-0.6"}, {"18030","0.6","0.2","-0.4","0.9","-1.0","-0.9","-0.9","0.4","-0.9","-0.8","0.4","0.9","0.2","-0.8","0.9","-0.1","-0.6","0.3","0.5","-0.4","0.7","0.6","-0.4","-0.1","0.4","-0.8","0.4","0.9","-0.2","0.0","0.4","-0.6","-0.4","-0.7","0.7"}, {"13128","0.7","-0.3","0.5","-0.5","-0.5","-0.1","0.8","0.0","0.6","0.9","-0.2","0.8","1.0","0.7","-0.7","-0.2","0.5","0.5","-0.6","0.5","-0.9","-0.5","-0.5","0.5","-0.3","0.5","0.8","0.2","-0.5","-0.2","0.1","-0.1","-0.4","-0.7","0.1"}, {"10688","0.3","0.0","0.2","-0.1","0.6","0.1","0.1","-0.2","-1.0","0.3","0.2","0.5","-0.8","0.7","0.4","-0.5","-0.4","-0.3","-0.3","-0.9","-0.2","0.0","0.1","0.9","0.3","-0.9","-0.2","-0.2","0.1","0.9","0.8","0.1","0.4","0.8","0.6"}, {"8356","0.8","0.8","0.7","0.2","0.0","-0.4","0.5","-0.8","0.0","0.9","0.2","-0.1","1.0","0.6","0.2","-0.8","-0.1","-0.5","-0.3","0.0","0.7","-0.5","-0.3","0.0","0.9","-1.0","-0.2","-0.6","-0.7","-0.5","-0.8","0.5","-0.3","-0.1","0.8"}, {"18542","-0.8","0.9","-0.1","0.5","-0.5","0.3","0.8","-0.4","0.7","0.9","0.4","0.0","-0.2","0.0","0.2","0.5","0.9","0.4","1.0","0.7","0.1","0.1","-0.4","0.0","0.9","0.2","0.0","-0.8","0.1","-0.5","0.1","-0.1","0.1","-0.1","0.6"}, {"18381","0.7","-1.0","-0.8","0.8","-0.8","-0.4","0.9","0.7","1.0","0.7","0.8","0.5","0.1","-0.3","-0.7","-0.9","-0.2","-0.4","0.8","-0.8","0.0","0.8","-0.5","-0.3","0.2","-0.3","-0.1","0.5","-0.1","0.3","0.0","-0.7","-0.2","-0.3","0.8"}, {"13795","0.2","0.9","0.4","0.4","0.1","-0.6","-0.6","-0.3","0.7","0.9","0.7","0.0","-0.2","-0.9","-0.8","-0.6","-0.1","-0.4","-1.0","0.7","-0.7","-0.3","0.0","-0.3","-1.0","0.8","-0.9","-0.9","0.1","-0.5","-0.3","-0.7","-0.2","-0.7","-0.8"}, {"4376","0.9","0.7","-0.6","-0.9","1.0","0.8","0.1","-0.8","0.7","-0.8","0.2","0.1","-0.9","0.8","0.9","-0.4","0.8","0.3","0.0","-0.3","-0.4","0.7","-0.2","0.4","-0.8","-0.2","0.9","0.9","0.2","0.0","0.1","0.5","-0.8","-0.1","0.6"}, {"14503","0.1","-0.4","-0.7","0.1","-0.1","0.5","-0.7","-0.2","-0.9","0.0","0.2","-0.7","0.3","0.7","-0.7","0.1","0.4","0.3","0.3","-0.5","-0.8","-0.8","-0.7","0.2","-0.7","-0.1","-0.8","0.0","-0.4","0.0","0.1","0.5","-0.3","0.5","0.8"}, {"12887","0.6","-0.1","0.4","0.6","-0.9","-0.3","0.7","0.2","-0.6","-1.0","0.0","-0.6","0.5","0.3","0.8","0.0","-0.5","-1.0","-0.6","0.6","-0.6","-0.9","-0.3","0.6","0.2","-0.5","0.6","0.2","-0.5","0.3","0.3","-0.9","-0.7","-0.8","0.8"}, {"16285","0.3","0.3","-0.9","-0.7","-0.1","0.7","-0.7","-0.7","-0.2","-0.5","-0.8","-1.0","-0.1","-0.4","-0.6","1.0","0.3","-0.8","-0.6","1.0","-0.1","0.7","-0.1","0.5","-0.6","0.9","-0.5","0.6","0.2","0.5","-0.4","0.3","-0.6","-0.7","0.7"}, {"13692","0.8","-0.9","0.6","0.3","-0.2","-0.8","-0.4","0.3","-0.6","0.7","0.7","-0.8","0.5","0.1","-0.2","0.7","-0.7","-0.2","0.7","-0.5","0.9","0.7","0.6","0.8","-0.1","-1.0","-0.8","-0.5","-0.1","-0.9","-0.5","0.2","-0.4","0.8","0.2"}, {"1184","-0.1","0.1","0.6","-0.2","-0.3","0.0","-0.7","0.1","-0.5","0.1","-0.6","0.0","-0.9","-0.8","0.1","0.5","0.3","-1.0","0.1","-0.8","-0.6","0.0","-0.4","-0.1","-0.7","-0.8","0.6","0.5","0.0","0.9","-0.5","0.2","0.7","0.3","0.9"}, {"9946","0.4","-0.5","0.9","-1.0","-0.4","-0.7","0.9","0.0","-0.2","0.7","0.7","0.1","0.7","0.4","-0.9","0.1","-0.6","-0.5","0.9","0.8","0.2","-0.9","0.0","0.1","0.9","0.7","0.3","0.6","-0.4","0.8","-0.1","0.2","-0.2","-0.4","0.7"}, {"6104","0.5","-0.9","-0.1","0.7","-0.7","0.0","0.4","0.3","0.8","-0.7","-0.1","0.1","-0.1","-0.5","-0.5","1.0","-0.1","-0.5","0.5","0.7","-0.8","-0.7","-0.7","0.8","-0.2","-0.5","0.2","-0.6","-0.2","-0.1","-0.4","-0.9","-0.6","-0.1","0.9"}, {"995","0.9","0.6","0.7","0.1","-0.8","0.3","-0.2","0.3","0.9","-0.1","0.2","0.5","0.9","-0.7","-0.7","-0.7","0.2","0.2","0.4","-0.7","-0.4","-0.2","0.0","-0.2","0.0","0.6","-0.3","-0.6","-0.9","0.8","-0.6","-0.2","0.2","0.5","0.9"}, {"6922","0.5","0.9","0.1","-0.8","-1.0","-0.1","0.9","0.9","-0.2","0.8","0.8","0.5","-0.3","0.8","-0.2","0.9","-0.6","0.0","0.7","-0.9","0.4","0.7","0.6","-0.1","-0.4","0.5","-0.6","-0.2","-0.5","-0.9","-0.7","-0.6","0.5","-0.6","0.7"}, {"3676","-0.9","-0.8","-0.5","0.8","0.4","-0.8","-0.4","0.6","0.9","0.9","-0.7","0.6","0.8","-0.9","0.3","0.7","-0.7","0.5","0.8","0.9","0.1","0.5","0.8","0.1","0.9","0.9","0.4","0.3","-0.1","0.4","-0.4","0.4","-0.3","-0.6","0.9"}, {"6245","-0.1","-0.4","-0.6","0.7","0.6","-0.6","-0.2","0.2","0.0","-0.4","0.0","0.9","-0.3","0.5","-0.2","0.7","0.4","1.0","0.7","-0.1","-0.3","-0.9","-0.5","0.9","0.8","-0.1","-0.5","-1.0","0.3","0.9","-0.4","-0.2","-0.4","-0.3","0.9"}, {"1039","-0.4","-0.3","-0.6","-0.7","-0.6","0.5","-0.2","-0.9","0.7","0.9","-0.2","-0.6","-0.2","-0.3","0.6","0.1","-0.9","-0.8","0.9","0.3","0.6","0.8","-0.8","0.8","0.6","0.1","-0.2","-0.7","0.6","-0.2","-0.6","0.4","-0.1","-0.2","0.1"}, {"6615","-0.4","-0.1","-0.7","0.5","-0.9","0.4","-0.9","0.4","-0.4","-0.1","0.7","-0.4","0.4","0.4","-0.8","-0.2","-0.6","-0.1","-0.5","-0.7","0.6","0.0","1.0","0.9","-0.3","0.8","0.8","-0.1","-0.2","0.9","-0.2","0.9","-0.8","-0.6","0.5"}, {"410","-0.3","0.2","-0.2","-0.2","0.2","-0.5","0.8","0.3","-0.9","-0.9","-0.4","0.3","-0.8","-0.8","0.0","0.9","-0.2","0.0","-0.2","-0.4","-0.1","0.1","-0.4","0.7","1.0","0.1","0.5","0.3","0.1","0.7","0.4","0.0","-0.2","-1.0","-0.1"}, {"15027","-0.3","-0.4","-0.6","0.3","-0.5","-0.6","0.9","0.5","-0.2","0.0","-0.7","0.7","0.1","0.5","-0.4","-0.4","0.4","0.7","-0.1","0.9","-0.1","0.6","0.5","-0.3","0.6","0.8","0.4","0.1","0.9","-0.5","0.7","0.6","-0.8","-0.1","0.0"}, {"14157","0.6","-0.7","0.7","0.5","0.8","-0.1","0.9","0.8","0.8","0.7","0.6","-0.3","-0.7","-0.5","-0.2","0.2","0.0","-0.8","0.6","0.9","-0.4","0.1","0.1","0.9","0.7","-0.8","-0.6","-0.5","-0.7","0.1","-0.3","0.9","0.5","0.8","-0.7"}, {"11367","0.2","-1.0","-0.4","-0.4","-0.3","-0.2","0.2","-0.1","-0.4","0.7","-1.0","-0.5","-0.9","-0.7","-0.4","-0.8","-0.4","0.0","0.2","0.7","-0.2","0.4","0.1","0.0","-0.1","-0.9","0.2","-0.5","-0.6","-0.6","-0.7","-0.2","-0.3","-0.1","0.9"}, {"3892","-0.7","-0.3","0.8","0.2","-0.3","0.4","0.0","0.3","-0.2","0.7","0.6","0.6","0.7","-0.4","-0.7","0.4","-0.3","-0.8","-0.2","0.0","0.9","0.9","0.3","0.0","0.7","0.1","-0.1","0.1","-0.8","-0.4","-0.5","0.9","-0.7","-0.6","0.2"} };
4.1 Angle 4-4-3 SL TP EA
该 EA 使用 止损和止盈离场。 策略 4 倾角TEMA 指标。
优化结果:
如您所见,有很多好的结果。 盈利因子范围在 1.6-5 范围内。 有 27 个复杂准则值超过 80。
前向验证测试结果:
不幸的是,EA 未能通过前向验证测试。 结果呈负面,且不稳定。
4.2 Angle 4-4-3 EA
该 EA 采用神经网络离场。 策略 4 倾角 TEMA 指标。
优化结果:
如您所见,对于复杂准则,超过 80 的优良结果仅有 6 个。 盈利因子处于 1.6-1.9 范围。
前向验证测试结果:
依据神经网络信号收盘,EA 全年均呈现盈利。 结果比采用止损和止盈更稳定。
4.3 Angle 8-4-3 SL TP EA
该 EA 使用 止损和止盈离场。 策略 8 倾角 TEMA 指标。
优化结果:
与神经网络 4-4-3 相比,结果的盈利因子较低。有 13 个复杂准则结果超过 80。
前向验证测试结果:
正如预期的那样,结果与上一个采用止损和止盈的结果相似。 前向验证测试则失败。
4.4 Angle 8-4-3 EA
该 EA 采用神经网络离场。 策略 8 倾角 TEMA 指标。
优化结果:
仅有 3 个复杂准则的结果超过 80。 与之前的结果相比,盈利因子处于较低水平。
前向验证测试结果:
前向验证的结果并不令人满意。 我们看到本金逐渐亏损。
结束语
从前向验证测试结果可以看出,尽管运行 6 个月后盈利能力有所下降,但没有一个基于感知器的 EA 在年内出现负增长。 这意味着至少每 6 个月需要优化一次。
至于基于 DeepNeuralNetwork.mqh 函数库的 EA,一切更为复杂。 结果也不如预期。 也许策略本身也会影响事物,有必要将其它东西传递给神经网络。
在大多数情况下,盈利能力可以通过优化序列的盈利因子来跟踪。 这为我们提供了额外的思考。
对于未来,我想指出 2 个任务。 有必要基于其它货币对和时间帧内验证获得的最佳结果。
交易次数没有我们想要的那么多,但并没有人禁止使用其它多货币对,并基于这些系统创建投资组合。 反过来,这不可避免的要协同劳力成本的优化。
如果您有任何疑问,请在论坛上提问,或通过私信与我联系。 我始终乐意为您提供帮助。
本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/11949