Diskussion zum Artikel "Neuronale Netze leicht gemacht (Teil 57): Stochastic Marginal Actor-Critic (SMAC)" - Seite 2

 
JimReaper #:
//--- Schicht 5
if (!(descr = new CLayerDescription())) return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count - 1;
descr.window = 3;
descr.step = 1;
descr.window_out = 8;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}

Um den Code einzufügen, müssen Sie die entsprechende Schaltfläche anwenden

Mit freundlichen Grüßen, Vladimir.

 
Wenn Sie dem von JimReaper vorgeschlagenen Schema folgen oder einfach mehr Indikatoren hinzufügen oder die Tiefe der HistoryBars um 50 oder 100 erhöhen, dann werden beim Erstellen einer Datenbank mit Beispielen im Tester durch den Research Expert Advisor weniger Beispiele für einen Optimierungsdurchgang gespeichert. Der Parameter MinProfit ist auf -10000 gesetzt und hat keine Auswirkung. Ich habe zum Beispiel 50 Durchgänge eingestellt, aber nur 41 Durchgänge werden in der Datenbank gespeichert. Je mehr ich außerdem versuche, die Tiefe der HistoryBars-Historie zu erfassen , desto weniger Durchläufe werden in der Datenbank gespeichert. Und wenn ich während der Trainingsiterationen zusätzliche Durchgänge sammle, werden mit jedem Durchgang immer weniger Durchgänge in der Datenbank gespeichert. Mir ist auch aufgefallen, dass die Größe der *. bd-Datei 3 GB nicht überschreiten darf. Es sieht so aus, als ob etwas an der Größe rüttelt. Können Sie mir sagen, wie ich dieses Problem lösen kann?
 
Kann mir jemand helfen, zu verstehen, wie man den Code in dem Artikel zum Testen und für den Demohandel verwendet? Ich bin für jede Hilfe dankbar!
 

Jeder Durchlauf des Test EA erzeugt drastisch unterschiedliche Ergebnisse, als ob das Modell sich von allen vorherigen unterscheiden würde. Es ist offensichtlich, dass sich das Modell bei jedem einzelnen Durchlauf von Test weiterentwickelt, aber das Verhalten dieses EA ist kaum eine Weiterentwicklung.

Hier sind einige Bilder:

Grafik1

Grafik2

Grafik3

 

Kauf- und Verkaufstransaktionen scheinen in den Test- und möglicherweise auch in den Forschungsskripten unzureichend kontrolliert zu werden. Hier sind einige Meldungen:

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 Aktueller Kontostand: Saldo: 9892,14, Guthaben: 0,00, Provision: 0,00, Kumuliert: 0.00, Aktiva: 0.00, Passiva: 0.00, Eigenkapital: 9892.14, Marge: 0.00, FreeMargin: 9892.14

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 berechneter Kontostand: Aktiva: 0.00, Passiva: 0.00, Eigenkapital: 9892.14, Marge: 11359.47, FreeMargin: -1467.33
2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 nicht genug Geld [market buy 0.96 EURUSD.pro sl: 1.06306 tp: 1.08465]

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 gescheiterter Marktkauf 0.96 EURUSD.pro sl: 1.06306 tp: 1.08465 [Kein Geld]

Sofern keine Überschreitung der Marge beabsichtigt ist, würden einfache Limits, die nach Zeile 275 auf buy_lot und nach Zeile 296 auf sell_lot gesetzt werden, dieses Verhalten des Testskripts beseitigen.

 
Chris #:

Jeder Durchlauf des Test EA erzeugt drastisch unterschiedliche Ergebnisse, als ob das Modell sich von allen vorherigen unterscheiden würde. Es ist offensichtlich, dass sich das Modell bei jedem einzelnen Durchlauf von Test weiterentwickelt, aber das Verhalten dieses EA ist kaum eine Weiterentwicklung.

Hier sind einige Bilder:


Dieses Modell verwendet die stochastische Politik des Akteurs. Zu Beginn der Studie können wir also bei jedem Durchgang zufällige Geschäfte sehen. Wir sammeln diese Durchgänge und beginnen erneut mit der Untersuchung des Modells. Und wiederholen diesen Prozess einige Male. Während der Akteur eine gute Politik der Aktionen findet.

 

