English Русский 中文 Español 日本語 Português 한국어 Français Italiano Türkçe
Neuronale Netzwerke  - kostengünstig und gut gelaunt: NeuroPro mit MetaTrader 5 verknüpfen

Neuronale Netzwerke - kostengünstig und gut gelaunt: NeuroPro mit MetaTrader 5 verknüpfen

MetaTrader 5Integration | 2 Juni 2016, 07:33
1 080 1
ds2
ds2

Über NeuroPro

Das NeuroPro-Programm wurde 1998 in einem der russischen Institute geschrieben und hat noch heute seine Bedeutung.

Es läuft reibungslos und effizient auf Windows XP, Vista und Windows 7. Ich kann Ihnen nicht sagen, wie es auf jüngeren Windows-Versionen läuft, da ich es dort noch nicht getestet habe.

Über NeuroPro

Abb. 1 Über NeuroPro

Version 0.25 ist kostenlos und findet sich auf vielen Websites im Internet. NeuroPro kann mehrschichtige neuronale Netzwerke mit der Sigmoid-Aktivierungsfunktion erzeugen. Wenn Sie gerade erst begonnen haben, sich mit neuronalen Netzwerken zu beschäftigen, dann brauchen Sie derzeit auch keine weiteren Merkmale. Sie sollten daran danken, dass die NeuroPro-Schnittstelle in Russisch ist und bislang noch nicht in andere Sprachen übersetzt wurde.

Neuronale Netzwerke können auf einem Datenarray trainiert und dann auf einem anderen getestet werden. Für Händler ist das ein wesentliches Merkmal, da es zu einem raschen Verständnis verhilft, ob die ausgewählte Netzwerkstruktur anfällig für Daten-Overfitting ist und ob sie konsequent Handel außerhalb historischer Daten ausführen kann - also auf einem echten Konto.

Diejenigen, die tiefer in die Materie eindringen möchten, können die Gewichtungen neuronaler Netzwerke sehen und auch, welche Netzwerk-Eingaben das Ergebnis des Netzwerkablaufs am stärksten beeinflussen. Für Anfänger ist das noch nicht erforderlich, sodass sie diesen Teil des Programms überspringen können. Diese Information ist für erfahrene Händler nützlich, die nach dem 'Graal' suchen, denn sie können hier Vermutung darüber anstellen, welches Muster vom neuronalen Netzwerk identifiziert wurde und daran erkennen, wo sie mit ihrer Suche weitermachen sollten.

Davon abgesehen, hat NeuroPro keine wesentlichen Merkmale, außer verschiedener Einstellungen und nützlicher Hilfsprogramme, wie dem Minimizer der Netzwerk-Struktur. Diese Bereiche des Menüs muss man nicht unbedingt nutzen, daher müssen Neulinge die Sache auch nicht zu kompliziert machen und können ausschließlich mit den Standardeinstellungen arbeiten.

Vom Standpunkt eines Händlers aus gesehen, hat NeuroPro nur einen Nachteil: es kann nicht in MetaTrader 5 integriert werden. Und dieser Beitrag beschäftigt sich nun am meisten mit dem Laden von Markt- und Indikatordaten von MetaTrader 5 in NeuroPro und danach mit der Umwandlung des empfangenen neuronalen Netzwerks in einen Expert in MQL5.

Um unserem Thema ein wenig vorzugreifen, kann ich sagen, dass das neuronale Netzwerk, dass wir mit NeuroPro erzeugen werden mit allen Neuronen-Gewichtungen in ein MQL5-Script umgewandelt wird (anders als das System des 'Miteinschließens' von DLL wie in jedem anderen neuronalen Netzwerkprogramm). Das garantiert eine schnellere Arbeit und minimale Belegung von Rechnerleistung. Ein ganz klarer Vorteil bei der Arbeit mit NeuroPro. NeuroPro kann zur Erzeugung jeder Handelsstrategie verwendet werden, selbst von Scalping-Strategien, mit ihrer Bedingung an den Expert, Entscheidungen nahezu unmittelbar zu treffen.


Handelsstrategie

In diesem Beitrag werden wir uns Scalping nicht betrachten, da der Erzeugungs-, Trainings- und Testprozess von Scalping-Experts eine Menge Besonderheiten mit sich bringt und den Umfang dieses Beitrags sprengen würde.

Für ein besseres Verständnis werden wir einen einfachen Expert für den H1 Zeitrahmen und dem beliebten Währungspaar EURUSD erzeugen. Daher soll unser Expert die letzten 24 Bars analysieren, d.h. das Marktverhalten am letzten Tag, die Richtung der Kursbewegung in der nächsten Stunde voraussagen und dann aufgrund dieser Informationen Handel ausführen.


Wie werden Daten vom MetaTrader in NeuroPro geladen?

Unterstütztes Datenformat

NeuroPro liest Daten ausschließlich in DBMS- (Tabellen-DBMS-Paradox) und DBF-Formaten (Tabellen-DBMS FoxPro und dBase). DBF ist das geläufigste Format auf der Welt. Sollten Sie also ein erfahrenerer Programmierer sein, dann sind Sie sicherlich schon oft damit in Berührung gekommen Wir werden dieses Format ebenfalls verwenden.

Der Algorithmus der Datenübertragung in NeuroPro sieht so aus:

  1. ein Script für MetaTrader schreiben, alle erforderlichen Daten in eine CSV-Textdatei laden und dabei die Daten durch Kommas trennen;
  2. mit Hilfe spezieller Programme das CSV-Format in DBF umwandeln;
  3. DBF in NeuroPro öffnen.

Daten vom MetaTrader laden

Beim Schreiben eines Scripts zum Laden von Dateien sollte man einige Feinheiten berücksichtigen:

  • ein Datenfeld in DBF darf max. 11 Symbole lang sein, einige Umwandler schneiden es auch auf 10 Symbole zu. Daher sollten Feldnamen nicht länger als 10 Symbole sein;
  • in neuronalen Netzwerken mit einer großen Eingabezahl von Bars, sind die Felder meist vom Typ "BarN", wobei 'N' eine fortlaufende Nummer des Bars ist. In unserem Fall wird es 24 Felder geben und ihre Namen reichen folglich von "Bar1" bis "Bar24". Ich empfehle jedoch, obwohl dies nicht verpflichtend ist, die Namen solcher Felder als "Bar___N__" zu schreiben (zuerst mit drei Unterstrichen und dann mit zwei). Sie werden etwas später, dann wenn wir den Expert schreiben, verstehen, warum ich das empfehle.

Unten steht ein fertiges Scripts für unsere Teststrategie (ist diesem Beitrag auch angehängt):

#property script_show_inputs
//+------------------------------------------------------------------+
input string    Export_FileName  = "NeuroPro\\data.csv"; // File for export (in the "MQL5/Files" folder)
input int       Export_Bars_Skip = 0;                    // Number of historical bars to skip before export
input int       Export_Bars      = 5000;                 // Number of lines for export
//+------------------------------------------------------------------+
const int inputlen=24;    // Number of past bars analyzed by the trading strategy
//+------------------------------------------------------------------+
void OnStart()
  {
   //--- create a file
   int file=FileOpen(Export_FileName,FILE_WRITE|FILE_CSV|FILE_ANSI,',');

   if(file!=INVALID_HANDLE)
     {
      //--- write the data header
      string row="date";
      for(int i=0; i<=inputlen; i++)
        {
         if(StringLen(row)) row+=",";
         //========================================================
         // Note! 
         // In the Expert substitute underscores for [].
         // A field name in the DBase format is no longer than 11 symbols. Calc reduces it down to 10.
         // Maximum number of fields in the DBase format is 128-512, depending on the version.
         //========================================================
         StringConcatenate(row,row,"Bar___",i,"__");
        }
      FileWrite(file,row);

      //--- copy required data from history
      MqlRates rates[],rate;
      int count=Export_Bars+inputlen;
      if(CopyRates(Symbol(),Period(),1+Export_Bars_Skip,count,rates)<count)
        {
         Print("Error! Insufficient historical data for exporting required data.");
         return;
        }
      ArraySetAsSeries(rates,true);

      //--- write down the data      
      for(int bar=0; bar<Export_Bars; bar++)
        {
         row="";
         //--- closing price of the 1st bar will be the zero level for normalization of others
         double zlevel=rates[bar+1].close; 
         for(int i=0; i<=inputlen; i++)
           {
            if(StringLen(row)) row+=",";
            rate=rates[bar+i];
            if(i==0) row+=TimeToString(rate.time,TIME_DATE || TIME_MINUTES)+",";
            row+=DoubleToString(rate.close-zlevel,Digits());
           }
         FileWrite(file,row);
        }
      FileClose(file);
      Print("Data export successfully completed.");
     }
   else Print("Error! Failed to create a file for data export. ",GetLastError());
  }


Starten wir jetzt erst einmal das Terminal. Bei erfolgreichem Start wird es in das Logbuch des Experts eine entsprechende Meldung schreiben.

Die vom Script erzeugte Datendatei enthält ungefähr folgendes.

Im ersten String befinden sich die Namen der Tabellenfelder, dann kommen die Strings mit den Werten dieser Felder, getrennt durch Kommas:

Datum,Bar___0__,Bar___1__,Bar___2__,Bar___3__,Bar___4__,Bar___5__,Bar___6__,Bar___7__,Bar___8__,Bar___9__,Bar___10__,Bar___11__,Bar___12__,Bar___13__,Bar___14__,Bar___15__,Bar___16__,Bar___17__,Bar___18__,Bar___19__,Bar___20__,Bar___21__,Bar___22__,Bar___23__,Bar___24__
25.09.2014,-0.0008,0.0000,-0.0005,-0.0014,0.0007,0.0035,0.0035,0.0036,0.0047,0.0052,0.0050,0.0046,0.0046,0.0047,0.0049,0.0052,0.0049,0.0053,0.0055,0.0056,0.0067,0.0056,0.0097,0.0105,0.0113
25.09.2014,0.0005,0.0000,-0.0009,0.0012,0.0040,0.0040,0.0041,0.0052,0.0057,0.0055,0.0051,0.0051,0.0052,0.0054,0.0057,0.0054,0.0058,0.0060,0.0061,0.0072,0.0061,0.0102,0.0110,0.0118,0.0123
25.09.2014,0.0009,0.0000,0.0021,0.0049,0.0049,0.0050,0.0061,0.0066,0.0064,0.0060,0.0060,0.0061,0.0063,0.0066,0.0063,0.0067,0.0069,0.0070,0.0081,0.0070,0.0111,0.0119,0.0127,0.0132,0.0130
25.09.2014,-0.0021,0.0000,0.0028,0.0028,0.0029,0.0040,0.0045,0.0043,0.0039,0.0039,0.0040,0.0042,0.0045,0.0042,0.0046,0.0048,0.0049,0.0060,0.0049,0.0090,0.0098,0.0106,0.0111,0.0109,0.0122

Umwandlung von CSV in DBF

