Diskussion zum Artikel "Parallele Partikelschwarmoptimierung"

 

Neuer Artikel Parallele Partikelschwarmoptimierung :

Der Artikel beschreibt eine Methode zur schnellen Optimierung unter Verwendung des Partikelschwarm-Algorithmus. Er stellt auch die Implementierung der Methode in MQL vor, die sowohl im Single-Thread-Modus innerhalb eines Expert Advisors als auch in einem parallelen Multi-Thread-Modus als Add-on, das auf lokalen Tester-Agenten läuft, verwendet werden kann.

Aus algorithmischer Sicht ist die PSO-Methode relativ einfach. Die Hauptidee besteht darin, einen Satz virtueller "Partikel" im Raum der Eingabeparameter des Expert Advisors zu erzeugen. Die Partikel bewegen sich dann und ändern ihre Geschwindigkeit in Abhängigkeit von den Handelsmetriken des EA an den entsprechenden Punkten im Raum. Der Prozess wird so oft wiederholt, bis sich die Performance nicht mehr verbessert. Der Pseudocode des Algorithmus ist unten dargestellt:

Der Pseudo-Code der Partikelschwarmoptimierung

Der Pseudo-Code der Partikelschwarmoptimierung

Gemäß diesem Code hat jedes Partikel eine aktuelle Position, Geschwindigkeit und eine Erinnerung an seinen "besten" Punkt in der Vergangenheit. Dabei bedeutet der "beste" Punkt den Punkt (ein Satz von EA-Eingangsparametern), an dem der höchste Wert der Zielfunktion für dieses Partikel erreicht wurde. Lassen Sie uns dies in einer Klasse beschreiben.

Autor: Stanislav Korotky

 
Таким образом, мы убедились, что алгоритм PSO стал доступен в своей параллельной модификации в тестере в режиме оптимизации.
Ich habe diesen Satz zu Ende gelesen. Sehr cool! Eine enorme und originelle Arbeit, um parallele Berechnungen über Dateien in einen funktionierenden Zustand zu bringen.
 

Ist die Prüfung der Eindeutigkeit und die Speicherung der Parameterbasis gerechtfertigt? Wurde der Algorithmus auf Geschwindigkeitsverschlechterung gemessen?

In Anbetracht der Tatsache, dass bei der Optimierung in der Regel ein großer Suchraum verwendet wird und die Wahrscheinlichkeit, dass sich Varianten wiederholen, extrem gering ist, und bei kleinen Suchräumen ist es rationeller, eine vollständige Suche durchzuführen.

ZЫ Danke an den Autor für den Denkanstoß.

ZZY Ich habe nicht ganz verstanden, wie die Frage des "sanften" Aufladens von Agenten bei einer festen Größe der Kolonie (oder Population) ohne Ausfallzeit gelöst wird, während ich den Artikel erneut lese.

 

Der Artikel zeigt einige nicht ausgearbeitete Momente auf der MT5-Seite. Zum Beispiel, das Erhalten von Werten von nicht optimierten Parametern in OnTesterInit ohne DLL. Und die gleiche Provision.

Es wäre großartig, dem Quellcode die Möglichkeit hinzuzufügen, das Lesen aller Tester-Parameter über die DLL zu ermöglichen (per Makro). Dafür gibt es fertige Lösungen.


Ein weiterer Wunsch ist die Generierung der Opt-Datei aus den PSO-Pässen.


Es wird notwendig sein, diese Lösung und die Standard-GA in Bezug auf Leistung und Qualität zu vergleichen. Das sollte für jeden Nicht-Syndikator-TC nicht schwierig sein (basierend auf den Quellen aus dem Artikel, da es ein universeller Stil ist).


Der Artikel ist super! Aber nicht für Anfänger.

 

Beendetes Lesen.

Es gibt zu viel Code für die Aufgabe, den Standardoptimierer zu ersetzen, zu viele Einschlüsse, wer soll das verstehen? - Leider wird der Artikel für die große Mehrheit der Leser unverständlich bleiben.

Wie kann man einen beliebigen Expert Advisor nehmen und mit minimalem Aufwand eine PSO-Bibliothek an ihn anschrauben?

