Diskussion zum Artikel "Neuronale Netze leicht gemacht (Teil 50): Soft Actor-Critic (Modelloptimierung)"

 

Neuer Artikel Neuronale Netze leicht gemacht (Teil 50): Soft Actor-Critic (Modelloptimierung) :

Im vorigen Artikel haben wir den Algorithmus Soft Actor-Critic (Akteur-Kritiker) implementiert, konnten aber kein profitables Modell trainieren. Hier werden wir das zuvor erstellte Modell optimieren, um die gewünschten Ergebnisse zu erzielen.

Wir fahren fort mit der Untersuchung des Algorithmus Soft Actor Critic. Im vorherigen Artikel haben wir den Algorithmus implementiert, konnten aber kein profitables Modell trainieren. Heute werden wir uns mit möglichen Lösungen befassen. Eine ähnliche Frage wurde bereits in dem Artikel „Modell der Prokrastination, Gründe und Lösungen“ aufgeworfen. Ich schlage vor, unser Wissen in diesem Bereich zu erweitern und neue Ansätze am Beispiel unseres Soft Actor-Critic-Modells zu prüfen.



Bevor wir direkt zur Optimierung des von uns erstellten Modells übergehen, möchte ich Sie daran erinnern, dass Soft Actor-Critic ein Verstärkungslernalgorithmus für stochastische Modelle in einem kontinuierlichen Aktionsraum ist. Das Hauptmerkmal dieser Methode ist die Einführung einer Entropiekomponente in die Belohnungsfunktion.

Durch die Verwendung einer stochastischen Actors-Politik ist das Modell flexibler und in der Lage, Probleme in komplexen Umgebungen zu lösen, in denen einige Handlungen ungewiss sind oder keine klaren Regeln festgelegt werden können. Diese Strategie ist oft robuster, wenn es um Daten geht, die viel Rauschen enthalten, da sie die probabilistische Komponente berücksichtigt und nicht an klare Regeln gebunden ist.

