Urheber:
Dmitry Kalyuzhny. FuzzyNet project website - http://sourceforge.net/projects/fuzzynet/
Entpacken Sie das Archiv in das Verzeichnis terminal_data_folder.
Der Programmcode befindet sich in den folgenden Verzeichnis <terminal_data_folder>\MQL4\Include\Math\FuzzyNet\
Ein Beispielscript finden Sie in den folgenden Verzeichnis:<terminal_data_folder>\MQL4\Scripts\FuzzyNet\
Die FuzzyNet Bibliothek ist eine der bekanntesten mathematischen Bibliotheken für die Erzeugung von Fuzzy-Modellen.
Die Fuzzy-Logik Bibliothek von Microsoft.net (vasi.net) ist eine einfach zu verwendende Komponente welche die Mandami und Sugeno Fuzzy Systeme beinhaltet.
FuzzyNet beinhaltet:
Folgendes wurde während der Konvertierung zu MQL4 noch hinzugefügt:
Verbindung der Bibliothek
Hinweis: Das Mamdani-Inferenz-System kann nach seiner Erzeugung und vor dem Aufruf der Funktion konfiguriert werden. Wenn die Parameter des Systems nicht geändert werden, nachdem es erzeugt worden ist, dann verwendet das System die voreingestellten Werte:
Die Konvertierung der fuzzyNet Bibliothek (v. 1.2.0) wird unten dargestellt.
Um mit dieser Bibliothek arbeiten zu können, müssen Sie die MamdaniFuzzySystem.mqh oder SugenoFuzzySystem.mqh file in Ihr System einbinden (#include)
Es folgt eine detaillierte Information über die konvertierte fuzzyNet Bibliothek:| Pakete | Beschreibung: |
|---|---|
| Dictionary.mqh | Dieses Paket enthält weitere Klassen, die für andere Pakete notwendig sind. |
| FuzzyRule.mqh | Klasse für die Erzeugung der Fuzzy-Regeln:
Dieses Paket beinhaltet zudem externe Klassen für die Implementierung von Fuzzy-Regeln. |
| FuzzyTerm.mqh | Paket für die Erzeugung von Fuzzy-Terms. |
| FuzzyVariable.mqh | Paket für die Erzeugung von Fuzzy-Variablen. |
| GenericFuzzySystem.mqh | Diese Klasse implementiert die grundlegende Funktionalität für Mamdani und Sugeno Systeme. |
| Helper.mqh | Dieses Paket enthält weitere Klassen, die für andere Pakete notwendig sind. |
| InferenceMethod.mqh | Dieses Paket enthält weitere Klassen, die für andere Pakete notwendig sind. |
| MamdaniFuzzySystem.mqh | Eine Klasse um ein Mamdani-Fuzzy-System zu erstellen. |
| MembershipFunction.mqh | Eine Klasse mit zugehörigen Funktionen:
|
| RuleParser.mqh | Eine Klasse für das Analysieren von Fuzzy-Regeln. |
| SugenoFuzzySystem.mqh | Eine Klasse für das Erzeugen eines Sugeno-Fuzzy-Systems. |
| SugenoVariable.mqh | Dieses Paket beinhaltet die folgenden Klassen:
Sugeno-type fuzzy Variablen werden bei der Entwicklung für die Regeln eines Sugeno-Systems gebraucht. |
Die Verwendung der FuzzyNet-Bibliothek in MQL4
Bevor sie ein Fuzzy-System schreiben, sollten Sie eine klare Vorstellung von seinen Elementen haben:
Die Entwicklung des Systems und die Berechnung:
Für ein Mamdani-System:
MamdaniFuzzySystem *fuzzy_system=new MamdaniFuzzySystem();Für ein Sugeno-System:
SugenoFuzzySystem *fuzzy_system=new SugenoFuzzySystem();
FuzzyVariable *fuzzy_variable=new FuzzyVariable(const string name,const double min,const double max);
fuzzy_variable.Terms().Add(new FuzzyTerm(const string name,new IMembershipFunction());
fuzzy_system.Input().Add(FuzzyVariable fuzzy_variable);
SugenoVariable *sugeno_variable=new SugenoVariable(const string name);Bei einem Sugeno-Typ werden lineare Funktionen, welche die lineare Kombination von Eingabeparametern interpretieren, anstelle von Fuzzy-Gleichungen übergeben. Ein Name und ein array aus Koeffizienten werden hierzu als Parameter verwendet. Über die Elemente in dem Array wird eine lineare Gleichung gebildet. Daher ist es wichtig die Reihenfolge der Elemente in dem Array einzuhalten. Die Länge des arrays mit Koeffizienten sollte gleich der Menge der Eingabeparameter sein, oder die Zahl um einen überschreiten. If the lengths are equal, an absolute term of an equation is equal to zero. Wenn das Array die Größe um einen überschreitet, dann ist das letzte Element gleich dem Vorherigen. Alle anderen Elementen der Anordnung, beginnend mit dem ersten, wird eine Fuzzy-Eingangsvariable entsprechend der Reihenfolge zugeordnet, wie sie in das System eingegeben wurden.
sugeno_varriable.Functions().Add(fuzzy_sytem.CreateSugenoFunction(const string name, const double &coeffs[]));
Für ein Mamdani-System:
fuzzy_system.Output().Add(FuzzyVariable fuzzy_variable);
Für ein Sugeno-System:
fuzzy_system.Output().Add(FuzzyVariable fuzzy_variable);
Für ein Mamdani-System:
MamdaniFuzzyRule *fuzzy_rule = fuzzy_system.ParseRule(const string rule_text);
Für ein Sugeno-System:
SugenoFuzzyRule *fuzzy_rule = fuzzy_system.ParseRule(const string rule_text);
Für ein Mamdani-System:
fuzzy_system.Rules().Add(MamdaniFuzzyRule fuzzy_rule);
Für ein Sugeno-System:
fuzzy_system.Rules().Add(SugenoFuzzyRule fuzzy_rule);
Dictionary_Obj_Double *p_od_in=new Dictionary_Obj_Double;Die Klasse implementiert die SetAll(CObject *key, const double value) Methode, welche zwei Parameter akzeptiert - eine Fuzzy Variable und einen numerischen Wert. Dieses Element ist eine Eingabe-Variable des Systems.
p_od_in.SetAll(FuzzyVariable fuzzy_variable,const double value);Alle anderen Eingabewerte werden auf die gleiche Weise eingegeben. Erstellen Sie die Liste und fügen Sie alle Werte hinzu:
CList *in=new CList; in.Add(p_od_in);
Dictionary_Obj_Double *p_od_out=new Dictionary_Obj_Double; CList *out=new CList;
out=fuzzy_system.Calculate(in);Anschließend beinhaltet die out Liste alle berechneten Werte in der Reihenfolge, wie sie in das System eingegeben worden sind. Wir müssen Sie jetzt nur noch empfangen:
p_od_out=out.GetNodeAtIndex(int index); double result=p_od_out.Value();Nun beinhaltet die result Variable das Ergebnis einer Berechnung eines Output-Wertes entsprechend des index-Wertes.
Beispiel-Skript
Trinkgeld Beispiel (Mamdani)
Tips_Sample_Mamdani.mq4 berechnet die prozentuale Menge an Trinkgeld, welche sie entsprechend der Servicequalität und der Qualität des Essens bezahlen müssen.
Geben Sie die Eingabeparameter an:

Berechnungsergebnisse:

Cruise Control Sample (Sugeno)
Das Cruise_Control_Sample_Sugeno.mq4 Beispielskript ist ein Beispiel für eine Fuzzy-Regelung. Dieses repräsentiert eine Geschwindigkeitsregelung, welche die notwendige Beschleunigung aufgrund der aktuellen Entfernung und der Veränderung der Entfernung berechnet, damit ein Auto die gewünschte Geschwindigkeit erreicht.
Geben Sie die Eingabeparameter an:

Berechnungsergebnisse:

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/13717
MySQL library for MQL4 with proper memory management
Diese Bibliothek bietet Funktionen für das Management von MetaTrader4 zu mySQL Datenbank-Verbindungen. Das Problem der Speicherverwaltung in der vorherigen Bibliothek wurde behoben.
COrdersManager class
Eine einfache Möglichkeit ihre Orders zu kontrollieren.
Histogram Blanket
Diese neue Darstellung hilft Ihnen Charts aus einem ganz anderen Blickwinkel zu betrachten.
ATR 3 LWMA
Dieser Indikator zeigt drei Perioden ATR LWMA.