Idealerweise sollte der Optimierungsalgorithmus eine völlig eigenständige Einheit sein, so dass man sich nicht jedes Mal damit befassen muss, wenn man einen neuen Expert Advisor (einen beliebigen zu optimierenden Algorithmus) schreiben will.

Außerdem: Welche Algorithmuseinstellungen sind in den meisten praktischen Fällen akzeptabel? - Der Autor hat auf diese Frage keine Antwort gegeben. Und wenn der wissbegierige Leser die Algorithmusparameter unter Verwendung desselben Algorithmus optimieren möchte, wird dies nicht sofort möglich sein, da der Code nicht isoliert ist.

Bitte betrachten Sie das nicht als Nörgelei, aber es gibt kein fertiges Werkzeug ohne Code, der für bestimmte Aufgaben nicht benötigt wird.

 
Andrey Dik:

Ich habe es beendet.

Es gibt zu viel Code für die Aufgabe, den Standardoptimierer zu ersetzen, zu viele Einschlüsse, wer soll das verstehen? - Leider wird der Artikel für die große Mehrheit der Leser unverständlich bleiben.

Wie kann man einen beliebigen Expert Advisor nehmen und mit minimalem Aufwand eine PSO-Bibliothek an ihn anschrauben?

Idealerweise sollte der Optimierungsalgorithmus eine völlig eigenständige Einheit sein, so dass man sich nicht jedes Mal damit befassen muss, wenn man einen neuen Expert Advisor (einen beliebigen zu optimierenden Algorithmus) schreiben will.

Außerdem: Welche Algorithmuseinstellungen sind in den meisten praktischen Fällen akzeptabel? - Der Autor hat auf diese Frage keine Antwort gegeben. Und wenn der wissbegierige Leser die Parameter des Algorithmus mit demselben Algorithmus optimieren möchte, wird dies nicht ohne weiteres möglich sein, da der Code nicht isoliert ist.

Bitte betrachten Sie das nicht als Nörgelei, aber es gibt kein fertiges Werkzeug ohne Code, der für bestimmte Aufgaben unnötig ist.

Natürlich kann man das Unermessliche nicht einfach so hinnehmen. Die zweite Iteration des Open-Source-Tools wurde vorgestellt (die erste, nicht-parallelisierte Version wurde bereits auf dem Blog veröffentlicht). Es ist in dem Sinne fertig, dass man bereits herausgefunden hat, wo man den Code einfügen kann und wie er funktioniert. Ich stimme zu, dass es noch kein Produkt in einer Schachtel gibt. Aber es würde auf dem Markt zum Verkauf stehen. Was hier vorgestellt wird, ist ein Do-it-yourself-Bausatz mit einer fertigen Anleitung.

Was die Inklusivleistungen angeht - sie wurden nicht aus einem guten Leben heraus hinzugefügt, sondern weil es keine ähnlichen internen Möglichkeiten gibt, alles gleich zu machen (und zu brauchen). Und es ist sehr gut, dass all diese Routine-Dinge bereits in Form von includniks bereitstehen, die nur noch angeschlossen werden müssen (wofür vielen Dank an fxsaber-u). Es ist seltsam, sich auf einer Algo-Trading-Seite über die wichtigste Möglichkeit zu beschweren, doppelte Arbeit zu vermeiden. Wenn es diese Einbindungsprogramme nicht gäbe, hätten wir das ganze Projekt von Grund auf neu machen müssen. Und es ist besser, Includniks als Batniks zu haben. Im Allgemeinen gibt es keine Abhängigkeiten von Fremdprogrammen und DLLs. Und es gibt keine (beliebige) Alternative zur eingebauten Optimierungsmethode, die durch kleinen Code implementiert werden kann.