Autor: Dmitriy Gizlyk

 
//--- Akteur
actor.Clear();
//--- Eingabeschicht
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
int prev_count = descr.count = (HistoryBars * BarDescr);
descr.window = 0;
descr.activation = Keine;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
// Schicht 1 | Mehrschichtige Mehrkopf-Aufmerksamkeitsschicht - 1
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Akteur] Schicht 1: Multilayer Multi-Head Attention Layer - 1: Daten erfolgreich übergeben.\n");
//--- Schicht 2 | Batch-Normalisierungsschicht
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBatchNormOCL;
descr.count = prev_count;
descr.batch = 1000;
descr.activation = Keine;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Akteur] Schicht 2: Batch-Normalisierungsschicht: Daten erfolgreich übergeben.\n");
// Schicht 3 | Mehrschichtige Multi-Head-Aufmerksamkeitsschicht - 2
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Akteur] Schicht 3: Multilayer Multi-Head Attention Layer - 2: Daten erfolgreich übergeben.\n");
//--- Schicht 2
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count - 1;
descr.window = 2;
descr.step = 1;
descr.window_out = 8;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 3
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count;
descr.window = 8;
descr.step = 8;
descr.window_out = 8;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 7 | Faltungsschicht - 4
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = 8;
descr.step = 1;
descr.window_out = 9;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Schicht 7: Faltungsschicht - 4: Daten erfolgreich übergeben.\n");
//--- Schicht 8 | Faltungsschicht - 5
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = 9;
descr.step = 1;
descr.window_out = 7;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Schicht 8: Faltungsschicht - 5: Daten erfolgreich übergeben.\n");
//--- Schicht 9 | Faltungsschicht - 6
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = 7;
descr.step = 1;
descr.window_out = 5;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Schicht 9: Faltungsschicht - 6: Daten erfolgreich übergeben.\n");
//--- Schicht 10 | Faltungsschicht - 7
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count;
descr.window = 5;
descr.step = 1;
descr.window_out = 4;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Schicht 10: Faltungsschicht - 7: Daten erfolgreich übergeben.\n");
// Schicht 11 | Mehrschichtige Mehrkopf-Aufmerksamkeitsschicht - 3
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Schicht 11: Mehrschichtige Mehrkopf-Aufmerksamkeitsschicht - 3: Daten erfolgreich übergeben.\n");
// Schicht 12 | Mehrschichtige Mehrkopf-Aufmerksamkeitsschicht - 4
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Schicht 12: Mehrschichtige Mehrkopf-Aufmerksamkeitsschicht - 4: Daten erfolgreich übergeben.\n");
// Schicht 13 | Mehrschichtige Mehrkopf-Aufmerksamkeitsschicht - 5
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Akteur] Schicht 13: Multilayer Multi-Head Attention Layer - 5: Daten erfolgreich übergeben.\n");
//--- Schicht 4
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 2048;
descr.optimisation = ADAM;
descr.activation = LReLU;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 5
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
// Schicht 13 | Mehrschichtige Multi-Head-Aufmerksamkeitsschicht - 5
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Akteur] Schicht 13: Multilayer Multi-Head Attention Layer - 5: Daten erfolgreich übergeben.\n");
//--- Schicht 6
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConcatenate;
descr.count = LatentCount;
descr.window = prev_count;
descr.step = AccountDescr;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 16 | Softmax-Schicht
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronSoftMaxOCL;
descr.count = 1024;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Softmax Layer: Daten erfolgreich übergeben.\n");
//--- Schicht 7
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 8
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 8
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 9
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronSoftActorCritic;
descr.count = NActions;
descr.window_out = 32;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Critic
critic.Clear();
//--- Eingabeschicht
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = LatentCount;
descr.window = 0;
descr.activation = Keine;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
descr. löschen;
return false;
}
//--- Ebene 1
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronConcatenate;
descr.count = 1024;
descr.window = prev_count;
descr.step = 6;
descr.optimisation = ADAM;
descr.activation = LReLU;
if(!critic.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 2
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 3
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic. Add(descr))
{
descr. löschen;
return false;
}
--- Schicht 4
if(!( descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 1;
descr.optimisation = ADAM;
descr.activation = Keine;
if(!critic. Add(descr))
{
descr. löschen;
return false;
}
//---
return true;
}
 
//--- Akteur
actor.Clear();
//--- Eingabeschicht
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
int prev_count = descr.count = (HistoryBars * BarDescr);
descr.window = 0;
descr.activation = Keine;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
// Schicht 1 | Mehrschichtige Mehrkopf-Aufmerksamkeitsschicht - 1
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Akteur] Schicht 1: Multilayer Multi-Head Attention Layer - 1: Daten erfolgreich übergeben.\n");
//--- Schicht 2 | Batch-Normalisierungsschicht
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBatchNormOCL;
descr.count = prev_count;
descr.batch = 1024;
descr.activation = Keine;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Akteur] Schicht 2: Batch-Normalisierungsschicht: Daten erfolgreich übergeben.\n");
// Schicht 3 | Mehrschichtige Multi-Head-Aufmerksamkeitsschicht - 2
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Akteur] Schicht 3: Multilayer Multi-Head Attention Layer - 2: Daten erfolgreich übergeben.\n");
//--- Schicht 4
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count - 1;
descr.window = 2;
descr.step = 1;
descr.window_out = 8;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 5
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count;
descr.window = 8;
descr.step = 8;
descr.window_out = 8;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 6 | Faltungsschicht - 4
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = 8;
descr.step = 1;
descr.window_out = 9;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Schicht 7: Faltungsschicht - 4: Daten erfolgreich übergeben.\n");
//--- Schicht 7 | Faltungsschicht - 5
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = 9;
descr.step = 1;
descr.window_out = 7;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Schicht 8: Faltungsschicht - 5: Daten erfolgreich übergeben.\n");
//--- Schicht 8 | Faltungsschicht - 6
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = 7;
descr.step = 1;
descr.window_out = 5;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Schicht 9: Faltungsschicht - 6: Daten erfolgreich übergeben.\n");
//--- Schicht 9 | Faltungsschicht - 7
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count;
descr.window = 5;
descr.step = 1;
descr.window_out = 4;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Schicht 10: Faltungsschicht - 7: Daten erfolgreich übergeben.\n");
// Schicht 10 | Mehrschichtige Mehrkopf-Aufmerksamkeitsschicht - 3
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Layer 11: Multilayer Multi-Head Attention Layer - 3: Data successfully passed.\n");
// Schicht 11 | Mehrschichtige Mehrkopf-Aufmerksamkeitsschicht - 4
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Akteur] Schicht 12: Multilayer Multi-Head Attention Layer - 4: Daten erfolgreich übergeben.\n");
//--- Schicht 12
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronLSTMOCL;
descr.count = 1024;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Ebene 13
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
// Schicht 14 | Mehrschichtige Multi-Head Aufmerksamkeitsschicht - 5
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Akteur] Schicht 13: Multilayer Multi-Head Attention Layer - 5: Daten erfolgreich übergeben.\n");
//--- Schicht 15
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConcatenate;
descr.count = LatentCount;
descr.window = prev_count;
descr.step = AccountDescr;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 16 | Softmax-Schicht
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronSoftMaxOCL;
descr.count = 1024;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
if (!actor.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Softmax Layer: Daten erfolgreich übergeben.\n");
//--- Ebene 17
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Ebene 18
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Ebene 19
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Ebene 20
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Ebene 21
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronSoftActorCritic;
descr.count = NActions;
descr.window_out = 32;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
if(!actor.Add(descr))
{
descr löschen;
return false;
}
//--- Critic
critic.Clear();
//--- Eingabeschicht
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = LatentCount;
descr.window = 0;
descr.activation = Keine;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
descr. löschen;
return false;
}
// Schicht 1 | Mehrschichtige Mehrkopf-Aufmerksamkeitsschicht - 4
if (!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!critic.Add(descr))
{
descr löschen;
return false;
}
PrintFormat("[Actor] Layer 12: Multilayer Multi-Head Attention Layer - 4: Data successfully passed.\n");
//--- Schicht 2
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConcatenate;
descr.count = 512;
descr.window = prev_count;
descr.step = 6;
descr.optimisation = ADAM;
descr.activation = LReLU;
if(!critic.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 3
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 4
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
descr löschen;
return false;
}
//--- Schicht 5
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic. Add(descr))
{
descr. löschen;
return false;
}
--- Schicht 6
if(!( descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 1;
descr.optimisation = ADAM;
descr.activation = Keine;
if(!critic. Add(descr))
{
descr. löschen;
return false;
}
//---
return true;


Das Bild kann auch einfach in den Text gezogen werden oder mit Strg+V eingefügt werden
 
Die Recherche führt zu keinen positiven Transaktionen. Es gibt keine Dateien im Datenverzeichnis. Die Datei SoftAC.bd im gemeinsamen Datenordner scheint leer zu sein (12 Bytes). Die Studie bleibt nicht am Diagramm hängen. Können Sie mir sagen, was zu tun ist?
 
star-ik #:
Die Recherche führt zu keinen positiven Transaktionen. Es gibt keine Dateien im Datenverzeichnis. Die Datei SoftAC.bd im gemeinsamen Datenordner scheint leer zu sein (12 Bytes). Die Studie bleibt nicht am Diagramm hängen. Können Sie mir sagen, was zu tun ist?

1. die Differenz der positiven Abschlüsse bei den ersten Durchgängen von Research ist ganz natürlich, da absolut zufällige Netzwerke verwendet werden. Und genauso zufällig werden auch die Trades sein. Wenn Sie den Expert Advisor starten, stellen Sie MinProfit so negativ wie möglich ein. Dann wird die Datei SoftAC.bd mit Beispielen für das anfängliche Training des Modells gefüllt.

2. Es gibt eine Überprüfung in der Study-Datei. Sie funktioniert nicht, wenn keine Beispiele in SoftAC.bd vorhanden sind. Sie hat keine Daten für das Modelltraining.

 
Danke, das hat geholfen. Die grünen Punkte begannen zu erscheinen. Ich wusste nicht, dass MinProfit auch im negativen Bereich eingestellt werden kann. Aber es gibt noch eine weitere Frage. Muss ich die erste Datenbank manuell löschen? Und welche Datei?
 
star-ik #:
Danke, das hat geholfen. Die grünen Punkte begannen zu erscheinen. Ich wusste nicht, dass MinProfit auch im negativen Bereich eingestellt werden kann. Aber es gibt noch eine weitere Frage. Ist es notwendig, die erste Datenbank manuell zu löschen? Und welche Datei?

Die gesamte Beispieldatenbank befindet sich in SoftAC.bd. Ich habe die erste Datei manuell gelöscht. Aber im EA gibt es eine Konstante MaxReplayBuffer 500, die die Größe der Beispieldatenbank auf 500 Trajektorien begrenzt. Wenn Sie wollen, können Sie die Dateien ändern und neu kompilieren. So können Sie nur die letzten 500 Trajektorien in der Beispieldatenbank behalten.

 
Dmitriy Gizlyk #:

Die gesamte Beispieldatenbank befindet sich in SoftAC.bd. Ich habe das erste Beispiel manuell gelöscht. Aber der Expert Advisor hat eine Konstante MaxReplayBuffer 500, die die Größe der Beispieldatenbank auf 500 Trajektorien begrenzt. Wenn Sie wollen, können Sie die Dateien ändern und neu kompilieren. So können Sie nur die letzten 500 Trajektorien in der Beispieldatenbank behalten.

Nochmals vielen Dank.

 

Dmitry, werden beim Füllen der Beispieldatenbank und beim Hinzufügen neuer Beispiele die ältesten Beispiele gelöscht oder werden sie versehentlich gelöscht? Oder ist es notwendig, eine Datenbank von Beispielen für die gesamte Anzahl von Trades zu haben, unter Berücksichtigung der Ergänzungen im Training, eine Datenbank von 1000 Trajektorien?

Und es steht geschrieben, dass Sie den Test mit dem Expert Advisor Test.mqh (nach 500 000 Iterationen des Trainings) 10 Mal durchgeführt haben, wenn ich das richtig verstanden habe. Und dann sagten Sie, dass Sie die Sammlung - Training - Test 15 weitere Male (Zyklen) durchgeführt haben. Und Sie haben ein funktionierendes Modell. Ich verstehe also nicht, haben Sie den Expert Advisor Test.mqh in jeder Phase des Zyklus 10 Mal ausgeführt oder nicht? Das Problem, das ich habe, ist, dass, wenn ich das tue, ich mehr negative Beispiele in der Basis habe und der Expert Advisor schließlich beginnt, im negativen Bereich zu handeln.

Nehmen wir an, ich habe eine Basis von 200 Trajektorien gesammelt. Ich habe sie für 100.000 Iterationen trainiert. Dann fügte ich 10 Durchläufe aus dem Test hinzu. und Research.mqh fügte der Datenbank 10-15 neue Beispiele hinzu. Ich setzte die MinProfit-Grenze zum Beispiel auf -3000.

Ich mache das nächste Training (100 000 Iterationen). Wieder füge ich 10 Testdurchläufe und 10-15 aus Research.mqh hinzu . MinProfit setze ich z.B. -2500.

Ich trainiere erneut (100 000 Iterationen). Wieder 10 Tests und 10-15 Beispiele aus Research.mqh. MinProfit=-2000.

Und so weiter. Verstehe ich das? Was mich verwirrt, ist, dass der Test oft sehr große negative Durchgänge mit -7000 oder sogar -9000 liefert. Und davon gibt es eine Menge in der Basis. Wurde das Netz nicht absichtlich so trainiert, dass es im negativen Bereich handelt?

Und was ist zu tun, wenn die Testdurchläufe ein schlechteres Ergebnis als beim letzten Mal ergeben? Sollte ich MinProfit auf die negative Seite ändern ? Und was ist zu tun, wenn Research.mqh bei 100 Durchläufen mit einem bestimmten Grenzwert (z. B. MinProfit=-500) nichts in der Datenbank findet und hinzufügt?

 
Viktor Kudriavtsev Anzahl von Geschäften zu haben, unter Berücksichtigung der Ergänzungen im Training, eine Basis von sagen wir 1000 Trajektorien?

Die ältesten Beispiele werden gelöscht. Die Datenbank ist nach dem FIFO-Prinzip organisiert - first in - first out.

 
Viktor Kudriavtsev #:

Und hier steht geschrieben, dass Sie den Test mit dem Expert Advisor Test.mqh (nach 500 000 Iterationen des Trainings) 10 Mal durchgeführt haben, wenn ich das richtig verstanden habe. Und dann sagten Sie, dass Sie Sammlung - Training - Test 15 weitere Male (Zyklen) durchgeführt haben. Und Sie haben ein funktionierendes Modell. Ich verstehe also nicht, haben Sie den Expert Advisor Test.mqh in jeder Phase des Zyklus 10 Mal ausgeführt oder nicht? Das Problem, das ich habe, ist, dass, wenn ich das tue, ich mehr negative Beispiele in der Basis erhalte und der Expert Advisor schließlich beginnt, im negativen Bereich zu handeln.

Ich führe im Strategietester 10 Einzeldurchläufe durch, um die Streuungsgrenzen der Modellergebnisse abzuschätzen. Und ich wähle das obere Quantil, um die besten Trajektorien bei der anschließenden Sammlung von Trajektorien im Optimierungsmodus auszuwählen.