Diskussion zum Artikel "Genetische Algorithmen - Leicht gemacht!" - Seite 7

 
Graff:
Meine Herren! Wenn es nicht zu schwierig ist, geben Sie mir bitte einige Beispiele für die Verwendung der UGA-Bibliothek.
An welcher Art von Beispielen (zu welchem Thema) sind Sie interessiert?
 
joo:
An welcher Art von Beispielen (zu welchem Thema) sind Sie interessiert?
Alle Beispiele, die UGA verwenden, weil aus den Beispielen in dem Artikel ist es nicht ganz klar, wie es funktioniert. der Artikel hat ein Beispiel mit einem Zick-Zack, können wir Beispiele mit anderen Indikatoren (RSI, CCI....) haben?
 
Graff:
alle, die UGA verwenden, weil aus den Beispielen in dem Artikel ist es nicht ganz klar, wie es funktioniert. in dem Artikel gibt es ein Beispiel mit Zig-Zag, können wir Beispiele mit anderen Indikatoren (RSI, CCI....)?

Schreiben Sie ein Skript, in dem:

1) Laden in das Datenarray des notwendigen Instruments zur Berechnung des Indikators

2) Berechnung des/der Indikators/Indikatoren mit einer Reihe von Parametern (diese Indikatorparameter sollten optimiert werden).

3) Bestimmung von Einstiegs- und Ausstiegspunkten auf der Grundlage von Indikatorsignalen

4) Berechnung eines statistischen Indikators von Interesse (die Anzahl der gewonnenen Pips unter Berücksichtigung des Spreads, des Drawdowns, usw.).


Die Punkte 2), 3) und 4) sind Schritte in einer Iteration von GA - Berechnung des FF für eine Person. Schreiben Sie ein solches Skript, und ich werde im Gegenzug versuchen, Ihnen zu helfen, UGA daran zu "schrauben".


PS. Ich bezweifle, dass jemand ein fertiges Handelsbeispiel mit UGA veröffentlichen wird - wenn jemand ernsthaft mit dieser Bibliothek (oder einer anderen ähnlichen Bibliothek) forscht, dann sind diese Entwicklungen höchstwahrscheinlich privat (die Zeit wird für das Studium von etwas verwendet, das nicht direkt mit dem Handel zusammenhängt).

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
zsazsa:

Toller Artikel! Ich danke Ihnen.

1) Wie ich sehe, wollten Sie UGA für die Optimierung des Trainings von NNs verwenden. War es erfolgreich?

2) Was waren die Gene des Chromosoms in diesem Fall?

3) Haben Sie auch Ihre eigene NN-Bibliothek entwickelt oder haben Sie eine bestehende NN-Implementierung gefunden, die die Integration mit MT5 und GA unterstützt?

1) Ja.
2) Die Gewichte und Verzerrungen der Neuronen eines Netzwerks stelle ich als Chromosomengene dar.
3) Ich habe eine eigene Implementierung eines neuronalen Netzwerks geschrieben.
 

Andrey, guten Tag an Sie. Vielen Dank für UGA. Ich versuche zu lernen, wie man Ihre Bibliothek nach der "wissenschaftlichen Methode" verwendet (am Beispiel von UGA_script.mq5 und skin.mqh, die Sie vorgeschlagen haben). Wenn es Ihnen nichts ausmacht, geben Sie mir eine zusätzliche Einführung, wie man die Eingabeparameter für die Lösung des Problems des Kohonen-Netz-Trainings korrekt einstellt, wenn wir eine Menge von Punkten auf der Ebene haben, die wir bestimmten Kerneln zuordnen (klassifizieren) müssen. D.h. wir haben N Punkte mit Koordinaten (x,y), M Kerne (die nach dem Training "verschoben" werden), FF Funktion - "Proximity measure". Wie ich in UGA_script.mq5 verstanden habe, sollten die Parameter wie folgt gesetzt werden: ChromosomeCount_P= ???? (ich verstehe nicht, wie man sie einstellt), GeneCount_P=2*M (2 Koordinaten für jeden Zellkern), Epoch_P= ???? (ich verstehe nicht, wie man sie einstellt). Vielen Dank im Voraus.

 
kogriv:

