English Русский 中文 Español 日本語 Português
preview
Experimente mit neuronalen Netzen (Teil 3): Praktische Anwendung

Experimente mit neuronalen Netzen (Teil 3): Praktische Anwendung

MetaTrader 5Experten | 2 März 2023, 09:28
261 0
Roman Poshtar
Roman Poshtar

Einführung

In den vorherigen Artikeln der Serie Geometrie neu betrachten und Intelligente Optimierung Neuronaler Netze habe ich meine Beobachtungen und Experimente mit neuronalen Netzen mitgeteilt. Außerdem habe ich die Optimierung der resultierenden EAs durchgeführt und einige Erklärungen zu ihrer Arbeit geliefert. Trotz alledem habe ich das Thema der praktischen Anwendung der erzielten Ergebnisse kaum berührt. In diesem Artikel werde ich dieses bedauerliche Versäumnis nachholen.

Ich werde die praktische Anwendung der erzielten Ergebnisse zeigen und einen neuen Algorithmus vorstellen, mit dem wir die Möglichkeiten unserer EAs erweitern können. Wie immer werde ich nur MetaTrader 5-Tools ohne jegliche Software von Drittanbietern verwenden. Der Artikel wird höchstwahrscheinlich einer Schritt-für-Schritt-Anleitung ähneln. Ich werde versuchen, alles so einfach und verständlich wie möglich zu erklären.


1. Die Idee der Verwendung

Bei der Optimierung der beiden vorherigen Systeme erhielt ich einige Ergebnisse mit den besten Werten des Gewinnfaktors oder des komplexen Kriteriums und auch eine Reihe von Gewichten für unsere Perzeptronen und neuronalen Netze. Die Tests der erzielten Ergebnisse haben recht akzeptable Werte ergeben. Die Hauptidee dieser Verbesserung besteht darin, alle Optimierungsergebnisse in einem EA zu kombinieren und sie gleichzeitig arbeiten zu lassen. Wie Sie sich vielleicht vorstellen können, ist es nicht sehr bequem, 10 Charts mit zehn EAs offen zu halten. Außerdem können wir so die Ergebnisse in einer erweiterten (umfassenden) Weise betrachten, indem wir zum Beispiel 10-20 Parameter gleichzeitig verwenden.


2. Währungspaar. Optimierung und Vorwärtstestbereich. Einstellungen

Nachstehend finden Sie alle Optimierungs- und Testparameter:

  • Forex;
  • EURUSD;
  • H1;
  • Indikatoren: 2 TEMA-Indikatoren mit den Periodenlängen von 1 und 24. Ich habe den MA fallengelassen, da sich der TEMA-Indikator in zahlreichen Tests als besser erwies.
  • StopLoss und TakeProfit für die entsprechenden Änderungen von 600 und 60;
  • Optimierungs- und Testmodi „Nur Öffnungspreise“ und „Komplexes Kriterium, Maximum“. Der Modus „Komplexes Kriterium, Maximum“ zeigte stabilere und rentablere Ergebnisse als der Modus „Maximaler Gewinn“;
  • Optimierungsbereich 3 Jahre. 2018.12.09 - 2021.12.09. 3 Jahre sind kein zuverlässiges Kriterium. Sie können mit diesem Parameter selbst experimentieren;
  • Die Dauer des Vorwärtstest beträgt 1 Jahr. 2021.12.09 - 2022.12.09;
  • Bei allen Vorwärtstests wurden 20 Optimierungsergebnisse gleichzeitig verwendet;
  • Optimierung von Expert Advisors mit Perceptron „Schneller genetischer Algorithmus“;
  • Optimierung von EAs unter Verwendung der DeepNeuralNetwork.mqh-Bibliothek „Langsamer vollständiger Algorithmus“;
  • Ersteinlage 10.000;
  • Hebel 1:500.