Was die Abstimmung der PSO-Parameter angeht, so ist dies ein offenes Problem für jede Optimierungsmethode. Insbesondere bei der eingebauten GA gibt es einige fest verdrahtete Einstellungen, die der Benutzer nicht ändern kann, und deshalb beschweren sich viele Leute genau über diesen Punkt und müssen bei Ihnen maßgeschneiderte Lösungen auf der Grundlage von GA bestellen. Es stellt sich also heraus, dass das Fehlen von Einstellungen schlecht ist, und wenn sie da sind, ist es auch schlecht, weil Sie sie uns gegeben haben und wir nun nicht wissen, was wir damit tun sollen. Und hier ist, was man mit ihnen tun sollte: Forschung für jede spezifische Aufgabe. Nach fertigen Einstellungen für eine unbekannte Blackbox zu fragen, die ein Experte ist, ist wie die Frage nach idealen Parametern für diesen Experten (ohne Optimierung). Und warum brauchen wir dann die Optimierung selbst? Weil es nicht so einfach ist - weder die Suche nach den Parametern eines Experten noch die Suche nach den Meta-Parametern eines bestimmten Optimierungsalgorithmus. Was Sie fragen, ist so, als ob Sie nach einer fertigen Konfiguration eines neuronalen Netzes für Daten fragen, die noch niemand gesehen hat. Für die meisten Experten == praktischen Fälle gibt es keine optimalen Einstellungen.

Als Ausgangspunkt können wir die Parallele zu GAs aus dem Artikel nehmen: Wenn der Benutzer den GA 1000 Mal ausgeführt hat, soll er die Gruppenzahl auf 1000 setzen, wenn es 100 Generationen im GA gab, sollen es 100 PSO-Zyklen sein, und wenn es 100 Individuen in der Population gab, soll die Schwarmgröße ebenfalls 100 sein.

 
Stanislav Korotky:

Was die Includniks betrifft - sie wurden nicht aus einem guten Leben heraus hinzugefügt, sondern weil es keine ähnlichen Standardwege gibt, um all die gleichen (und notwendigen) Dinge zu tun. Und es ist sehr gut, dass all diese Routine-Dinge bereits fertig in Form von includniks verfügbar sind, die nur noch verbunden werden müssen (danke an fxsaber dafür). Es ist seltsam, sich auf einer Algo-Trading-Site über die wichtigste Möglichkeit zu beschweren, doppelte Arbeit zu vermeiden. Gäbe es diese Einbindungsmöglichkeiten nicht, hätten wir das ganze Projekt von Grund auf neu machen müssen. Und es ist besser, Includniks als Batniks zu haben. Im Allgemeinen gibt es keine Abhängigkeiten von Fremdprogrammen und DLLs. Und keine (beliebige) Alternative zur eingebauten Optimierungsmethode kann durch kleinen Code implementiert werden.

Es macht keinen Sinn, die Funktionalität des Standardtesters in Form von virtuellen Handelsfunktionen zu duplizieren (zumindest sehe ich keinen Sinn darin, diese Arbeit wurde bereits von cleveren, hochbezahlten Jungs von MQ für uns erledigt), aber eine Ergänzung, eine Erweiterung der Funktionalität - ja.

fettgedruckt - vielleicht, in der Tat.

Was die Abstimmung der PSO-Parameter angeht, so ist das ein offenes Problem für jede Optimierungsmethode. Insbesondere bei der eingebauten GA gibt es einige fest verdrahtete Einstellungen, die der Benutzer nicht ändern kann, und deshalb beschweren sich viele Leute genau über diesen Punkt und müssen bei Ihnen maßgeschneiderte Lösungen auf der Grundlage von GA bestellen. Es stellt sich also heraus, dass das Fehlen von Einstellungen schlecht ist, und wenn sie da sind, ist es auch schlecht, weil Sie sie uns gegeben haben und wir jetzt nicht wissen, was wir damit machen sollen. Und was wir mit ihnen tun sollen, ist Folgendes: für jede spezifische Aufgabe forschen. Nach fertigen Einstellungen für eine unbekannte Blackbox zu fragen, die ein Experte ist, ist wie die Frage nach idealen Parametern für diesen Experten (ohne Optimierung). Und warum brauchen wir dann die Optimierung selbst? Weil es nicht so einfach ist - weder die Suche nach den Parametern eines Experten noch die Suche nach den Meta-Parametern eines bestimmten Optimierungsalgorithmus. Was Sie fragen, ist so, als ob Sie nach einer fertigen Konfiguration eines neuronalen Netzes für Daten fragen, die noch niemand gesehen hat. Für die meisten Experten == praktischen Fälle gibt es keine optimalen Einstellungen.