Das kann man auf vielerlei Arten machen.

  • Microsoft Excel, alle Versionen vor 2007. Kann CSV-Dateien öffnen und Daten zudem im DBF-Format speichern. Beachten Sie, dass sehr alte Excel-Version nur 65535 Strings aufnehmen. Angesichts dessen reicht diese Kapazität meistens für einen Handel aus, da diese Menge leicht in eine History des H1 Zeitrahmens von zehn Jahren passt.
  • Microsoft Excel, 2007 spätere Versionen Man kann nicht in DBF abspeichern. Ein Add-On zur entsprechenden Ausstattung von Excel mit dieser Funktionalität findet man im Internet;
  • Microsoft Access (Programm des Microsoft Office-Pakets zur Arbeit mit Datenbanken). Eine Tabelle lässt sich in einer Datenbank anlegen, indem man von einer Textdatei importiert (CSV) und sie dann in eine DBF-Datei exportiert;
  • spezielle Umwandlungshilfen von CSV zu DBF. Sie gibt es reichlich, und im Internet findet man jede Menge Marken; doch die meisten dieser Konverter sind kostenpflichtig;
  • 'Calc' vom kostenlosen OpenOffice-Paket. 'Calc' ist annähernd analog zu Excel. Kann CSV-Dateien öffnen und sie in DBF speichern.

Alle o.g. Methoden sind intuitiv und sollten keinerlei Probleme in ihrem Umgang bereiten.

Ich führe die Umwandlung auf eine der soeben aufgezählten Arten durch. Und zwar mit der letzten, da NeuroPro ein Gratis-Programm ist und der Gedanke hinter Gratis-'Calc' ihm am nächsten kommt. Sie können OpenOffice von der offiziellen Website http://www.openoffice.org/ herunterladen.

Umwandlungsvorgang.

  1. 'Calc' starten. Unsere Datendatei mit der CSV-Erweiterung öffnen.
  2. 'Calc' startet dann den Datenerkennungs-Assistenten.
  3. In den Assistenten-Parametern angeben, dass die Felder durch Kommas getrennt sein sollen.

Ein weiterer wichtiger Punkt hier ist der Trenner der ganzen Zahl und des Bruchteils der Zahl. Gemäß den Konfigurationen auf meinem Computer ("START" > "Systemsteuerung" > "Sprache und Regionale Standards"), wird ein Punkt als Trenner verwendet. In unserer CSV-Datei verwenden wir diesen Punkt ebenfalls. Damit ''Calc'' die Zahlen korrekt lesen kann, muss auch ein Trenner angegeben werden. Das erfolgt durch Auswahl der erforderlichen Sprache in den Einstellungen des Umwandlungs-Assistenten. Wählen Sie eine der Varianten für Englisch, denn in dieser Sprache wird standardmäßig per Punkt getrennt.

Die korrekten Einstellungen im Assistenten sind auf dem Screenshot abgebildet:

 

Abb. 2 Einrichtung des Import-Assistenten von der CSV-Datei


Tipp: Um nicht bei jeder Umwandlung einer CSV-Datei jeweils die Sprache wählen zu müssen, kann sie in den 'Calc'-Einstellungen als Standardsprache eingerichtet werden: Menü "Tools" > "Optionen" und dann so wie im Screenshot grün unterlegt:



Abb. 3 Systemspracheinstellungen in 'Calc'


4) Okay, die CSV-Datei hat sich hochgeladen und die Daten wurden automatisch in Spalten geschrieben:



Abb. 4 Erfolgreich geöffnete CSV-Datei


5) Damit die Daten korrekt im DBF-Format geschrieben werden, muss man noch ihren Typ und ihre Genauigkeit angeben.

Damit alle Spalten mit den Zahlen markiert werden sollen und auch ihre entsprechenden Eigenschaften zugewiesen werden, so wie auf dem Screenshot in grün unterlegt:


 

Abb. 5 Einrichtung der Spalten mit Zahlen


6) In DBF speichern: Menü "Datei" > "Speichern als". Im Dialogfenster wählen Sie Datentyp "dBase (*.dbf)":


Abb. 6 Dialogfenster zum Speichern einer Datei im DBF-Format


Danach "Speichern" klicken.

7) 'Calc' fragt nach der Bestätigung des gewählten Formats:



Abb. 7. 'Calc' schlägt vor, eine Datei im Standard-ODF-Format statt im DBF-Format zu speichern


Durch Drücken von "aktuelles Format beibehalten" unsere Wahl bestätigen.

8) 'Calc' fragt, welche Codierung für die Textdaten in der DBF-Datei verwendet werden soll. Da es in unserem Beispiel keine solchen Daten gibt und wir in neuronalen Netzwerken ja sowieso keine Textdateien verwenden können, ist die Codierung egal, Sie können also irgendeine wählen:


Abb. 8 Wahl der Textcodierung für die Datei


Jetzt haben wir eine Datei mit der Erweiterung DBF, die die vom MetaTrader empfangenen Daten enthält, die für das neuronale Netzwerk wichtig sind.


Wie erzeugt und trainiert man ein neuronales Netzwerk in NeuroPro?

1) NeuroPro starten.

2) Projekt anlegen: Menü "Datei" > "Anlegen":

Abb. 9 Leeres Projekt angelegt 


3) Im Projektfenster "Datendatei öffnen" drücken und die DBF-Datei im aufgegangenen Dialogfenster öffnen:


Abb. 10 Die für eine Arbeit mit dem zukünftigen neuronalen Netzwerk geöffnete DBF-Datei


4) Im Projektfenster "Neues Netzwerk" anklicken. Im geöffneten Fenster sind zwei Registerkarten. Die Registerkarte "Eingaben und Ausgaben" füllen wir als erste.

Im Feld "Bar___0__" angeben, dass dies das Ausgabe-Neuron des Netzwerk ist. Die übrigen Felder "Bar___N__" werden zu Eingabe-Neuronen gemacht:


Abb. 11 Konfiguration der Eingaben und Ausgaben des neuronalen Netzwerks 


Wir können auch die für das Ausgabe-Neuron geforderte Exaktheit festlegen. In Forex ist das 1 Punkt, d.h. für uns: 0,0001.

5) Jetzt gehen wir zur Registerkarte "Netzwerkstruktur". Hier können die Anzahl der Zwischenebenen (mit Ausnahme der Eingabe- und Ausgabe-Ebenen) und die Anzahl der Neuronen in jeder Ebene angegeben werden. In unserem Lernbeispiel hier erzeugen wir 3 Ebenen von je 20 Neuronen:


Abb. 12 Konfiguration der Ebenen des neuronalen Netzwerks


6) Auf "Erzeugen" drücken und das Netzwerk ist einsatzbereit:

Abb. 13 Im Projekt erscheint nun ein neu angelegtes und eingerichtetes neuronales Netzwerk


7) Zum Menü "neuronales Netzwerk" gehen, dort auf "Testen", um herauszufinden, wie ein neues und nicht trainiertes Netzwerk mit der Herstellung von Kursprognosen zurechtkommt.

Wie Testergebnisse gezeigt haben, hat dieses nicht trainierte neuronale Netzwerk einen Kurs in weniger als 5% der Fälle mit der festgelegten Exaktheit vorhergesagt (mit einer Fehlerquelle von max. 1 Punkt). Der durchschnittliche Fehler der Kursprognose lagt bei ca. 10 Punkten:

Abb. 14 Statistik der Prognoseexaktheit eines nicht trainierten neuronalen Netzwerks


8) Wir müssen jetzt also unser Netzwerk auf Grundlage unserer Daten trainieren.

Abermals zum Projektfenster gehen und im Menü "neuronales Netzwerk" > "Training" drücken. Es erscheint eine Anzeige des Lernfortschritts. Diesen Vorgang bitte komplett abwarten:

Abb. 15 Anzeige des Lernfortschritts des neuronalen Netzwerks

9) Zurück zum Projektfenster gehen und dort auf "neuronales Netzwerk" > "Testen".

Das Netzwerk ist wesentlich besser geworden: seine Kursprognose war in 16% der Fälle richtig und der Fehlerdurchschnitt der Prognosen lag bei 4 Punkten:

Abb. 16 Statistik der Prognoseexaktheit eines trainierten neuronalen Netzwerks

Das Netzwerk hat ein paar Dinge gelernt. Wir können es also in MetaTrader5 übertragen.

Wie überträgt man ein neuronales Netzwerk von NeuroPro in MetaTrader 5?

NeuroPro kennt MetaTrader 5 nicht und kann auch kein neuronales Netzwerk direkt dorthin übertragen Ich habe einen halb-automatischen Weg gefunden, wie man ein neuronales Netzwerk in ein Fragment eines MQL5 Codes umwandeln kann.

Anders als viele andere neuronale Netzwerkprogramme, kann NeuroPro die Struktur des neuronalen Netzwerks in Aktion als Text anzeigen. Das ist eine Reihe von Formeln, die in aufeinanderfolgender Reihenfolge alle Datentransformationen vom Moment der Eingabe bis zum Moment, wenn es das Netzwerk verlässt, beschreiben. Diese Formeln umfassen jede Ebene, jedes Neuron, jede Verknüpfung mit bereits ersetzten (trainierten) Werten der Verknüpfungsgewichtung.

Für eine Ansicht, zum Menü "neuronales Netzwerk" > "Formulierung"gehen. In unserem Beispiel sehen die Formeln folgendermaßen aus:

Abb. 17 Formeln zur Bestimmung der Arbeit des trainierten neuronalen Netzwerks

Diese Reihe an Formeln kann in der Tat als ein Quellcode eines Programms betrachtet werden, das in einer abstrakten Programmiersprache geschrieben wurde. Was wir also tun müssen, ist diesen Code so zu verändern, dass seine Syntax zu MQL5 passt. Diese Änderungen können in jedem Text-Editor gemacht werden. Zur teilweisen Automatisierung dieses Vorgangs empfehle ich einen Editor, der eine Massenersetzung von Sätzen durchführen kann. Das kann sein in Windows: Word - seine Gratisversion 'Writer' (aus dem OpenOffice-Paket), Excel, 'Calc' und sogar Notepad.

Ich bin sicher, Sie könnten die Veränderung dieser Formeln in einen MQL5-Code selbst vornehmen, doch möchte ich Ihnen trotzdem meine Erfahrungen bei der Optimierung dieses Prozess nicht vorenthalten, damit Sie das noch schneller machen können.

In meinem Beispiel hier, werde ich Notepad aus Windows 7 verwenden.

1) Also wir haben jetzt ein offenes Projekt in NeuroPro mit dem trainierten neuronalen Netzwerk. Auf "neuronales Netzwerk" > "Formulierung" gehen, wo sich ein Fenster mit den Formeln geöffnet hat (vgl. Screenshot oben).

2) Den Inhalt dieses Fensters in: Menü "Datei" > "Speichern als" speichern.

3) Diese Datei nun in Notepad öffnen.

4) Die Ersetzungsfunktion für Sätze aufrufen: Menü "Bearbeiten" > "Ersetzen".

Liste der Ersetzungen, die gemacht werden sollen:

 Was soll ersetzt werdenWomit soll es ersetzt werden