3. Perceptron-basierte EAs

 Nach zahlreichen Beobachtungen hat sich herausgestellt, dass die Gewichtungstiefe von 200 in EAs mit einem Perzeptron nicht erforderlich ist. 20 ist ausreichend. Daher wurden der Perceptron-Code selbst und die Optimierungsparameter geändert. Jetzt optimieren wir die Gewichte von 0 in Schritten von 1 bis 20.

 Außerdem wurde der Parameter „Param“ eingeführt, der für die Tiefe des Rückgangs auf die positive oder negative Seite des Perzeptrons verantwortlich ist. Dieser Parameter wirkte sich auf die Anzahl der Abschlüsse und deren Genauigkeit aus. Die Zahl der Abschlüsse ist zurückgegangen, während sich ihre Genauigkeit verbessert hat.

 Jedes der Systeme verwendet 2 EAs. Die erste dient der Optimierung, während die zweite für die direkte Arbeit gedacht ist. Ich habe mich entschlossen, die Aufteilung der Aufträge durch Auftragskommentare zu regeln, da dies meiner Meinung nach der einfachste und bequemste Weg ist. Der eindeutige Auftragsindex ist die Seriennummer in der Probe selbst. Die Probe ist ein Archiv mit den erzielten Optimierungsergebnissen. Der Parameter MaxSeries wird verwendet, um den Umfang der gleichzeitigen Arbeit zu begrenzen.

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);
}

}

 Neuer Perceptron-Code:

1 Perzeptron 4 Neigungswinkel SL TP und 1 Perzeptron 4 Neigungswinkel

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 Perzeptron 8 Neigungswinkel SL TP und 1 Perzeptron 8 Neigungswinkel

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 Perzeptronа 4 Neigungswinkel SL TP und 2 Perzeptronа 4 Neigungswinkel

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);
  }

 Aktivierungscode eingeben:

1 Perzeptron 4 Neigungswinkel SL TP und 1 Perzeptron 4 Neigungswinkel

//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 Perzeptron 8 Neigungswinkel SL TP und 1 Perzeptron 8 Neigungswinkel

//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 Perzeptronа 4 Neigungswinkel SL TP und 2 Perzeptronа 4 Neigungswinkel

//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);
}

 Optimierungseinstellungen:

1 Perzeptron 4 Neigungswinkel SL TP und 1 Perzeptron 4 Neigungswinkel

Optimierungseinstellungen 1

1 Perzeptron 8 Neigungswinkel SL TP und 1 Perzeptron 8 Neigungswinkel

Optimierungseinstellungen

2 Perzeptronа 4 Neigungswinkel SL TP und 2 Perzeptronа 4 Neigungswinkel

Optimierungseinstellungen


3.1 EA 1 Perzeptron 4 Neigungswinkel SL TP

Diese EA-Modifikation verwendet Stop-Loss und Take-Profit für den Ausstieg. Strategie 1 Perzeptron und 4 Neigungswinkel (angel) von TEMA-Indikatoren. Führen Sie die Optimierung 10 Mal durch. Strukturen von Neigungswinkeln und Optimierungsprinzipien sind im ersten Artikel zu finden. Es hat keinen Sinn, sie hier zu wiederholen.

Ergebnis der Optimierung:

Ergebnis der Optimierung


Ergebnis der Optimierung

Eine große Anzahl von Ergebnissen des komplexen Kriteriums 99,99. Gewinnfaktor auf dem hohen Niveau von 4-8.

 Exportieren Sie anschließend das erhaltene Ergebnis in Excel. Lassen Sie die ersten 100 besten Ergebnisse stehen und löschen Sie alles andere. Entfernen Sie alle Spalten außer х1, х2, х3, х4 und Param.  Speichern Sie die Datei als CSV (Kommas werden als Trennzeichen verwendet). Ich habe die Datei EURUSD aus Gründen der Übersichtlichkeit. Wir können dieses Format als Text-Array in den EA-Code laden.  Es sollte so aussehen wie auf dem Bild unten.

Ergebnis der Optimierung

Fügen Sie die Datei über das Menü MetaEditor in den Code ein.

Ergebnis der Optimierung

Holen Sie sich das fertige Textfeld mit Optimierungsergebnissen.

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"}
  };

Kompilieren Sie den Vorwärtstest und führen Sie ihn durch. 

Vorwärtstest

Die Ergebnisse sind gut. Im Laufe des Jahres ist ein stetiger Aufwärtstrend zu beobachten.


3.2 EA 1 Perzeptron 4 Neigungswinkel