Als Ausgangspunkt können wir die Parallele zu GAs aus dem Artikel nehmen: Wenn der Benutzer den GA 1000 Mal ausgeführt hat, soll er die Gruppenzahl auf 1000 setzen, wenn es 100 Generationen im GA gab, sollen es 100 PSO-Zyklen sein, und wenn es 100 Individuen in der Population gab, soll die Schwarmgröße ebenfalls 100 sein.

Ein fertiges neuronales Netz und ein Optimierungsalgorithmus sind nicht dasselbe, ein neuronales Netz erfordert ein Training auf spezifischen Daten und hängt von der Reinheit, Vollständigkeit und Relevanz der Daten ab, aber ein Optimierungsalgorithmus sollte in keiner Weise von diesen Faktoren abhängen, er sollte sich nicht darum kümmern, ob er das neuronale Netz trainieren (optimieren) oder die optimalen Parameter für sich selbst auf einer Reihe von Testproblemen finden soll.

Wie dem auch sei, meine Kommentare zu dem Artikel sind rein praktisch, aber nicht prinzipiell. Alle Standpunkte zum Problem der Optimierung haben ihre Daseinsberechtigung. Sie sehen es so, ich sehe es etwas anders, und das ist gut so.

In der modernen Welt braucht niemand "build it yourself"-Designer, jeder braucht fertige Lösungen, Mercedes und andere Audis werden nicht gekauft, um fertiggestellt zu werden, sondern um sich daran zu erfreuen... oder zumindest sollte eine kleinblütige Art und Weise, die Lösung an die bestehenden Projekte des Kunden zu schrauben, präsentiert werden.

;)

 

interessanter Artikel

Nicht gefallen hat mir die Umsetzung - die Verknüpfung des virtuellen Handels mit dem Tester,

vielleicht funktioniert es wie beabsichtigt, aber imho sollte die Implementierung für die Optimierung entweder komplett mit Hilfe des virtuellen Handels ( Virtual.mqh ) erfolgen - dann wird es eine Online-Auto-Optimierung,

oder die Implementierung mit Hilfe der Möglichkeiten des Terminal Strategy Testers (OnTesterInit()). - wir würden eine alternative GA für den Tester bekommen, in der jetzigen Implementierung ist es schwierig anzunehmen, wie der Strategietester arbeitet.


Vielen Dank für das interessante Material und die Software-Implementierung, es könnte nützlich sein.

 

Ich werde der Reihe nach antworten.

Die Speicherung von Hashes der berechneten Kombinationen ist optional - sie kann auf Wunsch aus der Quelle ausgeschlossen werden. Das Vorhandensein dieser Prüfung sollte den Prozess nicht wesentlich verlangsamen, verglichen mit der Geschwindigkeit der Berechnung des Handels selbst.

Eine vollständige Aufzählung der Parameter ist nur für sehr kleine Bereiche sinnvoll, aber zwischen diesen und Millionen von Kombinationen gibt es eine ganze Reihe von Anwendungsfällen. Wenn Sie zum Beispiel eine Optimierung für 10000 Kombinationen durchführen müssen, dauert eine vollständige Suche 1 Stunde, aber Sie möchten in wenigen Minuten eine grobe Schätzung erhalten. In diesem Fall brauchen Sie natürlich eine schnelle Optimierungsmethode, und doppelte Kombinationen sind sehr wahrscheinlich. Indem wir sie erkennen, können wir die Verarbeitung beschleunigen.

Das Laden der Agenten ist dem Tester überlassen. Die Handelsdurchgänge sind im Durchschnitt gleichmäßig verteilt (die Anzahl ist gleich und die Komplexität wird aufgrund der Randomisierung gemittelt).

Ich würde gerne Optionsdateien hinzufügen, aber ich schaffe es nicht, das alles auf einmal zu machen. Wenn man alle Optionen einschraubt, wird das Ergebnis nie das Licht der Welt erblicken.

Ich möchte sozusagen von vornherein keine DLLs und externen Programme verwenden.