Kommentar
___[
dreifacher Unterstrich
__
]
zweifacher Unterstrich
--
- -
zwei Minuszeichen (Abziehen eines Negativwerts in den Formeln) werden mit einem Leerzeichen getrennt, da ein Doppel-Minuszeichen in MQL (wie auch in anderen, C-ähnlichen Sprachen) eine doppelte Bedeutung haben kann, was zu einem Kompilierungsfehler führen kann
 SigmoidSigmoid
Funktionsnamen in Latein übersetzen (wohlgemerkt, das Programm ist in Russisch. Es ist nicht notwendig dies zu tun, da MetaEditor auch Kyrillisch unterstützt.)
 SyndromSyndrome
Variablennamen in Latein übersetzen (ebenfalls nicht notwendig, da MetaEditor auch Kyrillisch unterstützt).

Abb. 18 Dreifache Unterstriche durch eckige Klammern ersetzen

Mit "Alles ersetzen" die Ersetzungen durchführen.

Jetzt verstehen Sie, warum ich die Kursfelder "BAR___N__" genannt habe, damit ich ihre Unterstrich rasch durch eckige Klammern ersetzen kann, also alle Netzwerkeingaben als ein Array abbilden kann.

Ein Array zu deklarieren und es mit einer Serie von Kursdaten zu füllen ist leichter als dies bei eine Anzahl von einzelnen Variablen zu machen.


5) Wie ich vorhin schon erwähnt habe, muss die Aufzählung aller Eingaben und Ausgaben für die Deklarierung eines Arrays verändert werden:

Vor der Überarbeitung
Nach der Überarbeitung

Datenbankfelder (anfängliche Symptome):

       BAR[1]

       BAR[2]

       BAR[3]

       BAR[4]

       BAR[5]

       BAR[6]

       BAR[7]

       BAR[8]

       BAR[9]

       BAR[10]

       BAR[11]

       BAR[12]

       BAR[13]

       BAR[14]

       BAR[15]

       BAR[16]

       BAR[17]

       BAR[18]

       BAR[19]

       BAR[20]

       BAR[21]

       BAR[22]

       BAR[23]

       BAR[24]

 

Datenbankfelder (endgültige Syndrome):

       BAR[0]

double BAR [25];


6) Die Funktionen der Neuronaktivierung müssen wie MQL5 Programmfunktionen aussehen:

Vor der Überarbeitung
Nach der Überarbeitung

Sigmoid1(A)=A/(0.1+|A|)

Sigmoid2(A)=A/(0.1+|A|)

Sigmoid3(A)=A/(0.1+|A|)

double Sigmoid1 (double A)
{
  return A/(0.1 + MathAbs(A));
}

double Sigmoid2 (double A)
{
  return A/(0.1 + MathAbs(A));
}

double Sigmoid3 (double A)
{
  return A/(0.1 + MathAbs(A));
}

7) Gemäß den MQL5 Regeln muss jede Formel mit einem Strichpunkt enden, Kommentare müssen korrekt geschrieben (oder gelöscht) werden und alle initialisierten Variablen müssen mit der Deklarierung des Typs ergänzt werden.

In unserem Fall ist der Typ nur nicht für die Neuronennamen in den Zwischenebenen deklariert worden. Dies tun wir abermals mit Hilfe der "Text-Massenersetzung", anstatt das Word "Doppel" 60 Mal eintippen zu müssen. Wir müssen den Anfang eines Strings mit einem Neuronennamen markieren (der Rand zu Beginn des Strings muss ebenfalls markiert werden, da Neuronennamen auch im rechten Teil der Formeln verwendet werden und das Wort "Doppel" hier nicht eingefügt werden muss):

Abb. 19 Markieren des Texts für Ersetzen

Nachdem der markierte Teil des Texts kopiert ist, diesen in das Textersetzungs-Dialogfenster einfügen, damit er mit demselben Text und dem beigefügten Wort "Doppel" ergänzt wird:

Abb. 20 Den Variablen den Typnamen hinzufügen


Nicht vergessen auf "Alle ersetzen" zu drücken.


8) NeuroPro hat ein kleines Problem. Wenn Sie in das neuronale Netzwerk einen konstanten Wert eingeben, enthält die Normalisierungsformel dieser Eingabe im Textformat 'Division durch Null'. Und in unserem Fall ist "BAR___1__" so eine Eingabe. Sie enthält immer Nullen, da sie ja der Referenzpunkt zur Normalisierung unserer Bars ist.

Idealerweise sollte "BAR___1__" nicht in das neuronale Netzwerk eingegeben werden, da sich Eingaben mit konstanten Werten ja sowieso nicht auf eine Prognose auswirken. Wird dieser Wert jedoch eingegeben, muss die Formel, die NeuroPro liefert, angepasst werden. Um Fehlermeldungen vom Compiler zu vermeiden, muss "BAR___1__" durch den Wert ersetzt werden, der hier permanent eingegeben ist. In unserem Fall also Null:

Vor der Überarbeitung
Nach der Überarbeitung
BAR[1]=(BAR[1]-0)/0;
BAR[1]=0;


9) Doch es gibt noch ein zweites Problem, allerdings ziemlich unbedeutend: (der Entwickler von NeuroPro hat nicht daran gedacht, dass eine Textbeschreibung eines neuronalen Netzwerks als ein Programmcode verwendet werden könnte und es daher nicht sorgfältig überprüft).

In der allerletzten Formel befindet sich ganz am Ende eine extra schließende Klammer. Kein wirklich großes Problem, doch der MetaEditor Compiler ist dennoch verwirrt. Er wird nicht auf die extra Klammer in diesem String hinweisen, doch übernimmt auch keine runde Klammer in einem anderen Teil des Programms. Vergessen Sie das bitte nicht, damit Sie es beheben können, wenn Sie darauf stoßen sollten.

Vor der Überarbeitung
Nach der Überarbeitung
BAR[0]=((BAR[0]*0.0180000001564622)+0.000599999912083149)/2);
BAR[0]=((BAR[0]*0.0180000001564622)+0.000599999912083149)/2;

Die in diesem Bereich beschriebenen Abläufe brauchen nur wenige Minuten, wenn sie richtig ausgeführt werden. Man muss diese Liste also nicht wortwörtlich einhalten. Bei der anschließenden Kompilierung wird MetaEditor die falschen Teile des Codes als Fehler ausweisen.

Nachdem wir alle Formeln auf das MQL5-Format gebracht haben, müssen wir abschließend den daraus entstehenden Code nur noch von Notepad auf den MetaEditor übertragen und den Rest des für den Expert notwendigen Codes hinzufügen. Wenn Sie regelmäßig mit in NeuroPro erzeugten neuronalen Netzwerken arbeiten, ist diese Etappe ganz klar ein Kinderspiel. Sie ersetzen einfach das vorherige neuronale Netzwerk im bestehenden Expert mit einem neuen MQL5-Code des neuronalen Netzwerks aus dem Notepad. Das dauert echt nur eine Minute.

Der endgültige Code des Experts, der vollkommen für den Einsatz in MetaTrader 5 bereit ist, sieht so aus (Sie können diesen Code auch von der Anwendung für diesen Beitrag herunterladen):

input double    Lots = 0.1;        // Deal volume
input double    MinPrognosis = 0;  // Open deals with a forecast more promising than the current one
//+------------------------------------------------------------------+
const int inputlen=24; // Number of past bars analyzed by the trading strategy
//+------------------------------------------------------------------+
double Sigmoid1(double A)
  {
   return A/(0.1 + MathAbs(A));
  }
//+------------------------------------------------------------------+
double Sigmoid2(double A)
  {
   return A/(0.1 + MathAbs(A));
  }
//+------------------------------------------------------------------+
double Sigmoid3(double A)
  {
   return A/(0.1 + MathAbs(A));
  }