Diese EA-Modifikation verwendet keine Stop-Loss und Take-Profit. Geschlossen wird durch Perceptron-Feedback.

//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);
}

Ergebnis der Optimierung:

Ergebnis der Optimierung


Ergebnis der Optimierung

Das Ergebnis des komplexen Kriteriums ist etwas niedriger als im vorherigen Fall. Der Gewinnfaktor liegt bei 2-2,5.

Ergebnis des Vorwärtstests:

Ergebnis des Vorwärtstests

Die Saldo-Linie wiederholt das vorherige Ergebnis mit tieferen Drawdowns.


3.3 EA 1 Perzeptron 8 Neigungswinkel SL TP

Diese EA-Modifikation verwendet Stop-Loss und Take-Profit zum Ausstieg. Strategie 1 Perzeptron und 8 Neigungswinkel (angel) der TEMA-Indikatoren.

Für diesen EA müssen wir eine Excel Datei wie unten gezeigt. Hier optimieren wir die Parameter х1, х2, х3, х4, y1, y2, y3, y4 und Param.

Ergebnis der Optimierung

Ergebnis der Optimierung:

Ergebnis der Optimierung


Ergebnis der Optimierung

Das Ergebnis des komplexen Kriteriums ist hoch. Der Gewinnfaktor liegt bei 2,5-3.

Ergebnis des Vorwärtstests:

Ergebnis des Vorwärtstests

Die Saldenlinie ist nicht sehr stabil. Die Drawdowns sind beträchtlich. Das Ergebnis ist jedoch positiv.


3.4 EA 1 Perzeptron 8 Neigungswinkel

Stop-Loss und Take-Profit werden nicht verwendet. Geschlossen wir durch das umgekehrten Signal des Perzeptrons. Strategie 1 Perceptron und 8 Neigungswinkel der TEMA-Indikatoren.

Ergebnis der Optimierung:

Ergebnis der Optimierung


Ergebnis der Optimierung

Das Ergebnis des komplexen Kriteriums ist hoch. Der Gewinnfaktor liegt bei 2,5-3.

Ergebnis des Vorwärtstests:

Ergebnis des Vorwärtstests

Die Saldenlinie ist stabil. Ein schöner Anstieg der Einlagen im Laufe des Jahres. Die Drawdowns sind nicht so groß.


3.5 EA 2 Perzeptron 8 Neigungswinkel SL TP

Es werden Stop-Loss und Take-Profit verwendet. Strategie 2 Perzeptron, 4 Neigungswinkel beim ersten und 4 Neigungswinkel beim zweiten, die unterschiedlich sind.

Ergebnis der Optimierung:

Ergebnis der Optimierung


Ergebnis der Optimierung

Das Ergebnis des komplexen Kriteriums liegt auf dem Niveau von 99,99. Der Gewinnfaktor der Ergebnisse ist mit 4,3 fast gleich.

Ergebnis des Vorwärtstests:

Ergebnis des Vorwärtstests

Eine Saldenlinie wie Sägezähne. Gewinn im Laufe des Jahres.


3.6 EA 2 Perzeptron 8 Neigungswinkel

Kein Stop-Loss und Take-Profit. Strategie 2 Perzeptron, 4 Neigungswinkel beim ersten und 4 Neigungswinkel beim zweiten, die unterschiedlich sind. Die Schließung erfolgt durch das Umkehrsignal des Perceptrons.

Ergebnis der Optimierung:

Ergebnis der Optimierung


Ergebnis der Optimierung

Das Ergebnis des komplexen Kriteriums liegt bei 99,8. Der Gewinnfaktor der Ergebnisse liegt zwischen 2,8 und 3,2.

Ergebnis des Vorwärtstests:

Ergebnis des Vorwärtstests

Sägezahnsaldo, instabil. Gewinn im Laufe des Jahres. Große Drawdowns am Ende des Jahres.


4. EAs basierend auf der Bibliothek DeepNeuralNetwork.mqh

