Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Bravo! Nachdem ich ein paar Fehler korrigiert habe, haben Sie mich vom Sockel gestoßen, auch ohne ArrayCopy zu verwenden. Schachmatt. :))
for(;;)
zu
Ausgang noch über Pause
P.S. Nur zum Spaß habe ich eine direkte Kopie über das gesamte Array laufen lassen.Es lohnt sich wahrscheinlich, die
zu
Ausgang noch über Pause
Läuft langsamer als:
Wenn Sie ohne Regeln an diesem Wettbewerb teilnehmen, sollten Sie den Code des "Anführers" (derzeit Kuznetsov) kopieren und ihn entsprechend dem oben beschriebenen Systemverhalten ändern.
Dies führt zu einem stabilen Gewinn von etwa 20 ms gegenüber der ursprünglichen Laufzeit von 740 ms:
Ich bin übrigens neugierig, wie sich die Ergebnisse ändern, wenn die ursprüngliche Anordnung eine Reihe ist. ArraySetAsSeries(arr,true)
Wenn wir diesen Wettbewerb ohne Regeln nehmen, kopieren wir den Code des "Führenden" (derzeit Kuznetsov) und ändern ihn entsprechend dem oben beschriebenen Verhalten des Systems.
Wir erhalten einen stabilen Gewinn von etwa 20 ms gegenüber der ursprünglichen Ausführungszeit von 740 ms:
Es lohnt sich, dies hinzuzufügen. Wenn Sie sich nicht um die Reihenfolge der Array-Elemente kümmern. Dann ja, es ist eine ausgezeichnete Variante. Wenn es wichtig ist, die Konsistenz aufrechtzuerhalten, dann ist etwas anderes erforderlich.
Und wenn wir schon dabei sind, hier ist meine Version:
Ergebnisse:
S.S. Im Prinzip ist die Höchstgeschwindigkeit erreicht. Der nächste Schritt ist nur eine Mikro-Optimierung und das Tüfteln an der for-Schleife:
Ich denke, Nikolais Ergebnis ist ein geschickter Einsatz solcher Mikro-Optimierungen.
Es gibt ein Array, das eine Reihe von Daten des Typs 1,2,3,6,9,5,6,3,25,6,8,7,4 enthält, die Sie benötigen, um z.B. Werte 3 zu entfernen und das gleiche Array ohne 3 und Leerzeichen in der Ausgabe zu erhalten...
Ich bin auf der Suche nach dem schnellsten Weg, um ein Array von unnötigen Werten zu löschen...
Das folgende Beispiel kommt mir in den Sinn
Vielleicht gibt es einen billigeren und schnelleren Weg?
Vladimir, warum ist das notwendig?
Wenn ich es richtig verstanden habe, muss dies mit dem Indikatorpuffer geschehen. Aber wäre es nicht logischer, leere und/oder "unnötige" Werte durch den vorherigen Wert oder z.B. das arithmetische Mittel der Extremwerte zu ersetzen? Dann geht es viel schneller und die Array-Dimension bleibt gleich.
Vladimir, warum ist das notwendig?
Wenn ich es richtig verstanden habe, muss dies mit dem Indikatorpuffer geschehen. Aber wäre es nicht logischer, leere und/oder "unnötige" Werte durch den vorherigen Wert oder z.B. das arithmetische Mittel der Extremwerte zu ersetzen? Dann geht es viel schneller und die Array-Dimension bleibt gleich.
Vladimir, warum ist das notwendig?
Wenn ich es richtig verstanden habe, müssen Sie das mit einem Indikatorpuffer tun. Aber wäre es nicht logischer, die leeren und/oder "unnötigen" Werte durch den vorherigen Wert oder das arithmetische Mittel der Extremwerte zu ersetzen? Dann geht es viel schneller und die Array-Dimension bleibt gleich.
Wenn es mehrere EAs mit einer großen Anzahl von offenen Positionen/Aufträgen in mql4 gibt, ist es meiner Meinung nach einfacher, das Array mit Tickets zu behalten und zu prüfen, ob der Auftrag geschlossen ist, indem man das Array durchgeht, anstatt alle offenen Positionen mit der Prüfung auf Symbol und Magier zu versuchen. Wenn der Auftrag also abgeschlossen ist, sollte er aus dem Array "durchgestrichen" werden. In solchen Fällen habe ich das Array "in sich selbst" kopiert und die Größe des Arrays um eins reduziert. Das wurde von Vasiliy Sokolov vorgeschlagen, vielen Dank, ich werde wissen, dass es nicht die schwierigste Option ist, da ich nie über die Geschwindigkeit nachgedacht habe. Warum die Aufgabe darin bestand, mehrere gleiche Elemente zu entfernen, ist eine andere Frage...
ps Während ich dies schrieb, war die Antwort schon da. Die Frage ist also auch schon falsch... ))))))Wenn es mehrere EAs mit einer großen Anzahl von offenen Positionen/Aufträgen in mql4 gibt, ist es meiner Meinung nach einfacher, das Array mit Tickets zu behalten und zu prüfen, ob der Auftrag geschlossen ist, indem man das Array durchgeht, anstatt alle offenen Positionen mit der Prüfung auf Symbol und Magier zu versuchen. Wenn der Auftrag also abgeschlossen ist, sollte er aus dem Array "durchgestrichen" werden. In solchen Fällen habe ich das Array "in sich selbst" kopiert und die Größe des Arrays um eins reduziert. Das wurde von Vasiliy Sokolov vorgeschlagen, vielen Dank, ich werde wissen, dass es nicht die schwierigste Option ist, da ich nie über die Geschwindigkeit nachgedacht habe. Warum die Aufgabe darin bestand, mehrere gleiche Elemente zu entfernen, ist eine andere Frage...
ps Während ich schrieb, war die Antwort schon da. Es stellt sich heraus, dass die Frage auch schon falsch ist... ))))))Dann habe ich es ungefähr herausgefunden.
Bei einem Array von Aufträgen ist die Reihenfolge nicht wichtig, so dass es sinnvoller ist, die Kuznetsov-Variante zu verwenden, bei der "Löcher" mit Werten aus dem oberen Teil des Arrays gefüllt werden, um den Rest der Arrayelemente nicht zu verschieben. Das ist natürlich schneller.