Optimierung mit dem Strategy Tester - Seite 16

 
Renat:

In den neuesten Builds haben wir die System-Overheads bei Aufgabenläufen vollständig beseitigt und sie von fast 2000 ms auf Null reduziert.

Hier sind die Ergebnisse einer Berechnungsaufgabe, die von joo vorgeschlagen wurde:

Einstellungen (die Datumsangaben sind absichtlich so gewählt, damit der Diagrammverlauf nicht verwendet wird):

Auszuführende Parameter:

Eingesetzte Agenten (4 lokale Agenten):

Optimierungsergebnisse:

Die Optimierung dauerte nur 25 Sekunden und es wurden 18.432 Durchläufe durchgeführt:

Zurück zur alten Optimierungsaufgabe der Handelsstrategietester.

Der Generalplan für das Gebäude 425 wurde verbessert:

  • Reduzierung des System-Overheads zur Vorbereitung der Übergänge
  • Hinzufügen eines expliziten "mathematischen Berechnungsmodus" zur Auswahl des Simulationstyps, der die Einrichtung vereinfacht hat

Wieder mit der gleichen Hardware (4 lokale Agenten) und sauberen Caches im 425er Build:

Tester	optimization passed in 0 minutes 07 seconds
Tester	genetic optimization finished on pass 19456 (of 100000020000001)
Tester	result cache was used 10124 times
Tester	genetics is over

Im Vergleich zumursprünglichen Problem(der Overhead betrug 2 Sekunden pro Durchgang) haben wir das Problem erfolgreich gelöst. Die gleiche Aufgabe begann in 7 Sekunden statt in 25 Sekunden zu zählen.

Die Grundlage für den Kampf gegen den System-Overhead war die Stapelverarbeitung von Aufgaben. Nun wird für jeden Agenten die Ausführungsgeschwindigkeit gemessen, und uns wurde ein Stapel von 1-64 Aufgaben zur Berechnung übergeben. Dadurch verringert sich der Zeitaufwand für die Vorbereitung der Tests und die Ermittlung der Ergebnisse proportional. Schnelle Agenten erhalten mehr Aufgaben und größere Stapelgrößen als langsame Agenten. Dies ist besonders vorteilhaft für schnelle Berechnungsaufgaben, bei denen die nützliche Berechnungszeit mit der Zeit für die Prüfungsvorbereitung und die Weiterleitung der Ergebnisse vergleichbar ist.

Die Arbeiten zur Optimierung der Agentenpflege sind noch nicht abgeschlossen. Für die effiziente Arbeit von Remote-Agenten im MQL5-Cloud-Netzwerk ist die Reduzierung der Kommunikationskosten das wichtigste Thema.

 

Hilfe zum Verstehen!

Die folgenden Codeblöcke funktionieren im Terminal auf einem Demokonto einwandfrei, aber beim Testen geben sie dieFehlermeldung 4109 aus.

if(!ChartGetDouble(0,CHART_PRICE_MAX,0,price_max))
 {
  printf(__FUNCTION__,": Не получены данные по максимальной цене. Ошибка: %g.",GetLastError());
 }

Die gleiche Situation tritt bei

if(!ChartGetDouble(0,CHART_PRICE_MIN,0,price_min))
 {
  printf(__FUNCTION__,": Не получены данные по минимальной цене. Ошибка: %g.",GetLastError());
 }
 
slyusar:

Hilfe zum Verstehen!

Die folgenden Codeblöcke funktionieren im Terminal auf einem Demokonto einwandfrei, aber beim Testen geben sie dieFehlermeldung 4109 aus.

Die gleiche Situation tritt bei

Diagramme und grafische Objekte werden während der Prüfung nicht modelliert, da dies die Prüfgeschwindigkeit drastisch reduziert.
 
Renat:
Diagramme und grafische Objekte werden während der Prüfung nicht modelliert, da dies die Prüfgeschwindigkeit in katastrophaler Weise verringert.
Ich verstehe, danke. Gibt es einen Ausweg aus dieser Situation?
 
Renat:
Diagramme und grafische Objekte werden während der Prüfung nicht modelliert, da dies die Prüfgeschwindigkeit in katastrophaler Weise verringert.
Ich hoffe wirklich, dass diese Art der Simulation ohne Grafik nur im Modus ohne "Visualisierung" möglich sein wird.
 
sergeev:
Ich hoffe wirklich, dass diese Art der Modellierung ohne Grafik nur in einem Modus ohne "Visualisierung" möglich sein wird.
Vollständig unterstützend, Grafiken sind manchmal sehr notwendig...
 
Renat:

Zurück zu der alten Aufgabe der Optimierung des Handelsstrategie-Testers.

Die Verbesserungen am Gesamtplan für das Gebäude 425 führten zu folgenden Ergebnissen:

  • Reduzierung des System-Overheads zur Vorbereitung der Übergänge
  • Hinzufügung des expliziten Modus "mathematische Berechnungen" bei der Auswahl des Simulationstyps, was die Einrichtung vereinfacht hat