//+------------------------------------------------------------------+
double CalcNeuroNet()
  {
//--- get current quotes for neural network
   MqlRates rates[],rate;
   CopyRates(Symbol(),Period(),0,inputlen+1,rates);
   ArraySetAsSeries(rates,true);

//--- neural network inputs
   double BAR[512]; // 512 - maximum permissible number of fields in the DBF format

//--- fill the array of the neural network input data
//--- closing price of the 1st bar will be the zero level for normalization of others
   double zlevel=rates[1].close; 

   for(int bar=0; bar<=inputlen; bar++)
     {
      rate=rates[bar];
      BAR[bar]=rate.close-zlevel;
     }

//==============================================
// Calculate the neural network with NeuroPro formulas
//==============================================

//--- preprocessing of the data base input fields for training the network:
   BAR[1]=0;//(BAR[1]-0)/0;
   BAR[2]=(BAR[2]- -0.0003)/0.009;
   BAR[3]=(BAR[3]-4.999992E-5)/0.01045;
   BAR[4]=(BAR[4]-0.0011)/0.011;
   BAR[5]=(BAR[5]-0.00285)/0.01335;
   BAR[6]=(BAR[6]-0.004050001)/0.01625;
   BAR[7]=(BAR[7]-0.00495)/0.01695;
   BAR[8]=(BAR[8]-0.0049)/0.0172;
   BAR[9]=(BAR[9]-0.0046)/0.0171;
   BAR[10]=(BAR[10]-0.00395)/0.01755;
   BAR[11]=(BAR[11]-0.0037)/0.0184;
   BAR[12]=(BAR[12]-0.0034)/0.0188;
   BAR[13]=(BAR[13]-0.0029)/0.0194;
   BAR[14]=(BAR[14]-0.002499999)/0.0196;
   BAR[15]=(BAR[15]-0.00245)/0.01935;
   BAR[16]=(BAR[16]-0.00275)/0.01925;
   BAR[17]=(BAR[17]-0.0028)/0.0194;
   BAR[18]=(BAR[18]-0.002950001)/0.01965;
   BAR[19]=(BAR[19]-0.002649999)/0.01965;
   BAR[20]=(BAR[20]-0.002699999)/0.0197;
   BAR[21]=(BAR[21]-0.00275)/0.01945;
   BAR[22]=(BAR[22]-0.00225)/0.01955;
   BAR[23]=(BAR[23]-0.0019)/0.0195;
   BAR[24]=(BAR[24]-0.00225)/0.01935;

//--- syndromes of the 1st level:
   double Syndrome1_1=Sigmoid1( 0.07165167*BAR[1]-0.08914512*BAR[2]+0.160242*BAR[3]-0.1136391*BAR[4]+0.01358515*BAR[5]+0.3755009*BAR[6]-0.1433693*BAR[7]+0.224411*BAR[8]+0.03298632*BAR[9]-0.2551045*BAR[10]-0.1418581*BAR[11]+0.007130164*BAR[12]-0.08727393*BAR[13]-0.2567087*BAR[14]+0.1118081*BAR[15]+0.73848*BAR[16]+0.05880548*BAR[17]-0.1544689*BAR[18]+0.192913*BAR[19]-0.1743894*BAR[20]-0.2184512*BAR[21]-0.2290305*BAR[22]+0.3946579*BAR[23]-0.02947071*BAR[24]-0.08091708 );
   double Syndrome1_2=Sigmoid1( -0.08248464*BAR[1]+0.3076621*BAR[2]-0.0500868*BAR[3]-0.6526818*BAR[4]+0.04266862*BAR[5]+0.581119*BAR[6]-0.0356447*BAR[7]+0.0292943*BAR[8]-0.3660156*BAR[9]-0.3244759*BAR[10]+0.05519342*BAR[11]+0.2419113*BAR[12]-0.2178954*BAR[13]+0.4037299*BAR[14]-0.1593139*BAR[15]+0.3567515*BAR[16]+0.08094382*BAR[17]-0.01788837*BAR[18]-0.379636*BAR[19]+0.6658992*BAR[20]-0.1899142*BAR[21]+0.02259956*BAR[22]+0.767949*BAR[23]-0.5380562*BAR[24]-0.06307755 );
   double Syndrome1_3=Sigmoid1( -0.08426282*BAR[1]-0.172721*BAR[2]+0.1749717*BAR[3]-0.07916483*BAR[4]-0.0523758*BAR[5]+0.1935233*BAR[6]+0.01627235*BAR[7]+0.1254414*BAR[8]-0.1101555*BAR[9]-0.02285305*BAR[10]-0.14389*BAR[11]+0.1788775*BAR[12]-0.007144043*BAR[13]+0.1925385*BAR[14]-0.08001231*BAR[15]-0.2021703*BAR[16]+0.08694438*BAR[17]+0.3090158*BAR[18]-0.3330302*BAR[19]+0.2519112*BAR[20]-0.2170611*BAR[21]-0.2216277*BAR[22]+0.09618518*BAR[23]+0.049888*BAR[24]-0.06465426 );
   double Syndrome1_4=Sigmoid1( 0.02806905*BAR[1]+0.07787746*BAR[2]+0.1972721*BAR[3]-0.247464*BAR[4]-0.008635854*BAR[5]-0.1975036*BAR[6]-0.0652089*BAR[7]-0.1276176*BAR[8]-0.3386112*BAR[9]-0.103951*BAR[10]+0.08352495*BAR[11]-0.1821419*BAR[12]-0.05604611*BAR[13]-0.05922695*BAR[14]-0.1670811*BAR[15]+0.002476109*BAR[16]-0.03657883*BAR[17]-0.09295338*BAR[18]+0.2500353*BAR[19]-0.03980102*BAR[20]+0.1059941*BAR[21]-0.4037244*BAR[22]-0.08735184*BAR[23]+0.1546644*BAR[24]+0.1966186 );
   double Syndrome1_5=Sigmoid1( 0.03832016*BAR[1]-0.09065858*BAR[2]+0.2356484*BAR[3]-0.2436682*BAR[4]+0.09812659*BAR[5]+0.09220826*BAR[6]+0.434221*BAR[7]-0.005478878*BAR[8]-0.1657191*BAR[9]-0.2605299*BAR[10]+0.3523667*BAR[11]+0.3595579*BAR[12]+0.3402678*BAR[13]-0.3346431*BAR[14]+0.1215327*BAR[15]-0.1869196*BAR[16]+0.07256371*BAR[17]-0.09229603*BAR[18]-0.09961994*BAR[19]+0.2491707*BAR[20]+0.3703756*BAR[21]+0.1369175*BAR[22]+0.0560869*BAR[23]-0.007567503*BAR[24]-0.01722363 );
   double Syndrome1_6=Sigmoid1( -0.06897662*BAR[1]-0.4182717*BAR[2]+0.200378*BAR[3]-0.4152234*BAR[4]-0.2081593*BAR[5]+0.3120443*BAR[6]-0.1582431*BAR[7]+0.1900958*BAR[8]+0.002503331*BAR[9]+0.02297609*BAR[10]+0.03145982*BAR[11]+0.1816629*BAR[12]+0.1854629*BAR[13]-0.1660063*BAR[14]+0.3112128*BAR[15]-0.4799304*BAR[16]-0.100519*BAR[17]-0.1523588*BAR[18]+0.07141552*BAR[19]+0.2336634*BAR[20]+0.01279082*BAR[21]-0.2179644*BAR[22]+0.4898897*BAR[23]-0.1818153*BAR[24]-0.1783737 );
   double Syndrome1_7=Sigmoid1( -0.003986856*BAR[1]-0.3409385*BAR[2]-0.3122248*BAR[3]+0.5656545*BAR[4]+0.07564658*BAR[5]+0.07956024*BAR[6]+0.1820322*BAR[7]-0.05595554*BAR[8]+0.1027963*BAR[9]+0.2596273*BAR[10]+0.1156801*BAR[11]+0.04490443*BAR[12]+0.1426405*BAR[13]+0.06763341*BAR[14]-0.03249188*BAR[15]-0.1912978*BAR[16]-0.2003477*BAR[17]-0.2413947*BAR[18]+0.3188735*BAR[19]-0.2899658*BAR[20]+0.06846272*BAR[21]+0.08726751*BAR[22]-0.2134383*BAR[23]-0.436768*BAR[24]+0.08075105 );
   double Syndrome1_8=Sigmoid1( 0.05597013*BAR[1]+0.3358757*BAR[2]+0.1041476*BAR[3]-0.334706*BAR[4]-0.07069201*BAR[5]+0.06152828*BAR[6]+0.1577689*BAR[7]+0.1737777*BAR[8]-0.7711719*BAR[9]-0.2970988*BAR[10]+0.06691784*BAR[11]+0.0528774*BAR[12]+0.06260363*BAR[13]+0.2449201*BAR[14]-0.3098814*BAR[15]+0.06859511*BAR[16]+0.1355444*BAR[17]-0.15844*BAR[18]+0.2791151*BAR[19]-0.412524*BAR[20]+0.228981*BAR[21]-0.4042732*BAR[22]+0.197847*BAR[23]+0.477078*BAR[24]-0.2478239 );
   double Syndrome1_9=Sigmoid1( 0.02181781*BAR[1]-0.1042198*BAR[2]-0.02412975*BAR[3]+0.1485616*BAR[4]+0.07645424*BAR[5]-0.02779776*BAR[6]-0.1519209*BAR[7]-0.1878287*BAR[8]+0.1637603*BAR[9]+0.248636*BAR[10]+0.2032469*BAR[11]-0.03869069*BAR[12]+0.02014448*BAR[13]-0.2079489*BAR[14]+0.08846121*BAR[15]+0.1025348*BAR[16]+0.01593455*BAR[17]-0.4964754*BAR[18]+0.1635097*BAR[19]-0.04561989*BAR[20]-0.0662128*BAR[21]-0.2423395*BAR[22]+0.2898602*BAR[23]+0.03824728*BAR[24]-0.07471437 );
   double Syndrome1_10=Sigmoid1( -0.02918137*BAR[1]+0.06085975*BAR[2]-0.3056079*BAR[3]-0.5144019*BAR[4]-0.1966296*BAR[5]+0.04413594*BAR[6]+0.03249943*BAR[7]+0.08405613*BAR[8]-0.08797813*BAR[9]+0.06621616*BAR[10]-0.2226632*BAR[11]-0.1000158*BAR[12]+0.0106046*BAR[13]-0.1383344*BAR[14]+0.05141285*BAR[15]-0.1009147*BAR[16]-0.1503479*BAR[17]+0.2877283*BAR[18]-0.2209365*BAR[19]+0.1310906*BAR[20]-0.1188305*BAR[21]-0.002668453*BAR[22]+0.1106755*BAR[23]+0.3884961*BAR[24]+0.0006983803 );
   double Syndrome1_11=Sigmoid1( -0.04872056*BAR[1]-0.5066758*BAR[2]+0.08158222*BAR[3]+0.2647052*BAR[4]+0.3632542*BAR[5]+0.4538754*BAR[6]-0.1346472*BAR[7]+0.16742*BAR[8]+0.2974689*BAR[9]+0.3446769*BAR[10]-0.2784187*BAR[11]+0.2461497*BAR[12]-0.166853*BAR[13]-0.4296628*BAR[14]+0.7343794*BAR[15]+0.2154892*BAR[16]-0.4086125*BAR[17]-0.6446049*BAR[18]-0.5614476*BAR[19]-0.593914*BAR[20]+0.5039462*BAR[21]+0.113933*BAR[22]+0.3599374*BAR[23]-0.5517*BAR[24]+0.1249064 );
   double Syndrome1_12=Sigmoid1( -0.09035824*BAR[1]-0.2619464*BAR[2]+0.5151641*BAR[3]+0.08415102*BAR[4]+0.007849894*BAR[5]-0.3585253*BAR[6]-0.3458216*BAR[7]-0.006490127*BAR[8]+0.1933572*BAR[9]+0.1655464*BAR[10]-0.2591909*BAR[11]+0.2810482*BAR[12]-0.3552095*BAR[13]+0.1032239*BAR[14]-0.2380441*BAR[15]-0.6082169*BAR[16]-0.3652177*BAR[17]+0.4065064*BAR[18]-0.1538232*BAR[19]-0.03332642*BAR[20]+0.06235149*BAR[21]-0.08935639*BAR[22]-0.2274701*BAR[23]+0.2350571*BAR[24]-0.1009272 );
   double Syndrome1_13=Sigmoid1( -0.05370994*BAR[1]+0.2999545*BAR[2]-0.2855853*BAR[3]+0.1123754*BAR[4]+0.2561198*BAR[5]-0.2846766*BAR[6]+0.008345681*BAR[7]+0.1896221*BAR[8]-0.1973753*BAR[9]+0.3510076*BAR[10]+0.4492245*BAR[11]-0.09004608*BAR[12]+0.002758034*BAR[13]+0.03157447*BAR[14]+0.02175433*BAR[15]-0.399723*BAR[16]-0.2736914*BAR[17]+0.1198452*BAR[18]+0.2808644*BAR[19]-0.06968442*BAR[20]-0.5771574*BAR[21]+0.3748633*BAR[22]-0.2721373*BAR[23]-0.2329663*BAR[24]+0.07683773 );
   double Syndrome1_14=Sigmoid1( 0.094418*BAR[1]+0.2155959*BAR[2]-0.4787674*BAR[3]+0.3605456*BAR[4]+0.06799955*BAR[5]+0.607367*BAR[6]-0.3518007*BAR[7]+0.1633829*BAR[8]+0.3040094*BAR[9]+0.3707297*BAR[10]+0.02556368*BAR[11]-0.0885786*BAR[12]-0.3713907*BAR[13]-0.2014098*BAR[14]-0.289242*BAR[15]-0.09950806*BAR[16]-0.5361071*BAR[17]+0.4154459*BAR[18]+0.02827369*BAR[19]-0.04972957*BAR[20]-0.1700879*BAR[21]+0.2973098*BAR[22]-0.2097459*BAR[23]-0.0422597*BAR[24]+0.2318914 );
   double Syndrome1_15=Sigmoid1( 0.02161242*BAR[1]+0.5484816*BAR[2]+0.002152426*BAR[3]-0.3017516*BAR[4]+0.02010602*BAR[5]-0.8008425*BAR[6]-0.2985114*BAR[7]+0.5151479*BAR[8]+0.1572166*BAR[9]-0.04494689*BAR[10]+0.2529401*BAR[11]-0.02046412*BAR[12]-0.05892481*BAR[13]-0.1359019*BAR[14]-0.2005993*BAR[15]+0.03077302*BAR[16]+0.745619*BAR[17]-0.4197147*BAR[18]-0.1354882*BAR[19]-0.6034228*BAR[20]-0.04950687*BAR[21]-0.1093793*BAR[22]-0.46851*BAR[23]+0.2340346*BAR[24]-0.1910115 );
   double Syndrome1_16=Sigmoid1( 0.06201033*BAR[1]+0.2311719*BAR[2]-0.6587076*BAR[3]-0.1937433*BAR[4]-0.3063492*BAR[5]+0.0458253*BAR[6]+0.2621455*BAR[7]-0.3292437*BAR[8]-0.07124191*BAR[9]+0.03962434*BAR[10]-0.03539502*BAR[11]+0.1602975*BAR[12]+0.1252141*BAR[13]-0.1939677*BAR[14]-0.3524359*BAR[15]-0.02675135*BAR[16]-0.1550312*BAR[17]+0.2015329*BAR[18]-0.1383009*BAR[19]+0.3079963*BAR[20]+0.06971535*BAR[21]-0.2415089*BAR[22]-0.03791533*BAR[23]+0.01494107*BAR[24]+0.01395546 );
   double Syndrome1_17=Sigmoid1( -0.03211073*BAR[1]-0.2057187*BAR[2]-0.2208917*BAR[3]+0.1034868*BAR[4]+0.003785761*BAR[5]-0.1510143*BAR[6]-0.04637882*BAR[7]-0.01963908*BAR[8]-0.3622932*BAR[9]+0.03135398*BAR[10]-0.1296021*BAR[11]-0.2571803*BAR[12]+0.02485986*BAR[13]-0.05831699*BAR[14]+0.2441404*BAR[15]+0.4313999*BAR[16]-0.05117986*BAR[17]-0.06832605*BAR[18]-0.01433043*BAR[19]-0.3331767*BAR[20]-0.09270683*BAR[21]+0.1077102*BAR[22]+0.0517161*BAR[23]+0.1463209*BAR[24]+0.08033083 );
   double Syndrome1_18=Sigmoid1( -0.01044874*BAR[1]+0.8255618*BAR[2]-0.3581862*BAR[3]+0.2379437*BAR[4]-0.05247816*BAR[5]+0.3858318*BAR[6]-0.04216846*BAR[7]+0.2305764*BAR[8]-0.2754549*BAR[9]+0.1255125*BAR[10]-0.1954638*BAR[11]+0.04934186*BAR[12]-0.08713531*BAR[13]+0.08193728*BAR[14]-0.01578137*BAR[15]+0.04301662*BAR[16]-0.01941852*BAR[17]+0.0321704*BAR[18]-0.4490997*BAR[19]-0.2165072*BAR[20]+0.5094138*BAR[21]-0.08077756*BAR[22]-0.1167052*BAR[23]+0.008337143*BAR[24]-0.1847742 );
   double Syndrome1_19=Sigmoid1( 0.07863438*BAR[1]+0.6541001*BAR[2]-0.0287532*BAR[3]-0.07992863*BAR[4]-0.1936443*BAR[5]+0.2021953*BAR[6]+0.5814793*BAR[7]+0.1076662*BAR[8]-0.2505759*BAR[9]-0.1958519*BAR[10]+0.2982949*BAR[11]-0.130183*BAR[12]-0.2418064*BAR[13]-0.03213368*BAR[14]-0.1050228*BAR[15]-0.04116086*BAR[16]+0.1059578*BAR[17]-0.09407587*BAR[18]+0.2511382*BAR[19]+0.03090675*BAR[20]-0.2050715*BAR[21]+0.07968493*BAR[22]-0.1085312*BAR[23]-0.3073632*BAR[24]+0.1479857 );
   double Syndrome1_20=Sigmoid1( 0.01779699*BAR[1]+0.1517631*BAR[2]+0.1832252*BAR[3]+0.4329565*BAR[4]-0.1528609*BAR[5]-0.2424133*BAR[6]+0.1942621*BAR[7]+0.1390828*BAR[8]-0.3387062*BAR[9]+0.3891163*BAR[10]+0.3485644*BAR[11]+0.06489421*BAR[12]-0.01458877*BAR[13]-0.1127466*BAR[14]+0.1122861*BAR[15]-0.1973242*BAR[16]+0.4340822*BAR[17]-0.633949*BAR[18]+0.1276167*BAR[19]+0.2476585*BAR[20]-0.4445719*BAR[21]+0.6248969*BAR[22]-0.2169943*BAR[23]-0.501359*BAR[24]-0.1358235 );

//--- syndromes of the 2nd level:
   double Syndrome2_1=Sigmoid2( 0.2332734*Syndrome1_1-0.2002641*Syndrome1_2-0.03174414*Syndrome1_3-0.3868614*Syndrome1_4-0.1933812*Syndrome1_5-0.2366997*Syndrome1_6+0.3920829*Syndrome1_7+0.1015497*Syndrome1_8-0.1333193*Syndrome1_9+0.05584235*Syndrome1_10-0.2983295*Syndrome1_11+0.1034668*Syndrome1_12-0.4040487*Syndrome1_13-0.2103508*Syndrome1_14-0.2480657*Syndrome1_15-0.1906435*Syndrome1_16+0.2692898*Syndrome1_17+0.2760854*Syndrome1_18-0.1738693*Syndrome1_19-0.1861307*Syndrome1_20-0.07152162 );
   double Syndrome2_2=Sigmoid2( -0.1242675*Syndrome1_1+0.05587832*Syndrome1_2+0.1567961*Syndrome1_3+0.1077346*Syndrome1_4-0.2112047*Syndrome1_5+0.04008683*Syndrome1_6-0.1716478*Syndrome1_7+0.3083204*Syndrome1_8-0.1864694*Syndrome1_9+0.08867304*Syndrome1_10-0.06801239*Syndrome1_11-0.1810985*Syndrome1_12-0.05133555*Syndrome1_13+0.2981661*Syndrome1_14-0.01543425*Syndrome1_15-0.1859617*Syndrome1_16+0.027973*Syndrome1_17-0.1715439*Syndrome1_18-0.1249511*Syndrome1_19+0.5925598*Syndrome1_20-0.279602 );
   double Syndrome2_3=Sigmoid2( -0.4745722*Syndrome1_1-0.1248492*Syndrome1_2-0.1128288*Syndrome1_3+0.1485692*Syndrome1_4-0.3948999*Syndrome1_5+0.2633227*Syndrome1_6-0.2046695*Syndrome1_7-0.03632757*Syndrome1_8+0.259578*Syndrome1_9-0.07442582*Syndrome1_10+0.06552354*Syndrome1_11-0.2452848*Syndrome1_12-0.1599011*Syndrome1_13+0.1749917*Syndrome1_14-0.07113215*Syndrome1_15-0.1524421*Syndrome1_16+0.3606906*Syndrome1_17+0.3524929*Syndrome1_18+0.1315838*Syndrome1_19+0.1981817*Syndrome1_20+0.0126604 );
   double Syndrome2_4=Sigmoid2( -0.3605324*Syndrome1_1+0.2803221*Syndrome1_2+0.07412126*Syndrome1_3+0.2101911*Syndrome1_4-0.1933928*Syndrome1_5-0.2068641*Syndrome1_6+0.1302721*Syndrome1_7+0.04962961*Syndrome1_8+0.2879501*Syndrome1_9-0.04214102*Syndrome1_10-0.02194729*Syndrome1_11-0.0501424*Syndrome1_12+0.007969459*Syndrome1_13+0.1151657*Syndrome1_14+0.04063402*Syndrome1_15+0.1461606*Syndrome1_16-0.07482237*Syndrome1_17-0.3319329*Syndrome1_18+0.2494595*Syndrome1_19-0.09345333*Syndrome1_20-0.1831799 );
   double Syndrome2_5=Sigmoid2( -0.03081687*Syndrome1_1-0.419345*Syndrome1_2-0.01301429*Syndrome1_3+0.008855551*Syndrome1_4+0.2869771*Syndrome1_5+0.06881366*Syndrome1_6-0.1612982*Syndrome1_7-0.491662*Syndrome1_8+0.04266098*Syndrome1_9-0.7546657*Syndrome1_10+0.0472151*Syndrome1_11-0.5099863*Syndrome1_12+0.1196823*Syndrome1_13+0.2611973*Syndrome1_14-0.0241531*Syndrome1_15-0.5843646*Syndrome1_16+0.08374172*Syndrome1_17+0.041931*Syndrome1_18-0.181801*Syndrome1_19+0.6314354*Syndrome1_20+0.2967799 );
   double Syndrome2_6=Sigmoid2( 0.2783457*Syndrome1_1+0.05858535*Syndrome1_2+0.03348543*Syndrome1_3-0.09202126*Syndrome1_4+0.09466362*Syndrome1_5-0.01946918*Syndrome1_6-0.008507644*Syndrome1_7+0.1967683*Syndrome1_8-0.1593684*Syndrome1_9+0.2202749*Syndrome1_10-0.2754305*Syndrome1_11-0.08108314*Syndrome1_12+0.1606592*Syndrome1_13+0.03723634*Syndrome1_14+0.3494412*Syndrome1_15-0.139782*Syndrome1_16+0.03641316*Syndrome1_17-0.1216527*Syndrome1_18-0.2194063*Syndrome1_19+0.3015033*Syndrome1_20-0.1307777 );
   double Syndrome2_7=Sigmoid2( -0.1451617*Syndrome1_1-0.1851998*Syndrome1_2-0.2149245*Syndrome1_3-0.05804037*Syndrome1_4-0.03970402*Syndrome1_5+2.506166E-6*Syndrome1_6+0.223578*Syndrome1_7-0.1718342*Syndrome1_8+0.001228896*Syndrome1_9-0.03911417*Syndrome1_10+0.3167912*Syndrome1_11+0.2213001*Syndrome1_12-0.3518667*Syndrome1_13-0.6146168*Syndrome1_14-0.1061097*Syndrome1_15-0.3044312*Syndrome1_16-0.04269538*Syndrome1_17-0.1753355*Syndrome1_18+0.1989161*Syndrome1_19-0.3667244*Syndrome1_20+0.2514035 );
   double Syndrome2_8=Sigmoid2( -0.1430153*Syndrome1_1-Syndrome1_2+0.02704678*Syndrome1_3+0.09941091*Syndrome1_4+0.07057924*Syndrome1_5-0.3370984*Syndrome1_6+0.1565579*Syndrome1_7-0.6226992*Syndrome1_8-0.4750121*Syndrome1_9+0.0914355*Syndrome1_10+0.7518402*Syndrome1_11-0.3350138*Syndrome1_12-0.3099903*Syndrome1_13+0.01266479*Syndrome1_14-0.7965527*Syndrome1_15-0.1753905*Syndrome1_16-0.1435609*Syndrome1_17+0.1683903*Syndrome1_18+0.1800467*Syndrome1_19+0.02699256*Syndrome1_20+0.3138063 );
   double Syndrome2_9=Sigmoid2( -0.2611458*Syndrome1_1-0.03994129*Syndrome1_2-0.2299157*Syndrome1_3+0.3549923*Syndrome1_4-0.001759748*Syndrome1_5-0.1117837*Syndrome1_6+0.03037107*Syndrome1_7+0.2023677*Syndrome1_8+0.2628252*Syndrome1_9+0.09683131*Syndrome1_10+0.2576693*Syndrome1_11-0.06357097*Syndrome1_12-0.2162403*Syndrome1_13-0.2190126*Syndrome1_14-0.1675369*Syndrome1_15-0.2458067*Syndrome1_16-0.06660707*Syndrome1_17-0.2096998*Syndrome1_18+0.2432118*Syndrome1_19+0.06210691*Syndrome1_20+0.1555794 );
   double Syndrome2_10=Sigmoid2( 0.1120118*Syndrome1_1-0.09789048*Syndrome1_2-0.1146162*Syndrome1_3-0.02268722*Syndrome1_4-0.4754501*Syndrome1_5+0.1567527*Syndrome1_6+0.4281512*Syndrome1_7+0.1428995*Syndrome1_8+0.4317052*Syndrome1_9-0.1987304*Syndrome1_10-0.3471439*Syndrome1_11-0.2485701*Syndrome1_12+0.2200699*Syndrome1_13-0.1804247*Syndrome1_14+0.5553524*Syndrome1_15+0.004284344*Syndrome1_16-0.5408193*Syndrome1_17-0.2304406*Syndrome1_18+0.2462995*Syndrome1_19+0.1687378*Syndrome1_20+0.480715 );
   double Syndrome2_11=Sigmoid2( 0.2892572*Syndrome1_1+0.2819389*Syndrome1_2-0.2116477*Syndrome1_3-0.1031269*Syndrome1_4-0.2198152*Syndrome1_5-0.2882532*Syndrome1_6-0.7462316*Syndrome1_7+0.7820893*Syndrome1_8-0.05574411*Syndrome1_9-0.1144354*Syndrome1_10-0.1073154*Syndrome1_11+0.5092962*Syndrome1_12-0.07017706*Syndrome1_13-0.5550667*Syndrome1_14-0.5170746*Syndrome1_15-0.1299864*Syndrome1_16+0.03325708*Syndrome1_17-0.5107772*Syndrome1_18+0.04024922*Syndrome1_19+0.1836878*Syndrome1_20+0.0346345 );
   double Syndrome2_12=Sigmoid2( -0.10614*Syndrome1_1+0.06027444*Syndrome1_2+0.08108542*Syndrome1_3-0.1568731*Syndrome1_4+0.1509192*Syndrome1_5-0.1630516*Syndrome1_6+0.01426157*Syndrome1_7+0.02186926*Syndrome1_8+0.1099893*Syndrome1_9-0.02269597*Syndrome1_10-0.04576464*Syndrome1_11-0.161096*Syndrome1_12-0.1901706*Syndrome1_13-0.02513908*Syndrome1_14+0.1317106*Syndrome1_15-0.06866668*Syndrome1_16+0.1083753*Syndrome1_17+0.1449683*Syndrome1_18+0.006118122*Syndrome1_19+0.1255394*Syndrome1_20-0.3822223 );
   double Syndrome2_13=Sigmoid2( -0.01638931*Syndrome1_1+0.1172011*Syndrome1_2-0.1022018*Syndrome1_3+0.1098846*Syndrome1_4+0.3456185*Syndrome1_5-0.276273*Syndrome1_6-0.1697723*Syndrome1_7-0.1394644*Syndrome1_8+0.0530486*Syndrome1_9+0.04139024*Syndrome1_10-0.02131393*Syndrome1_11+0.1144992*Syndrome1_12-0.1791101*Syndrome1_13+0.124498*Syndrome1_14+0.2169005*Syndrome1_15+0.06764794*Syndrome1_16+0.3542189*Syndrome1_17+0.0647957*Syndrome1_18+0.01778502*Syndrome1_19-0.0183728*Syndrome1_20-0.09863564 );
   double Syndrome2_14=Sigmoid2( 0.1046498*Syndrome1_1+0.1199886*Syndrome1_2-0.3787079*Syndrome1_3+0.568437*Syndrome1_4-0.09216721*Syndrome1_5-0.07998162*Syndrome1_6-0.1422648*Syndrome1_7-0.220407*Syndrome1_8+0.00417607*Syndrome1_9+0.2042087*Syndrome1_10+0.2614584*Syndrome1_11+0.04491196*Syndrome1_12+0.1860093*Syndrome1_13-0.1642074*Syndrome1_14+0.3918036*Syndrome1_15+0.05427575*Syndrome1_16-0.0002294437*Syndrome1_17+0.008295977*Syndrome1_18-0.2818146*Syndrome1_19-0.3877438*Syndrome1_20+0.03536745 );
   double Syndrome2_15=Sigmoid2( -0.1754033*Syndrome1_1-0.0528489*Syndrome1_2-0.1744897*Syndrome1_3+0.1113354*Syndrome1_4+0.1185713*Syndrome1_5-0.0231303*Syndrome1_6+0.006316248*Syndrome1_7-0.08525342*Syndrome1_8+0.1568578*Syndrome1_9+0.2965699*Syndrome1_10+0.2781587*Syndrome1_11+0.2391527*Syndrome1_12-0.08555941*Syndrome1_13-0.2362186*Syndrome1_14+0.1128907*Syndrome1_15-0.04770778*Syndrome1_16-0.0139725*Syndrome1_17+0.1079882*Syndrome1_18-0.09141354*Syndrome1_19+0.3320866*Syndrome1_20-0.3015116 );
   double Syndrome2_16=Sigmoid2( 0.1962015*Syndrome1_1+0.0192374*Syndrome1_2-0.1578716*Syndrome1_3+0.03360523*Syndrome1_4+0.04818176*Syndrome1_5+0.2462966*Syndrome1_6-0.2103649*Syndrome1_7+0.01318523*Syndrome1_8-0.09349868*Syndrome1_9+0.08476428*Syndrome1_10-0.06272572*Syndrome1_11+0.2246324*Syndrome1_12+0.2539908*Syndrome1_13-0.2059217*Syndrome1_14-0.08641216*Syndrome1_15-0.09780023*Syndrome1_16+0.0005770256*Syndrome1_17-0.2842666*Syndrome1_18-0.05383059*Syndrome1_19-0.2822465*Syndrome1_20+0.2277268 );
   double Syndrome2_17=Sigmoid2( 0.5981864*Syndrome1_1+0.5172131*Syndrome1_2-0.2310352*Syndrome1_3-0.1814138*Syndrome1_4-0.2148922*Syndrome1_5+0.562911*Syndrome1_6+0.5865576*Syndrome1_7-0.2790301*Syndrome1_8-0.3841165*Syndrome1_9+0.3223535*Syndrome1_10+0.2096305*Syndrome1_11+0.08284206*Syndrome1_12+0.7050048*Syndrome1_13+0.4129859*Syndrome1_14+0.2116682*Syndrome1_15+0.2213966*Syndrome1_16-0.1637594*Syndrome1_17+0.1191863*Syndrome1_18-0.6626714*Syndrome1_19-0.9127383*Syndrome1_20-0.1505798 );
   double Syndrome2_18=Sigmoid2( -0.008298698*Syndrome1_1-0.1847953*Syndrome1_2-0.1930849*Syndrome1_3-0.1005524*Syndrome1_4+0.0737519*Syndrome1_5+0.04218475*Syndrome1_6-0.422835*Syndrome1_7+0.06019862*Syndrome1_8-0.2056148*Syndrome1_9+0.3398327*Syndrome1_10-0.2526269*Syndrome1_11-0.06098709*Syndrome1_12-0.1447722*Syndrome1_13-0.05216306*Syndrome1_14-0.09496115*Syndrome1_15+0.2071376*Syndrome1_16+0.03088453*Syndrome1_17-0.521363*Syndrome1_18-0.06449924*Syndrome1_19-0.4105364*Syndrome1_20+0.3204305 );
   double Syndrome2_19=Sigmoid2( -0.1376712*Syndrome1_1-0.0153131*Syndrome1_2+0.04377801*Syndrome1_3+0.08896239*Syndrome1_4+0.03197494*Syndrome1_5-0.02259021*Syndrome1_6+0.008662836*Syndrome1_7-0.1961185*Syndrome1_8-0.0720102*Syndrome1_9+0.05738823*Syndrome1_10-0.004060962*Syndrome1_11-0.3752605*Syndrome1_12+0.02065136*Syndrome1_13+0.1263955*Syndrome1_14-0.05906902*Syndrome1_15+0.4029721*Syndrome1_16-0.159444*Syndrome1_17-0.1619136*Syndrome1_18+0.3338208*Syndrome1_19-0.0656369*Syndrome1_20+0.1602566 );
   double Syndrome2_20=Sigmoid2( -0.003900121*Syndrome1_1+0.3159288*Syndrome1_2+0.2550703*Syndrome1_3+0.05409481*Syndrome1_4+0.06660215*Syndrome1_5-0.1948439*Syndrome1_6-0.370153*Syndrome1_7+0.5337713*Syndrome1_8-0.06716464*Syndrome1_9+0.550526*Syndrome1_10+0.4723933*Syndrome1_11+0.09457724*Syndrome1_12+0.5613732*Syndrome1_13+0.3709611*Syndrome1_14-0.07680532*Syndrome1_15-0.5097623*Syndrome1_16+0.4023384*Syndrome1_17+0.2330064*Syndrome1_18-0.09448317*Syndrome1_19+0.2668969*Syndrome1_20-0.2110061 );

//--- syndromes of the 3rd level:
   double Syndrome3_1=Sigmoid3( -0.05101856*Syndrome2_1-0.04933448*Syndrome2_2+0.03248681*Syndrome2_3-0.05835526*Syndrome2_4-0.01888579*Syndrome2_5-0.07940733*Syndrome2_6-0.04341835*Syndrome2_7-0.07906266*Syndrome2_8+0.2054683*Syndrome2_9+0.1553352*Syndrome2_10-0.07296721*Syndrome2_11-0.01849408*Syndrome2_12-0.07505544*Syndrome2_13+0.08666297*Syndrome2_14-0.2001411*Syndrome2_15+0.07931387*Syndrome2_16+0.1598745*Syndrome2_17+0.01308129*Syndrome2_18+0.159161*Syndrome2_19+0.1903208*Syndrome2_20+0.0190388 );
   double Syndrome3_2=Sigmoid3( 0.0643296*Syndrome2_1+0.3451192*Syndrome2_2-0.1247545*Syndrome2_3+0.03276825*Syndrome2_4+0.303136*Syndrome2_5+0.03152885*Syndrome2_6+0.1118743*Syndrome2_7-0.3860323*Syndrome2_8-0.08593427*Syndrome2_9-0.2664599*Syndrome2_10+0.213205*Syndrome2_11-0.0977626*Syndrome2_12-0.2923501*Syndrome2_13-0.3133417*Syndrome2_14-0.1915279*Syndrome2_15+0.4333939*Syndrome2_16+0.02110274*Syndrome2_17+0.5802879*Syndrome2_18+0.03386912*Syndrome2_19+0.08908307*Syndrome2_20+0.06071822 );
   double Syndrome3_3=Sigmoid3( -0.08613513*Syndrome2_1+0.1200513*Syndrome2_2+0.3818525*Syndrome2_3-0.09603316*Syndrome2_4-0.2353039*Syndrome2_5-0.1816488*Syndrome2_6+0.002517342*Syndrome2_7-0.2414117*Syndrome2_8+0.2011739*Syndrome2_9-0.3057347*Syndrome2_10-0.4593749*Syndrome2_11-0.2228307*Syndrome2_12+0.03512295*Syndrome2_13+0.4402955*Syndrome2_14-0.1967632*Syndrome2_15+0.07873345*Syndrome2_16+0.1981131*Syndrome2_17-0.2677957*Syndrome2_18+0.1719814*Syndrome2_19-0.474854*Syndrome2_20+0.01101439 );
   double Syndrome3_4=Sigmoid3( 0.02534361*Syndrome2_1+0.1845266*Syndrome2_2+0.149674*Syndrome2_3-0.1454014*Syndrome2_4+0.00701888*Syndrome2_5+0.08219463*Syndrome2_6+0.05163066*Syndrome2_7-0.1836077*Syndrome2_8+0.1429968*Syndrome2_9+0.518382*Syndrome2_10-0.00966637*Syndrome2_11-0.1674386*Syndrome2_12+0.1387497*Syndrome2_13+0.1385897*Syndrome2_14-0.01148864*Syndrome2_15+0.3751494*Syndrome2_16-0.08906862*Syndrome2_17-0.06286599*Syndrome2_18+0.2061662*Syndrome2_19-0.07524439*Syndrome2_20-0.08077133 );
   double Syndrome3_5=Sigmoid3( 0.3856083*Syndrome2_1-0.01700347*Syndrome2_2-0.1044575*Syndrome2_3+0.111998*Syndrome2_4-0.5157402*Syndrome2_5-0.05508286*Syndrome2_6-0.3101066*Syndrome2_7-0.5261913*Syndrome2_8-0.05983765*Syndrome2_9+0.1723307*Syndrome2_10-0.2564277*Syndrome2_11+0.06385356*Syndrome2_12-0.07245655*Syndrome2_13+0.1154206*Syndrome2_14-0.3492871*Syndrome2_15+0.136372*Syndrome2_16+0.3627071*Syndrome2_17-0.3074959*Syndrome2_18+0.4425845*Syndrome2_19-0.9329191*Syndrome2_20+0.01476912 );
   double Syndrome3_6=Sigmoid3( 0.5246867*Syndrome2_1-0.2347829*Syndrome2_2+0.01062111*Syndrome2_3+0.2374777*Syndrome2_4-0.02361662*Syndrome2_5+0.1804156*Syndrome2_6+0.07669501*Syndrome2_7-0.142881*Syndrome2_8+0.2566245*Syndrome2_9+0.1024709*Syndrome2_10-0.04695484*Syndrome2_11-0.004103919*Syndrome2_12+0.3340242*Syndrome2_13-0.3702791*Syndrome2_14+0.1852374*Syndrome2_15+0.02175477*Syndrome2_16+0.09901489*Syndrome2_17-0.1502062*Syndrome2_18+0.3814779*Syndrome2_19-0.06319473*Syndrome2_20+0.2657273 );
   double Syndrome3_7=Sigmoid3( 0.1613003*Syndrome2_1-0.2738772*Syndrome2_2-0.03304096*Syndrome2_3+0.3934855*Syndrome2_4+0.3955218*Syndrome2_5-0.3004892*Syndrome2_6+0.1339742*Syndrome2_7+0.09475601*Syndrome2_8+0.03064043*Syndrome2_9-0.7264652*Syndrome2_10-0.4579849*Syndrome2_11-0.1183059*Syndrome2_12+0.2197721*Syndrome2_13-0.08493897*Syndrome2_14+0.2115426*Syndrome2_15-0.07834542*Syndrome2_16-0.3884689*Syndrome2_17-0.101394*Syndrome2_18+0.1002519*Syndrome2_19-0.07787764*Syndrome2_20+0.3529212 );
   double Syndrome3_8=Sigmoid3( -0.3544801*Syndrome2_1+0.03471621*Syndrome2_2-0.2373467*Syndrome2_3-0.2836286*Syndrome2_4+0.01646966*Syndrome2_5+0.06978795*Syndrome2_6-0.03310004*Syndrome2_7+0.01844743*Syndrome2_8+0.05259214*Syndrome2_9-0.05343668*Syndrome2_10+0.3971725*Syndrome2_11-0.08770485*Syndrome2_12-0.2040168*Syndrome2_13+0.1109144*Syndrome2_14-0.06249888*Syndrome2_15-0.5860764*Syndrome2_16+0.1217078*Syndrome2_17+0.2471277*Syndrome2_18-0.03716509*Syndrome2_19-0.1908655*Syndrome2_20+0.03838157 );
   double Syndrome3_9=Sigmoid3( 0.1542789*Syndrome2_1+0.3505224*Syndrome2_2+0.06042741*Syndrome2_3+0.08956298*Syndrome2_4-0.03655836*Syndrome2_5-0.3083843*Syndrome2_6+0.2483124*Syndrome2_7-0.1132483*Syndrome2_8-0.3571556*Syndrome2_9-0.04335312*Syndrome2_10+0.005499069*Syndrome2_11+0.371572*Syndrome2_12-0.1199554*Syndrome2_13+0.1160574*Syndrome2_14-0.01656827*Syndrome2_15+0.09481092*Syndrome2_16-0.07926448*Syndrome2_17+0.3847227*Syndrome2_18+0.1039986*Syndrome2_19-0.02874756*Syndrome2_20-0.2311832 );
   double Syndrome3_10=Sigmoid3( -0.5099882*Syndrome2_1-0.2619184*Syndrome2_2+0.2441412*Syndrome2_3-0.02311796*Syndrome2_4+0.004243354*Syndrome2_5-0.04681544*Syndrome2_6+0.1402575*Syndrome2_7-0.03166823*Syndrome2_8-0.2629028*Syndrome2_9-0.03275445*Syndrome2_10-0.311464*Syndrome2_11+0.3158014*Syndrome2_12-0.04689252*Syndrome2_13+0.1556217*Syndrome2_14-0.02266529*Syndrome2_15-0.15192*Syndrome2_16+0.02253294*Syndrome2_17+0.04638374*Syndrome2_18-0.4847055*Syndrome2_19-0.0543578*Syndrome2_20-0.4383866 );
   double Syndrome3_11=Sigmoid3( 0.09181526*Syndrome2_1-0.009475656*Syndrome2_2+0.08283823*Syndrome2_3+0.06638021*Syndrome2_4-0.04110251*Syndrome2_5+0.03041244*Syndrome2_6-0.2266526*Syndrome2_7+0.3537511*Syndrome2_8+0.2091044*Syndrome2_9-0.2312607*Syndrome2_10-0.01409533*Syndrome2_11-0.06294888*Syndrome2_12+0.1980267*Syndrome2_13+0.07864135*Syndrome2_14-0.01312789*Syndrome2_15+0.02964603*Syndrome2_16-0.1720168*Syndrome2_17-0.01523064*Syndrome2_18+0.07354444*Syndrome2_19+0.1534344*Syndrome2_20+0.04784121 );
   double Syndrome3_12=Sigmoid3( -0.01962976*Syndrome2_1-0.1254692*Syndrome2_2+0.01237085*Syndrome2_3-0.006583595*Syndrome2_4-0.06446695*Syndrome2_5-0.1581757*Syndrome2_6-0.01416831*Syndrome2_7+0.08909909*Syndrome2_8+0.02427519*Syndrome2_9+0.06101634*Syndrome2_10-0.07296847*Syndrome2_11-0.02960677*Syndrome2_12+0.1195403*Syndrome2_13+0.007260199*Syndrome2_14-0.005008513*Syndrome2_15+0.07686368*Syndrome2_16-0.1097991*Syndrome2_17+0.02348211*Syndrome2_18-0.01508969*Syndrome2_19+0.06078456*Syndrome2_20+0.1424098 );
   double Syndrome3_13=Sigmoid3( -0.1845686*Syndrome2_1-0.1120369*Syndrome2_2+0.1346949*Syndrome2_3+0.2425685*Syndrome2_4+0.1310953*Syndrome2_5-0.1957272*Syndrome2_6+0.2163845*Syndrome2_7+0.04189415*Syndrome2_8+0.05685329*Syndrome2_9-0.1108158*Syndrome2_10-0.04702755*Syndrome2_11-0.2698838*Syndrome2_12+0.05045844*Syndrome2_13+0.1487544*Syndrome2_14+7.648221E-5*Syndrome2_15-0.04902162*Syndrome2_16+0.3119571*Syndrome2_17-0.2076546*Syndrome2_18+0.1465537*Syndrome2_19+0.2386554*Syndrome2_20+0.09121808 );
   double Syndrome3_14=Sigmoid3( 0.015057*Syndrome2_1-0.07630379*Syndrome2_2+0.10373*Syndrome2_3-0.01276504*Syndrome2_4+0.01637872*Syndrome2_5+0.1570177*Syndrome2_6+0.02290879*Syndrome2_7+0.1426407*Syndrome2_8-0.3037595*Syndrome2_9-0.1183627*Syndrome2_10-0.05010238*Syndrome2_11-0.06874149*Syndrome2_12+0.0325584*Syndrome2_13-0.1127614*Syndrome2_14+0.1010367*Syndrome2_15+0.2743505*Syndrome2_16+0.02752565*Syndrome2_17-0.01011515*Syndrome2_18-0.1072115*Syndrome2_19-0.1723324*Syndrome2_20-0.1862434 );
   double Syndrome3_15=Sigmoid3( -0.0602835*Syndrome2_1+0.1044827*Syndrome2_2-0.03398157*Syndrome2_3+0.1103081*Syndrome2_4-0.2517793*Syndrome2_5-0.1388755*Syndrome2_6+0.1680355*Syndrome2_7+0.08541053*Syndrome2_8+0.2264198*Syndrome2_9+0.1319854*Syndrome2_10+0.2397746*Syndrome2_11+0.04893836*Syndrome2_12+0.07067535*Syndrome2_13+0.03666123*Syndrome2_14-0.2249698*Syndrome2_15+0.1039975*Syndrome2_16+0.03130547*Syndrome2_17+0.1295152*Syndrome2_18-0.1380298*Syndrome2_19-0.2716908*Syndrome2_20+0.3049682 );
   double Syndrome3_16=Sigmoid3( 0.006898584*Syndrome2_1+0.172121*Syndrome2_2+0.08287619*Syndrome2_3-0.2843233*Syndrome2_4+0.3360839*Syndrome2_5-0.06360124*Syndrome2_6+0.08605669*Syndrome2_7+0.1303328*Syndrome2_8+0.176666*Syndrome2_9+0.3064248*Syndrome2_10+0.03492442*Syndrome2_11-0.1337793*Syndrome2_12+0.2166045*Syndrome2_13+0.1651906*Syndrome2_14-0.2159452*Syndrome2_15-0.02087162*Syndrome2_16-0.1321865*Syndrome2_17+0.02330898*Syndrome2_18-0.1607926*Syndrome2_19+0.100959*Syndrome2_20+0.3113509 );
   double Syndrome3_17=Sigmoid3( 0.2484581*Syndrome2_1+0.07501616*Syndrome2_2-0.2955785*Syndrome2_3-0.06893355*Syndrome2_4-0.110545*Syndrome2_5+0.009258383*Syndrome2_6-0.04150206*Syndrome2_7-0.1581711*Syndrome2_8-0.1503464*Syndrome2_9-0.1641756*Syndrome2_10+0.2800875*Syndrome2_11+0.1470316*Syndrome2_12+0.08529772*Syndrome2_13-0.07939056*Syndrome2_14+0.1105667*Syndrome2_15-0.003909521*Syndrome2_16-0.1663841*Syndrome2_17+0.1384012*Syndrome2_18-0.2260507*Syndrome2_19-0.1310463*Syndrome2_20+0.03011392 );
   double Syndrome3_18=Sigmoid3( 0.2167049*Syndrome2_1+0.1083723*Syndrome2_2+0.03713056*Syndrome2_3-0.07394339*Syndrome2_4-0.08689396*Syndrome2_5+0.1893489*Syndrome2_6-0.004869457*Syndrome2_7+0.06987588*Syndrome2_8-0.1505099*Syndrome2_9+0.1717843*Syndrome2_10+0.07792218*Syndrome2_11+0.02835098*Syndrome2_12+0.03617713*Syndrome2_13+0.1599271*Syndrome2_14-0.1617647*Syndrome2_15-0.04720658*Syndrome2_16+0.004165665*Syndrome2_17-0.1073883*Syndrome2_18+0.06164433*Syndrome2_19+0.01017194*Syndrome2_20-0.1073146 );
   double Syndrome3_19=Sigmoid3( 0.1966043*Syndrome2_1-0.06785608*Syndrome2_2-0.02568222*Syndrome2_3+0.2323583*Syndrome2_4-0.1949882*Syndrome2_5-0.0180097*Syndrome2_6-0.1995831*Syndrome2_7-0.3007537*Syndrome2_8+0.03133066*Syndrome2_9-0.3836962*Syndrome2_10+0.8646971*Syndrome2_11-0.04459784*Syndrome2_12+0.1127359*Syndrome2_13+0.3645059*Syndrome2_14+0.3924035*Syndrome2_15+0.2070317*Syndrome2_16-0.1975317*Syndrome2_17+0.249992*Syndrome2_18-0.1090982*Syndrome2_19+0.9234442*Syndrome2_20+0.0260936 );
   double Syndrome3_20=Sigmoid3( -0.1054238*Syndrome2_1+0.01094678*Syndrome2_2+0.1854347*Syndrome2_3-0.03105933*Syndrome2_4-0.1428708*Syndrome2_5+0.1660853*Syndrome2_6-0.0540761*Syndrome2_7+0.08364562*Syndrome2_8+0.01462638*Syndrome2_9+0.05958234*Syndrome2_10+0.05540805*Syndrome2_11+0.1415959*Syndrome2_12-0.2088391*Syndrome2_13-0.02437577*Syndrome2_14+0.03789431*Syndrome2_15+0.1342704*Syndrome2_16+0.02136465*Syndrome2_17+0.1529594*Syndrome2_18-0.2515772*Syndrome2_19-0.009984408*Syndrome2_20-0.02554057 );

//--- final syndromes:
   BAR[0]=0.377357*Syndrome3_1-0.1995524*Syndrome3_2+0.44664*Syndrome3_3-0.2634062*Syndrome3_4-0.1150927*Syndrome3_5-0.3349093*Syndrome3_6-0.3639574*Syndrome3_7+0.2705039*Syndrome3_8+0.5313437*Syndrome3_9+0.2664694*Syndrome3_10+0.1713557*Syndrome3_11+0.1208919*Syndrome3_12-0.4120659*Syndrome3_13+0.3021899*Syndrome3_14+0.4149051*Syndrome3_15+0.7103375*Syndrome3_16+0.1180793*Syndrome3_17-0.2354599*Syndrome3_18-0.1013937*Syndrome3_19+0.3054902*Syndrome3_20+0.03919306;

//--- postprocessing of the final syndromes:
   BAR[0]=((BAR[0]*0.0180000001564622)+0.000599999912083149)/2;

   return (BAR[0]);
  }