Andrey, guten Tag an Sie. Vielen Dank für UGA. Ich versuche zu lernen, wie man Ihre Bibliothek nach der "wissenschaftlichen Methode" verwendet (am Beispiel von UGA_script.mq5 und skin.mqh, die Sie vorgeschlagen haben). Wenn es Ihnen nichts ausmacht, geben Sie mir eine zusätzliche Einführung, wie man die Eingabeparameter für die Lösung des Problems des Kohonen-Netz-Trainings korrekt einstellt, wenn wir eine Menge von Punkten auf der Ebene haben, die wir bestimmten Kerneln zuordnen (klassifizieren) müssen. D.h. wir haben N Punkte mit Koordinaten (x,y), M Kerne (die nach dem Training "verschoben" werden), FF Funktion - "Proximity measure". Wie ich in UGA_script.mq5 verstanden habe, sollten die Parameter wie folgt gesetzt werden:

1) ChromosomeCount_P= ???? (Ich verstehe nicht, wie man sie einstellt),

2) GeneCount_P=2*M (2 Koordinaten für jeden Nukleus),

3) Epoche_P= ???? (ich verstehe nicht, wie man es einstellt).

Vielen Dank im Voraus.

1) Stellen Sie zunächst 50 ein, wenn das nicht ausreicht, erhöhen Sie den Wert (übertreiben Sie es nicht, bis zu 200-300, sonst riskieren Sie, dass Sie nicht auf das Ergebnis warten).

2) Ja.

3) Beginnen Sie mit 50-100, wenn das nicht ausreicht, erhöhen Sie den Wert (nicht zu viel, bis zu 200-1000, sonst riskieren Sie, keine Ergebnisse zu erhalten).

Die Zahlen sind empirisch, Sie können sie nach Belieben ändern und sich dabei entweder auf die Konvergenzgeschwindigkeit oder auf die Genauigkeit des Ergebnisses konzentrieren (dies sind im Allgemeinen Anforderungen, die sich gegenseitig ausschließen, die Mitte liegt irgendwo in der Mitte - entschuldigen Sie das Wortspiel).

 

Ich stöbere gerade in der Bibliothek herum.

Andrew, ich kann nicht verstehen, warum man die Fitnessfunktion berechnen sollte, BEVOR man Duplikate aus der Population entfernt. Das ist teuer.

void CycleOfOperators
(
...........
.......
)
{
 ................................
...............

  //Bestimmen Sie die Fitness jedes Individuums in der Nachkommenkolonie
  GetFitness(historyHromosomes);
................................
..........................
  //Vorbereitung der Bevölkerung auf die nächste Reproduktion
  RemovalDuplicates();
}// Ende der Funktion

Ich würde das Vorhandensein von Klonen in der Phase der Nachkommengenerierung kontrollieren. (Was ich tatsächlich tun werde.)

 
MetaDriver:

1) Andrew, ich kann nicht verstehen, warum man die Fitnessfunktion berechnen sollte, BEVOR man Duplikate aus der Population entfernt. Das ist teuer.

2) Ich würde das Vorhandensein von Klonen in der Phase der Nachkommengeneration kontrollieren. (Was ich tatsächlich tun werde.)

1) Wiederholte FF-Berechnungen werden nicht durchgeführt, da die Prüfung anhand der historischen Chromosomendatenbank erfolgt - wenn für ein solches Individuum bereits mindestens einmal eine FF durchgeführt wurde, wird der Wert aus der Datenbank übernommen.

2) Es gibt eine Nuance bei der Ansiedlung einer neuen Kolonie in der Population. Aber ich werde darüber schweigen. :) Machen Sie es so, wie Sie es für richtig halten, und teilen Sie mir die Ergebnisse mit - danach werde ich Ihnen die Nuance mitteilen.