In diesem Artikel verwende ich 4 EAs, die auf der Bibliothek DeepNeuralNetwork.mqh basieren - Angle 4-4-3 SL TP und Angle 8-4-3 SL TP, bei denen Stop-Loss und Take-Profit für die Schließung verwendet werden, sowie Angle 4-4-3 und Angle 8-4-3, bei denen die Signal zum Schließen vom neuronalen Netzwerk kommt. Alle EAs verwenden Neigungswinkel als Strategie. Die im zweiten Teil unserer Versuche vorgestellten Formen werden hier nicht verwendet.

Stop-Loss- und Take-Profit-Code:

//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);
  }
}

Der Code zum Schließen durch das neuronale Netz:

//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);
}

Wenden wir nun ein komplexeres Schema an. Wir haben 3 Expert Advisors in jedem Satz. Der erste ist für die Optimierung gedacht, die zweite für die Konvertierung der erhaltenen Ergebnisse in ein Text-Array, während die dritte für die Prüfung und Handhabung des resultierenden Arrays gedacht ist.

Wie Sie sich vielleicht erinnern, erstellt der EA während der Optimierung eine CSV-Datei mit einer Reihe von optimierten Gewichten unter C:\Users\Ihr Nutzername\AppData\Roaming\MetaQuotes\Terminal\Common\Files. Kopieren Sie die CSV-Optimierungsberichtdatei in den Ordner.

Starten Sie Angle EA 4-4-3 convert auf dem Währungspaar-Chart.

Expert Advisor

EA-Parameter für die Konvertierung:

  • Parameter – (Wert) des komplexen Kriteriums, unter dem die Ergebnisse nicht in das Array kopiert werden. Ich habe 80 verwendet;
  • OptimizationFileName1 – CSV-Datei des Optimierungsberichts
  • OptimizationFileName2 – CSV-Datei, die vom EA während der Optimierung erstellt wird und die Gewichte des neuronalen Netzes enthält;
  • OptimizationFileName3 – Array-Datei, die in den EA eingefügt werden soll. Die Datei soll automatisch erstellt werden.

Sie können den Vorgang in den Protokollen verfolgen.

Protokolle

Fügen Sie die erhaltene Datei in den Code von Angle EA 4-4-3 trade ein:

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 Winkel 4-4-3 SL TP EA

Der EA verwendet Stop-Loss und Take-Profit zum Ausstieg. Strategie 4 Neigungswinkel der TEMA-Indikatoren.

Ergebnis der Optimierung:

Ergebnis der Optimierung


Ergebnis der Optimierung

Wie Sie sehen können, gibt es viele gute Ergebnisse. Der Gewinnfaktor liegt zwischen 1,6 und 5. Es gibt 27 komplexe Kriteriumswerte, die über 80 liegen.

Ergebnis des Vorwärtstests:

Ergebnis des Vorwärtstests

Leider hat der EA den Vorwärtstest nicht bestanden. Die Ergebnisse sind negativ und unbeständig.


4.2 Winkel 4-4-3 EA

Der EA verwendet das neuronale Netzwerk zum Ausstieg. Strategie 4 Neigungswinkel der TEMA-Indikatoren.

Ergebnis der Optimierung:

Ergebnis der Optimierung


Ergebnis der Optimierung

Wie Sie sehen können, gab es nur 6 gute Ergebnisse für das komplexe Kriterium über 80. Der Gewinnfaktor liegt zwischen 1,6 und 1,9.

Ergebnis des Vorwärtstests:

Ergebnis des Vorwärtstests

Mit dem Schließen durch das neuronale Netz hat der EA das ganze Jahr über Gewinne erzielt. Das Ergebnis ist stabiler als die Verwendung von Stop-Loss und Take-Profit.


4.3 Angle 8-4-3 SL TP EA

Der EA verwendet Stop-Loss und Take-Profit zum Ausstieg. Strategie 8 Neigungswinkel der TEMA-Indikatoren.

Ergebnis der Optimierung:

Ergebnis der Optimierung


Ergebnis der Optimierung

Der Gewinnfaktor der Ergebnisse ist im Vergleich zum neuronalen Netz 4-4-3 geringer.  Es gibt 13 Ergebnisse für komplexe Kriterien, die über 80 liegen.

Ergebnis des Vorwärtstests:

Ergebnis des Vorwärtstests

Wie erwartet, ist das Ergebnis ähnlich wie bei der Verwendung von Stop-Loss und Take-Profit. Der Vorwärtstest wurde nicht bestanden.