//+------------------------------------------------------------------+

double Prognosis;

//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
//+------------------------------------------------------------------+
void OnTick()
  {
//--- receive a price forecast from a neural network
   Prognosis=CalcNeuroNet();
//--- perform necessary trade actions
   Trade();
  }
//+------------------------------------------------------------------+
void Trade()
  {
   //--- close an opened position if it does not fit the forecast
   if(PositionSelect(_Symbol))
     {
      long type=PositionGetInteger(POSITION_TYPE);
      bool close=false;
      if((type == POSITION_TYPE_BUY)  && (Prognosis <= 0)) close = true;
      if((type == POSITION_TYPE_SELL) && (Prognosis >= 0)) close = true;
      if(close)
        {
         CTrade trade;
         trade.PositionClose(_Symbol);
        }
     }

   //--- if there are no positions, then open by the forecast
   if((Prognosis!=0) && (!PositionSelect(_Symbol)))
     {
      CTrade trade;
      if(Prognosis >  MinPrognosis) trade.Buy (Lots);
      if(Prognosis < -MinPrognosis) trade.Sell(Lots);
     }
  }



Test

Starten Sie den Expert auf demselben Zeitraum, der die Daten zum Training des neuronalen Netzwerks geliefert hat. Ich erinnere daran: dieser Expert ist für EURUSD, H1 (die Trainingszeit beträgt fast 10 Monate) geschrieben worden.