PS Generell, und nicht in Bezug auf diesen Kommentar, kann man viele verschiedene Strategien der zufälligen GA-Suche verfolgen, jede Variante ist bis zu einem gewissen Grad beachtenswert. Die Ergebnisse (Konvergenzrate, Suchgenauigkeit, Verharren in lokalen Extrema) hängen fast direkt von den verwendeten Suchstrategien ab.

 
joo:

1) Es gibt keine wiederholten Berechnungen von FFs, da die historische Chromosomendatenbank überprüft wird - wenn für ein solches Individuum bereits mindestens einmal eine FF durchgeführt wurde, wird der Wert aus der Datenbank übernommen.

2) Es gibt eine Nuance bei der Ansiedlung einer neuen Kolonie in der Population. Aber darüber werde ich schweigen. :) Machen Sie das, was Sie für korrekter halten, und teilen Sie mir die Ergebnisse mit - danach werde ich Ihnen die Nuance erläutern.

1) So, so, so. Geschichtenerzähler. :) Du hast da mindestens einen Fehler.

So werden reelle Zahlen nur von... hmmm... Mathematikern verglichen, ja.

        if (Colony[Ge][chromos]!=historyHromosomes[Ge][Ch1])
          break;

Bei einem solchen Vergleich erkennt ein Unterschied von fünfzehn Ziffern nach einem Gleitkomma die Gene als unterschiedlich. Und es wird immer einen Unterschied geben, weil es Schicksal ist. ;)

Zumindest muss es so sein:

        if (fabs(Colony[Ge][chromos]-historyHromosomes[Ge][Ch1]) > delta)  // zum Beispiel 0,00001 < delta < 0,00000000001
          break;

Ich bezweifle nicht, dass Sie die Entfernung von Duplikaten getrennt vom Gen-Algorithmus getestet haben, also müssen Sie die Illusion haben, dass dieses Fragment funktioniert.


2) Wie geheimnisvoll alles ist... Wo das Dünne dünn ist, ist das Zerrissene zerrissen. :)

Dort ist alles lösbar, mit oder ohne Nuancen. Okay, ich zeige dir, wie ich es gemacht habe.

 
MetaDriver:

1) Sieh an, sieh an, sieh an. Geschichtenerzähler. :)

2) Du hast da mindestens einen Fehler. So werden reale Zahlen nur von ... hmmm ... Mathematikern verglichen, ja. Bei einem solchen Vergleich erkennt ein Unterschied von fünfzehn Ziffern nach einer Fließkommazahl die Gene als unterschiedlich. Und es wird immer einen Unterschied geben, weil es Schicksal ist. ;)

Zumindest muss es so sein:

3) Und genau das Gleiche haben Sie beim Entfernen von Duplikaten. Ich bezweifle nicht, dass Sie das Entfernen von Duplikaten getrennt vom Gen-Algorithmus getestet haben, also müssen Sie eine Illusion haben, dass dieses Fragment funktioniert.

4) Wie rätselhaft alles ist... Wo das Dünne dünn ist, ist das Zerrissene zerrissen. :) Dort ist alles lösbar, mit oder ohne Nuancen. Okay, ich zeige dir, wie ich es gemacht habe.

1) Geschichtenerzähler? Hmm, leider habe ich den Humor nicht verstanden. Die Datenbankprüfung erfolgt in der Funktion CheckHistoryChromosomes(chromos,historyHromosomes ) , die aus GetFitness(historyHromosomes) aufgerufen wird. Deshalb habe ich richtig gesagt - es gibt keine wiederholten Durchläufe von FF.

2) Der Abgleich mit der Datenbank erfolgt mit der Überprüfung nach Genen. Und jedes Gen wird durch SelectInDiscreteSpace(temp,RangeMinimum,RangeMaximum,Precision,3) normalisiert, wenn ein neues Chromosom erscheint. Es gibt also auch hier keine "Märchen".

3) Siehe 2)

4) Kein Geheimnis. Der Code ist offen und transparent. Es gibt in der Tat eine Nuance (sie hat nichts mit Implementierungsproblemen zu tun, sondern mit der Qualität der Konvergenz).