4.4 Angle 8-4-3 EA

Der EA verwendet das neuronale Netzwerk zum Ausstieg. Strategie 8 Neigungswinkel der TEMA-Indikatoren.

Ergebnis der Optimierung:

Ergebnis der Optimierung


Ergebnis der Optimierung

Es gibt nur 3 Ergebnisse für komplexe Kriterien, die 80 übersteigen. Der Gewinnfaktor liegt im Vergleich zu früheren Ergebnissen auf einem niedrigen Niveau.

Ergebnis des Vorwärtstests:

Ergebnis des Vorwärtstests

Das vorläufige Ergebnis ist nicht zufriedenstellend. Wir sehen den allmählichen Verlust der Einlage.


Schlussfolgerung

Wie wir aus den Ergebnissen der Vorwärtstests ersehen können, hat keiner der Perceptron-basierten EAs im Laufe des Jahres ein negatives Ergebnis erzielt, obwohl nach sechs Monaten ein gewisser Rückgang der Rentabilität zu verzeichnen ist. Dies bedeutet, dass eine Optimierung mindestens alle 6 Monate erforderlich ist.

Bei den EAs, die auf der Bibliothek DeepNeuralNetwork.mqh basieren, ist alles kompliziert. Die Ergebnisse sind nicht so gut wie erwartet. Vielleicht beeinflusst die Strategie selbst die Dinge und es ist notwendig, dem neuronalen Netz etwas anderes zu übergeben.

In den meisten Fällen lässt sich die Rentabilität anhand des Gewinnfaktors der optimierten Serien nachvollziehen. Das gibt uns einen zusätzlichen Denkanstoß.

Für die Zukunft möchte ich auf 2 Aufgaben hinweisen. Es ist notwendig, die besten Ergebnisse zu prüfen, die mit anderen Währungspaaren und Zeitrahmen erzielt wurden.

Es gibt nicht so viele Positionen, wie wir gerne hätten, aber niemand verbietet, andere Währungspaare zu verwenden und ein Portfolio auf der Grundlage dieser Systeme zu erstellen. Dies wiederum ist mit unvermeidlichen Arbeitskosten für die Optimierung verbunden.

Wenn Sie Fragen haben, stellen Sie sie im Forum oder kontaktieren Sie mich über eine private Nachricht. Ich werde Ihnen immer gerne helfen.



Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/11949

Beigefügte Dateien |
EA.zip (1056.16 KB)
Algorithmen zur Optimierung mit Populationen Fledermaus-Algorithmus (BA) Algorithmen zur Optimierung mit Populationen Fledermaus-Algorithmus (BA)
In diesem Artikel werde ich den Fledermaus-Algorithmus (Bat-Algorithmus, BA) betrachten, der gute Konvergenz bei glatten Funktionen zeigt.
Erstellen eines EA, der automatisch funktioniert (Teil 04): Manuelle Auslöser (I) Erstellen eines EA, der automatisch funktioniert (Teil 04): Manuelle Auslöser (I)
Heute werden wir sehen, wie man einen Expert Advisor erstellt, der einfach und sicher im automatischen Modus arbeitet.
Algorithmen zur Populationsoptimierung Optimierung mit invasiven Unkräutern (IWO) Algorithmen zur Populationsoptimierung Optimierung mit invasiven Unkräutern (IWO)
Die erstaunliche Fähigkeit von Unkräutern, unter verschiedensten Bedingungen zu überleben, wurde zur Idee für einen leistungsstarken Optimierungsalgorithmus. IWO (Invasive Weed Optimization) ist einer der besten Algorithmen unter den bisher geprüften.
Erstellen eines EA, der automatisch funktioniert (Teil 03): Neue Funktionen Erstellen eines EA, der automatisch funktioniert (Teil 03): Neue Funktionen
Heute werden wir sehen, wie man einen Expert Advisor erstellt, der einfach und sicher im automatischen Modus arbeitet. Im vorherigen Artikel haben wir begonnen, ein Auftragssystem zu entwickeln, das wir in unserem automatisierten EA verwenden werden. Wir haben jedoch nur eine der benötigten Funktionen geschaffen.