English Русский Español Deutsch 日本語 Português
preview
神经网络实验(第 3 部分):实际应用

神经网络实验(第 3 部分):实际应用

MetaTrader 5EA交易 | 22 五月 2023, 10:55
1 034 0
Roman Poshtar
Roman Poshtar

概述

在系列的前几篇文章中重访几何,和智能神经网络优化我分享了我对神经网络的观察和实验。此外,我还对生成的 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

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

附加的文件 |
EA.zip (1056.16 KB)
种群优化算法:入侵杂草优化(IWO) 种群优化算法:入侵杂草优化(IWO)
在各种条件下杂草的惊人生存能力已演化成强大优化算法的思路。 IWO 是以前审阅过的算法中最好的算法之一。
种群优化算法:蝙蝠算法(BA) 种群优化算法:蝙蝠算法(BA)
在本文中,我将研究蝙蝠算法(BA),它在平滑函数上表现出良好的收敛性。
构建自动运行的 EA(第 11 部分):自动化(III) 构建自动运行的 EA(第 11 部分):自动化(III)
如果没有健全的安全性,自动化系统就不会成功。 但是,如果不对某些事情有很好的理解,就无法确保安全性。 在本文中,我们将探讨为什么在自动化系统中实现最大安全性是一项挑战。
学习如何基于鳄嘴(Gator)振荡器设计交易系统 学习如何基于鳄嘴(Gator)振荡器设计交易系统
这是我们关于学习如何基于流行技术指标设计交易系统系列的一篇新文章,将介绍鳄嘴(Gator)振荡器技术指标,以及如何通过简单的策略创建交易系统。