Fehler, Irrtümer, Fragen - Seite 976

 
Ich werde auch die Tests durchführen und die Ergebnisse aufschreiben.
 
voix_kas:

...

Es ist seltsam, ich habe das gegenteilige Bild:

Ich habe dieses Ergebnis erhalten:

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Fehler, Irrtümer, Fragen

Renat, 2013.04.27 13:32

Ich werde die Tests ebenfalls durchführen und die Ergebnisse aufschreiben.

Es wird interessant sein, das zu sehen.
 

Ich habe völlig vergessen, dass beim Testen von Tags die Zeichnung vollständig aus dem MQL5-System abgeleitet und im Schnittstellen-Thread gezeichnet wird. In MQL5 werden nur die Beschriftungen geändert.

Wenn eine Bitmap gezeichnet wird, wird das gesamte Zeichnen innerhalb von MQL5 durchgeführt und nur ein sehr schnelles einzelnes BitBlt verbleibt im Schnittstellenfluss.

Das heißt, die Prüfung ist völlig falsch, weil die Markerzuordnung überhaupt nicht geprüft wird. Die Aktualisierung des Diagramms ist ein asynchroner Befehl, der nur eine Benachrichtigung an den Schnittstellen-Thread zum Rendern sendet. Wie Sie auf dem Screenshot mit den ChartRedraw-Kosten sehen können.

 
Renat:
Argb_normalize ist besser nicht zu verwenden, da es zusätzliche Kosten für die Farbnormalisierung verursacht. Es ist besser, einfache Dinge in reinen Farben zu malen.

Der Alphakanal hat einen ästhetischen Reiz. Wenn Text "transparent" über Grafiken/Bällen angezeigt wird,liegt der Schluss nahe, dass es eine Aufteilung der Nutzung gibt.

Wenn Sie nur eine Meldung/Statistik anzeigen möchten, ist eine Textbeschriftung schneller.Bei der Erstellung von Steuerelementen (z. B. Schaltflächen) - Bitmap und ohne Optionen. Dann können Sie den gesamten rechteckigen Bereich mit einer Volltonfarbe ohne Alphakanal/Transparenz füllen, ohne dass es zu viel Frust gibt.

 
voix_kas:

Das Entfernen der Funktion ChartRedraw() aus der Schleife ist nicht korrekt, da die "atomare Operation" der Änderung der Textlabel-Eigenschaft nicht von der Video-Engine des Terminals verarbeitet wird.

Ja, genau so, wie die Arbeit mit Arrays nicht von der Video-Engine gehandhabt wird.

Das Problem besteht darin, herauszufinden, was schneller geht - das Ändern einer Bitmap oder das Ändern eines Etiketts.

Erstellung von Bitmaps verliert - das steht fest.

und die Darstellung des Diagramms ist in beiden Fällen umstritten und zweitrangig.


Denken Sie einmal über die Ergebnisse nach: Sie sehen, dass 4 Sekunden pro Zyklus des Etikettenwechsels ???? unsinnig sind.

die Änderungen der Beschriftungen sollten nur bei der Änderung überprüft werden, ohne das Rendering-Subsystem des Diagramms zu beeinträchtigen.

Andernfalls würden Sie vergleichbare Zahlen mit einer Bitmap sehen.

 
Renat:

Ich habe völlig vergessen, dass beim Testen von Tags die Zeichnung vollständig aus dem MQL5-System abgeleitet und im Schnittstellenfluss gezeichnet wird. In MQL5 werden nur die Beschriftungen geändert.

Beim Zeichnen einer Bitmap wird die gesamte Arbeit innerhalb von MQL5 ausgeführt.

Die Beschriftung ändert sich aber immer noch schneller als die Bitmap, was die Geschwindigkeit betrifft. Wegen der langsamen GDI-Funktionen.

Mit anderen Worten: Die Prüfung ist völlig falsch, da die Markenzuordnung überhaupt nicht geprüft wird. Die Aktualisierung des Diagramms ist ein asynchroner Befehl, der nur eine Benachrichtigung an den zu zeichnenden Schnittstellen-Thread sendet. Das können Sie auf dem Screenshot mit den ChartRedraw-Kosten sehen.

Ganz genau.


Ich denke, wir müssen einige spezielle schwere Aufgaben testen. Wer wird eine solche Benchmark-Aufgabe übernehmen?

- Zeichnen eines Diagramms (z. B. Sinuskurve) mit einer Reihe von Beschriftungen (Rechteck) und unter Verwendung einer Bitmap.
- Zeichnen einer Excel-Tabelle (Rechteck+Textbeschriftung) und als Bitmap.

und andere Optionen, bei denen MT-Grafiken durch Bitmaps ersetzt werden können.

Überprüfung der Ressourcenkosten für die Unterstützung einer Bitmap und einer Vielzahl von MT-Objekten . + Abhängigkeit von der Größe der zu füllenden Flächen.

 

Eine weitere Sache, die Sie aus dem Etikettentest ersehen können, ist, dass es einen sehr sparsamen Einweg-Schreibvorgang ohne Leseetiketten gibt. In diesem Fall gibt es eine maximal schnelle Piperisierung des Befehlsflusses pro Schreibvorgang (wir verwenden in diesem Fall absichtlich ein effizientes System).

Wenn man aber das Schreiben mit dem Lesen von Objektdaten vermischt, was in der Praxis oft der Fall ist, sinkt die Geschwindigkeit drastisch.

Update: Auch im Testbeispiel für Marker gibt es einen kritischen Fehler - nur eine Änderung geht an einen Marker, nicht an 26. Schauen Sie sich die Quelle an.

 
Renat:

Das heißt, die Prüfung ist völlig falsch, denn sie prüft überhaupt nicht auf die Zuordnung von Etiketten.

sergeev:

Tag-Änderungen sollten nur auf Änderungen getestet werden, ohne dass das Diagramm-Rendering-Subsystem mit einbezogen wird.

Ich bin da natürlich anderer Meinung. Argument: Es ist wünschenswert, dass der Benutzer die Veränderung der Situation (Statistiken) so oft wie möglich, bei jedem Tick, sieht. Nach der Aktualisierung der Statistiken sollten diese daher angezeigt werden = ChartRedraw().

Es geht sozusagen um die unmittelbare Anwendung/Praxis der Leistung.

Was sphärische Benchmarks im Vakuum betrifft, so ist dies optional.

 
sergeev:

aber die Markierung ändert sich immer noch schneller als die Bitmap, was die Geschwindigkeit betrifft. Wegen der langsamen GDI-Funktionen.

Nein, beim Ändern von Beschriftungen werden keine GDI-Methoden aufgerufen. Überhaupt kein Rendering bei Etiketten in µl5!
 
Renat:

Auch das Beispiel für den Etikettentest enthält einenkritischen Fehler: Es wird nur ein Etikett geändert, nicht 26. Schauen Sie sich die Quelle an.

Der Text ändert sich in allen (der Hälfte) der Beschriftungen, die den Wert des Indikators anzeigen sollen, nicht seine Beschreibung. Wenn Sie das Skript ausführen, können Sie das sehen.

Entweder verstehe ich Sie nicht. Um welche Linie handelt es sich im Einzelnen?