Es macht keinen Sinn, einen Abschluss einzugeben, wenn ein vorhergesagter Gewinn einen Wert hat, der mit dem Spread vergleichbar ist. Der Expert hat für solche Fälle einen eingebauten Filter. Stellen Sie den Eingabeparameter MinPrognose auf 0,0005 ein.

Das konstante Handelsvolumen beträgt 0,1 Posten.

Wir haben die folgenden Ergebnisse erhalten:

Abb. 21 Statistik des Tests des Expert Advisors im MetaTester

Abb. 21 Statistik des Tests des Expert Advisors im MetaTester


Abb. 22 Eigenkapital-Chart nach Testen des Expert Advisors im MetaTester

Abb. 22 Eigenkapital-Chart nach Testen des Expert Advisors im MetaTester


Ein konstant anwachsendes Eigenkapital zeigt, dass alle Etappen in der Entwicklung eines neuronalen Netzwerk-Experts korrekt implementiert wurden.

Denken Sie immer daran: ein Gewinn in einem Zeitraum in dem der Expert noch "gelernt" hat, ist noch lange keine Garantie für Gewinne außerhalb dieses Zeitraums. Die Erzeugung wirklich profitabler neuronaler Netzwerk-Experts bedarf umfassender Kenntnisse des Funktionsprinzips des neuronalen Netzwerks und zudem erhebliche Erfahrung im Handel. Ich habe Ihnen in diesem Beitrag gezeigt, wie man mit einem neuronalen Netzwerk arbeitet. Es liegt jetzt an Ihnen, dieses Tool auch wirkungsvoll zu machen.