Lassen Sie uns die Frage anders formulieren. Nachdem wir Proben gesammelt (Forschung) und verarbeitet (Studie) haben, führen wir das Testskript aus. In mehreren konskutiven Durchläufen, ohne Research oder Study, sind die Ergebnisse völlig unterschiedlich.

Das Testskript lädt ein trainiertes Modell im Unterprogramm OnInit (Zeile 99). Hier füttern wir den EA mit einem Modell, das sich während der Testverarbeitung nicht ändern sollte. Es sollte stabil sein, soweit ich das verstehe. Dann sollten sich auch die Endergebnisse nicht ändern.

In der Zwischenzeit führen wir kein Modelltraining durch. Durch den Test werden lediglich mehr Stichproben gesammelt.

Die Zufälligkeit wird eher im Modul Research und möglicherweise in der Study bei der Optimierung einer Strategie beobachtet.

Actor wird in Zeile 240 aufgerufen, um Feedforward-Ergebnisse zu berechnen. Wenn er bei der Erstellung nicht zufällig initialisiert wird, was meiner Meinung nach der Fall ist, sollte er sich nicht zufällig verhalten.

Finden Sie in der obigen Argumentation ein Missverständnis?

 
Chris #:

Lassen Sie uns die Frage anders formulieren. Nachdem wir Proben gesammelt (Forschung) und verarbeitet (Studie) haben, führen wir das Testskript aus. In mehreren konskutiven Durchläufen, ohne Forschung oder Studie, sind die Ergebnisse völlig unterschiedlich.

Das Testskript lädt ein trainiertes Modell in der Unterroutine OnInit (Zeile 99). Hier füttern wir den EA mit einem Modell, das sich während der Testverarbeitung nicht ändern sollte. Es sollte stabil sein, soweit ich das verstehe. Dann sollten sich auch die Endergebnisse nicht ändern.

In der Zwischenzeit führen wir kein Modelltraining durch. Der Test sammelt lediglich weitere Stichproben.

Die Zufälligkeit wird eher im Modul Forschung und möglicherweise in der Studie bei der Optimierung einer Strategie beobachtet.

Actor wird in Zeile 240 aufgerufen, um Feedforward-Ergebnisse zu berechnen. Wenn er bei der Erstellung nicht zufällig initialisiert wird, was meiner Meinung nach der Fall ist, sollte er sich nicht zufällig verhalten.

Finden Sie in der obigen Argumentation ein Missverständnis?

Der Akteur verwendet eine stochastische Politik. Wir implementieren sie mit VAE.

//--- Schicht 10
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronBaseOCL;
   descr.count = 2 * NActions;
   descr.activation = SIGMOID;
   descr.optimization = ADAM;
   if(!actor.Add(descr))
     {
      delete descr;
      return false;
     }
//--- Schicht 11
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronVAEOCL;
   descr.count = NActions;
   descr.optimization = ADAM;
   if(!actor.Add(descr))
     {
      delete descr;
      return false;
     }

Die Schicht CNeuronVAEOCL verwendet die Daten der vorherigen Schicht als Mittelwert und STD der Gauß-Verteilung und entnimmt dieser Verteilung die gleiche Aktion. Zu Beginn setzen wir im Modell zufällige Gewichte ein. So werden zufällige Mittelwerte und STDs erzeugt. Am Ende haben wir zufällige Aktionen bei jedem Durchgang des Modelltests. Zum Zeitpunkt der Untersuchung wird das Modell einige Mittelwerte für jeden Zustand finden und die STD tendiert gegen Null.

Neural networks made easy (Part 21): Variational autoencoders (VAE)
Neural networks made easy (Part 21): Variational autoencoders (VAE)
  • www.mql5.com
In the last article, we got acquainted with the Autoencoder algorithm. Like any other algorithm, it has its advantages and disadvantages. In its original implementation, the autoenctoder is used to separate the objects from the training sample as much as possible. This time we will talk about how to deal with some of its disadvantages.
 
Vielmehr gibt das Testskript einen Einblick in die Fähigkeiten des restlichen Algorithmus. Da es in der Phase der Erstellung der VAE noch einen Freiheitsgrad in Form von variablen, nicht registrierten Anfangsgewichtswerten gibt, ist es nicht möglich, das vollständige, optimale Modell zu ermitteln und neu zu erstellen. Sollte das der Zweck dieses Skripts sein?
 
Das ist ein toller Look.