Ein weiteres Ergebnis auf der gleichen Hardware (4 lokale Agenten) und saubere Caches in 425 Build:

Im Vergleich zumursprünglichen Problem(der Overhead betrug 2 Sekunden pro Durchgang) haben wir das Problem erfolgreich gelöst. Die gleiche Aufgabe begann in 7 Sekunden statt in 25 Sekunden zu zählen.

Die Grundlage für den Kampf gegen den System-Overhead war die Stapelverarbeitung von Aufgaben. Nun wird für jeden Agenten die Ausführungsgeschwindigkeit gemessen, und uns wurde ein Stapel von 1-64 Aufgaben zur Berechnung übergeben. Dadurch verringert sich der Zeitaufwand für die Vorbereitung der Tests und die Ermittlung der Ergebnisse proportional. Schnelle Agenten erhalten mehr Aufgaben und größere Stapelgrößen als langsame Agenten. Der Effekt ist besonders groß bei schnellen Berechnungsaufgaben, bei denen die Zeit für nützliche Berechnungen mit der Zeit für die Testvorbereitung und das Senden der Ergebnisse vergleichbar ist.

Die Arbeit zur Optimierung der Agentenpflege ist noch nicht abgeschlossen. Für die effiziente Arbeit von Remote-Agenten im MQL5-Cloud-Netzwerk ist die Senkung der Kosten für die Bereitstellung der Kommunikation das wichtigste Thema.

Eine sehr ernsthafte Veränderung zum Besseren - vielen Dank.

Was ist mit der Begrenzung auf 64 Parameter? Es ist der einzige Faktor, zumindest für mich, der die uneingeschränkte Nutzung des Optimierers einschränkt. Ich möchte bereits alle Probleme vergessen und für die "echte" Welt schreiben, damit der Tester ohne Änderungen am Code optimiert werden kann.

 
Wir werden uns mit den Parametern befassen, nachdem wir den Testvisualisierer ausgeführt haben.
 
joo:

Eine sehr ernstzunehmende Änderung zur Verbesserung - vielen Dank.

Was ist mit der 64-Parameter-Grenze? Das ist, zumindest für mich, der einzige Faktor, der den Einsatz des Optimierers in vollem Umfang einschränkt. Und wie gerne würde ich das ganze Gedöns vergessen und sofort "richtigen" Code schreiben, damit ich ihn im Tester ohne Änderungen am Code optimieren kann.

Ich unterstütze Sie.
Renat:
Wir werden uns mit den Parametern nach dem Start des Testvisualisierers befassen.
Danke! Wir werden warten.
 
Renat:

Um auf das alte Problem der Optimierung des Handelsstrategie-Testers zurückzukommen.

Nächste Ergebnisse auf der gleichen Hardware (4 lokale Agenten) und saubere Caches in 425 Build:

Im Vergleich zumursprünglichen Problem(der Overhead betrug 2 Sekunden pro Durchlauf) haben wir das Problem erfolgreich gelöst. Das gleiche Problem tritt nun in 7 Sekunden statt in 25 Sekunden auf.

In der nächsten Build, die veröffentlicht wird, haben wir eine Menge Arbeit geleistet, um die Massenberechnung von mathematischen Problemen zu optimieren. Die Systemkosten wurden auf Null reduziert.

Jetzt dauert die gleiche Aufgabe auf der gleichen Hardware (Intel Q9400, 4 lokale Kerne) für ~18 000 Berechnungen 1 Sekunde (beim letzten Mal waren es 7 Sekunden, während es vorher 25 Sekunden dauerte):

2011.04.04 20:12:34    Tester    optimization passed in 0 minutes 01 seconds
2011.04.04 20:12:34    Tester    genetic optimization finished on pass 18432 (of 1000000002000000001)
2011.04.04 20:12:34    Tester    result cache was used 9718 times
2011.04.04 20:12:34    Tester    genetics is over


Zum Vergleich kann ich zeigen, wie viel Zeit die gleiche mathematische Aufgabe auf der gleichen Hardware für die Berechnung von 4 Millionen Durchläufen benötigt (durch Verringerung des Schrittes auf 0,005 wurde die Gesamtzahl der Berechnungen auf 4 Millionen erhöht, was eine vollständige Berechnung ermöglicht):



2011.04.04 20:10:34    Tester    optimization passed in 0 minutes 46 seconds
2011.04.04 20:10:34    Tester    optimization finished, total passes 4004001


In 46 Sekunden findet die vollständige Fehlberechnung von 4 Millionen Aufgaben statt, das Fenster mit den Optimierungsergebnissen zeigt alle 4 Millionen Zeilen mit Ergebnissen, die gesamte Tabelle wird sofort nach beliebigen Feldern sortiert, der Optimierungsgraph rendert zügig alle 4 Millionen Werte, der 3D-Graph zeichnet eine 3D-Oberfläche aus denselben Ergebnissen und dreht sie in verschiedenen Winkeln: