Ermitteln der Anzahl der Dezimalstellen beliebiger Zahlen (nicht nur Anführungszeichen) unter Umgehung von Digits() in MQL4 und MQL5 - Seite 21
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
Vorerst auf der Straße. Sie können es selbst ausprobieren. Die Idee ist, Unions mit Arrays von Strukturen unterschiedlicher Größe zu verwenden, z.B. 10, 100, 1000, 10000...
Diese Idee wurde aufgegriffen. In diesem Fall
Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien
Ermitteln der Anzahl der Dezimalstellen beliebiger Zahlen (nicht nur Anführungszeichen) unter Umgehung von Digits() in MQL4 und MQL5
fxsaber, 2018.12.08 16:25
Ich habe natürlich verschiedene Größen ausprobiert. Aus irgendeinem Grund haben sie keinen Einfluss auf das Ergebnis.
Diese Idee wurde aufgegriffen. Auf diese Weise
Sie können alles im Quellenbuch nachlesen.Ja, ich habe es nachgeschlagen. Seltsam, dass es keine Wirkung hat.
Es gibt eine Zeile im Quelltext, die die Größe steuert
Sie können diesen Wert ändern und das Ergebnis sehen. Wenn der Wert größer als hundert ist, erhöht sich die Geschwindigkeit nicht. Das ist eigentlich leicht zu erklären, denn es werden insgesamt immer die gleiche Anzahl von Elementen kopiert. Und die Verzögerungen, die mit kleinen Kopierportionen verbunden sind, werden eliminiert.
Ich fürchte, wir sind bereits auf maximale Leistung festgelegt.
Ja, ich stimme zu.
Ich habe es versucht - das gleiche Ergebnis wie in Ihrem TicksToIntArray_fxsaber4/IntArrayToTicks_fxsaber4
Sie haben den Quellcode, Sie können ihn selbst messen.
Also messen Sie es. Ich bin mir ziemlich sicher, dass ich das nicht tue, also sehe ich keinen Grund, meine Zeit mit dem Artikel oder der Messung zu verschwenden.
Ich fürchte, wir sind bereits an der Grenze der Leistungsfähigkeit angelangt.
Um ehrlich zu sein, bin ich sehr überrascht, dass sie es geschafft haben, so nah an memcpy heranzukommen. Das kann einfach nicht sein. Irgendetwas stimmt hier nicht.
Ich fürchte, wir sind bereits auf die maximale Leistung festgelegt.
Ich glaube, ich verstehe einen schwerwiegenden Rechenfehler Ihrerseits.
Ihr BANCH wählt das Minimum von 50 absolut identischen Läufen aus.
Aber der Compiler ist ein großer Klugscheißer und faul. Es wird nicht 50 Mal die gleiche Aufgabe erledigen und den Code optimieren. Deshalb sollten Sie zumindest die Arrays bei jedem Durchlauf wechseln. Oder Sie können 50 durch 1 ersetzen und die Anzahl der Tests erhöhen. Dann werden die Ergebnisse ganz anders und objektiver sein.
Wenn der Unterschied zu memcpy 40% beträgt, ist es plausibler
Ich frage mich, ob die Komprimierung des Arrays eine Auswirkung haben wird. Ein Array von Ticks kann um den Faktor 10-12 komprimiert werden. Es stellt sich nur die Frage, ob dies zu einer Zeitersparnis beim Senden und Empfangen durch die Ressource führen wird.
Ich glaube, ich verstehe einen schwerwiegenden Rechenfehler von Ihnen.
Ihr BANCH wählt das Minimum von 50 absolut identischen Läufen.
Aber der Compiler ist ein großer Klugscheißer und faul. Es wird nicht 50 Mal die gleiche Aufgabe erledigen, sondern den Code optimieren.
Der Code ist so geschrieben, dass er genau das tut, was er tun soll. Der Compiler kann die Geschwindigkeit von memcpy nicht beeinflussen, aber die Ergebnisse der Durchläufe sind wie folgt
Eine Schleife mit einem Durchgang
Von 50
Der Code ist so geschrieben, dass er genau das tut, was Sie wollen. Der Compiler ist nicht in der Lage, die Geschwindigkeit von memcpy zu beeinflussen, aber die Ergebnisse der Durchläufe sind
Eine Schleife mit einem Durchgang
Von 50.
Also messen Sie es. Ich bin mir ziemlich sicher, dass ich das nicht tue, also sehe ich keinen Grund, meine Zeit mit dem Artikel oder der Messung zu verschwenden.
Das muss ich nicht.