Fazit

NeuroPro ist ein einzigartiges Programm. Wir haben im Vorangegangenen sehen können, dass ein neuronales Netzwerk von NeuroPro auf den MetaTrader 5 Expert mit Hilfe der bereitstehenden Tools in wenigen Minuten übertragen werden kann.

Eine Menge anderer neuronaler Netzwerkprogramme bieten diesen Vorteil nicht. Deshalb wird NeuroPro wärmstens empfohlen.


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

Beigefügte Dateien |
NeuroPro_allOS.zip (7824.54 KB)
neuropro.mq5 (68.46 KB)
Letzte Kommentare | Zur Diskussion im Händlerforum (1)
Christian
Christian | 14 Jan. 2017 in 10:48

Sehr schöner Arikel Andrew aber es wäre für alle die kein Russisch Lesen können hilfreicher gewesen wenn du

bei den Screenshots von NeuroPro mit Pfeilen markiert hättest welchen Menu Punkt du nun aktuell meinst.

Wenn schon in deutsch übersetzen dann alles.

2) Projekt anlegen: Menü "Datei" > "Anlegen":

 

Gruß 

SQL und MQL5: Mit der SQLite Datenbank arbeiten SQL und MQL5: Mit der SQLite Datenbank arbeiten
Dieser Beitrag richtet sich an Entwickler, die in ihren Projekten gerne SQL verwenden möchten. Er erklärt die Funktionsweise und Vorteile von SQLite. Für diesen Beitrag sind keine speziellen Kenntnisse der SQLite-Funktionen nötig, doch ein Grundverständnis von SQL wäre durchaus hilfreich.
Lernvideo: MetaTrader Signale-Service Lernvideo: MetaTrader Signale-Service
Dieses Lernvideo erklärt Ihnen in nur 15 Minuten was der MetaTrader Signale-Service ist, und schildert Ihnen in allen Einzelheiten wie man in unserem Service ein Abonnent und ein Anbieter von Handelssignalen wird. Wenn Sie sich das Lernvideo ansehen, können Sie jedes Handelssignal abonnieren oder Ihre eigenen Signale in unserem Service veröffentlichen und bewerben.
Indikator zur Erzeugung eines Three Line Break-Charts Indikator zur Erzeugung eines Three Line Break-Charts
In diesem Beitrag geht es um den Three Line Break-Chart, den Steve Nison in seinem Buch "Beyond Candlesticks" ["Jenseits von Kerzen"] vorgeschlagen hat. Der größte Vorteil dieses Charts ist, dass mit seiner Hilfe kleine Preisfluktuationen in Bezug auf die vorherige Bewegung gefiltert werden können. Wir besprechen in diesem Beitrag das Konstruktionsprinzip des Charts, den Code des Indikators und einige auf dm Chart basierende Handelsstrategien.
Wie man nicht hinterherhinkende digitale Filter erzeugt Wie man nicht hinterherhinkende digitale Filter erzeugt
Dieser Beitrag beschreibt einen der Ansätze zur Bestimmung eines nützlichen Signals (Trend) in Datenströmen. Kleine filternde (glättende) Tests, die auf Marktnotierungen angewendet werden, belegen das Potential zur Erzeugung nicht hinterherhinkender digitaler Filter (Indikatoren), die auf den letzten Bars nicht erneut gezeichnet werden.