Die Verwendung von virtuellen Handelsfunktionen macht sehr viel Sinn - sie sind viel schneller als die eingebauten Funktionen. Das ist erstens so. Zweitens erlauben sie es, innerhalb eines Durchgangs (innerhalb einer PSO-Gruppe) viele Parameter in einer Schleife zu ändern. Wäre dies nicht der Fall, müsste jeder einzelne Durchlauf mit der Gruppe synchronisiert werden(die in Bezug auf das Programm zu einer externen Einheit geworden ist ) - und das ist immer noch möglich, entweder durch externe Programme oder durch gemeinsam genutzte Dateien. Und es gäbe neue Super-Bremsen. Aber drittens und letztens, und das ist das Wichtigste: Wenn Sie reguläre Testerpässe ohne Virtualisierung verwenden, ist es unmöglich, Ihren eigenen Optimierungsalgorithmus in MQL einzubauen. Versuchen Sie sich vorzustellen, wie Sie es tun würden. Dies ist nur mit Hilfe von externen Programmen und/oder Batnets möglich. fxsaber hat sogar geeignete "Automatisierer", aber das bedeutet externe Kontrolle über die laufenden Prozesse und die Zusammenstellung ihrer Ergebnisse. Das ist eine Bremse im Quadrat und dazu noch total unpraktisch in der Handhabung. Der Umgang mit diesen externen Controllern erfordert viel mehr Geschick.

Was die Aussage über den kleinen Code für die Implementierung eines Ersatzes für den Standard-Optimierer angeht, würde ich dem nicht zustimmen. Soweit mir bekannt ist, sind die Alternativen auch nicht klein und erfordern die Anpassung von Expertencode. Wenn es eine konkrete Demonstration eines eigenständigen Optimierungsalgorithmus mit kleinem Code und sehr einfachem Einbinden in EA gibt, teilen Sie sie mit der Öffentlichkeit ;-).

Was die Gleichgültigkeit des Optimierungsalgorithmus angeht, als ob er in der Lage sein sollte, jede Aufgabe ohne Anpassung zu bewältigen - da stimme ich nicht zu. Das wäre eine Art Magie, eine "Silberkugel".

Ich sehe keinen grundlegenden Unterschied zwischen dem Optimierungsalgorithmus und dem NS-Algorithmus. Beide haben Meta-Parameter.

Und ja - "es wurde keine Arbeit geleistet, um die Suchfähigkeit des Algorithmus zu untersuchen ", denn man kann nicht viele Bereiche abdecken - es gab bereits viel Arbeit zu tun. Der Zweck der Veröffentlichung besteht darin, sie für diejenigen öffentlich zugänglich zu machen, die forschen und ihre Ergebnisse weitergeben wollen.

Die Auto-Optimierung ist online (sie wurde im Blog veröffentlicht), aber nur in einem Thread, und das Ziel des Artikels war es, den Algorithmus zu parallelisieren. Die Verwendung des Testers als Job-Iterator und die Verteilung an Agenten für die virtuelle Gruppenzählung - das ist der größte Trick des ganzen Projekts. Synergie.

 
Ich füge eine leicht modifizierte Header-Datei und ein Beispiel für einen Test-Expert Advisor bei. Die Klasse Settings, die Hilfsfunktionen und die Template Event Handler sind in der Datei ParticleSwarmEmbed.mqh enthalten. Es wird davon ausgegangen, dass der Benutzer mit ihrer Standardimplementierung zufrieden ist. Dann wird der Code des Expert Advisors ExprBotPSOEmbed.mq5 erheblich vereinfacht. Es genügt, Ihre Handelsberechnung zu beschreiben und Handler in die Klasse PPSO_EventHandlers zu werfen. Auch die Koeffizienten zur Einstellung der PSO-Dynamik (Trägheit usw.) sowie die Deaktivierung der Indexdateien werden in den Eingabevariablen platziert.
 
Kleiner Bugfix in Expression Parser Klassen. Der Fehler wirkt sich nicht auf die Arbeit des Beispiels aus dem Artikel aus, aber er kann andere betreffen.
Dateien: