Fehler, Irrtümer, Fragen - Seite 2276

 

Wenn ich einen Teil eines großen Arrays mit einem einzelnen Z-Wert füllen muss, verwende ich das Konstrukt:

ArrayInitialize(ar,Z);     // промежуточный массив размер массива ar = 1000 
ArrayCopy(arr,ar,5000);    // основной массив заполняется значением Z c 5000 по 5999 элемент


Viele Händler werden sagen, warum ist das so kompliziert, es geht auch einfacher:

ArrayFill(arr,5000,1000,Z);

Aber aus irgendeinem unbekannten Grund läuft die erste Variante, die ein Zwischenfeld verwendet, merklich schneller als die zweite

2018.09.04 11:01:17.222 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 338
2018.09.04 11:01:17.222 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 111
2018.09.04 11:01:18.563 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 301
2018.09.04 11:01:18.563 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 122
2018.09.04 11:01:19.717 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 334
2018.09.04 11:01:19.717 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 142
2018.09.04 11:01:21.095 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 364
2018.09.04 11:01:21.095 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 156

Zu diesem Thema habe ich bereits vor einigen Jahren an CA geschrieben. Ich erhielt eine Antwort, in der mir mitgeteilt wurde, dass ich das Problem gefunden und behoben habe und dass es in der nächsten Version behoben sein würde.

Aber das Problem bleibt bestehen.

Ich habe denselben Test in MT4 durchgeführt:

2018.09.04 11:08:21.258 TestArrayFill EURUSD,H1: Время заполнения через ArrayInitialize + ArrayCopy = 113
2018.09.04 11:08:21.258 TestArrayFill EURUSD,H1: Время заполнения через ArrayFill = 78
Dateien:
 
Nikolai Semko:

Wenn ich einen Teil eines großen Arrays mit einem einzelnen Z-Wert füllen muss, verwende ich das Konstrukt:


Viele Händler werden sagen, warum ist es so kompliziert, es kann doch einfacher sein:

Aber aus irgendeinem unbekannten Grund läuft die erste Variante, die ein Zwischenfeld verwendet, merklich schneller als die zweite

Zu diesem Thema habe ich bereits vor einigen Jahren an CA geschrieben. Ich erhielt eine Antwort, in der mir mitgeteilt wurde, dass ich das Problem gefunden und behoben habe und dass es in der nächsten Version behoben sein würde.

Aber das Problem bleibt bestehen.

Ich habe denselben Test in MT4 durchgeführt:

Vielleicht ist dies ein guter Ort, um sich zu melden.

 
Artyom Trishkin:

Vielleicht ist dies ein guter Ort, um sich zu melden.

Welch eine Besonderheit und Raffinesse!
Die wichtige Standardfunktion für die Arbeit mit Arrays in der schnellsten algorithmischen Handelssprache der Welt ist viermal langsamer als in der veralteten Sprache MQL4.
Nur hier.

Das ist ein klares Feindbild.
Können Sie sich vorstellen, wie viele Programme scheitern werden, wenn das Problem behoben ist?
 
Nikolai Semko:

Welch eine Besonderheit und Raffinesse!
Die wichtige Standardfunktion für die Arbeit mit Arrays in der schnellsten algorithmischen Handelssprache der Welt ist viermal langsamer als in der veralteten Sprache MQL4.
Nur hier.

Das ist ein klares Feindbild.
Können Sie sich vorstellen, wie viele Programme betroffen sein werden, wenn das Problem behoben ist?

Gut.

Aber ist das, was derzeit angeboten wird, eine schlechte Sache?
 
Artyom Trishkin:

Gut.

Aber ist das, was derzeit angeboten wird, eine schlechte Sache?
Ja, wahrscheinlich habe ich das Problem nicht richtig beschrieben. Es sah so aus, als ob ich über seine Lösung sprechen würde.
Nein, natürlich nicht. Ich habe versucht, das Problem zu formulieren. Die Option der Zwischenablage ist keine Lösung für das Problem, da die Ausführung länger dauert, als sie aufgrund der Speicherlogik sollte, und außerdem zu einem zusätzlichen Speicherverbrauch führt.
 
Artyom Trishkin:

Gut.

Aber ist das, was derzeit angeboten wird, eine schlechte Sache?

Eine Anekdote.

Ein alter Mann geht zum Arzt. Er sagt:

- Herr Doktor, mein Rücken tut weh.

- Bücken Sie sich. Tut es weh?

- Das tut weh.

- Bücken Sie sich mehr!

- So, das fühlt sich besser an...

- So! So läuft man!

)))))

 
Nikolai Semko:

Wenn ich einen Teil eines großen Arrays mit einem Z-Wert füllen muss, verwende ich eine Konstruktion:


Viele werden sagen, warum ist das so kompliziert - es geht auch einfacher:

Aber aus irgendeinem unbekannten Grund funktioniert die erste Variante mit einem Zwischenfeld viel schneller als die zweite

Das verstehe ich nicht! Warum mussten Sie einen Teil eines großen Arrays mit einem einzelnen Z-Wert füllen? Oder welche Daten weisen Sie dem Array zu, zu welchem Zweck? Close, AVG, RSI Werte? Aber sind sie nicht im Speicher von MetaTrader vorhanden, nachdem der Indikator geladen wurde? Ich habe mit dem Array 0 und 1 gespielt und schließlich das Wort SOS erhalten, d.h. ich habe S den Wert 0 und O den Wert 1 zugewiesen. Überprüfen Sie dann die Füllzeit für die Größe der einzelnen Felder. Dann zähle alles zusammen und teile durch 4.
 
Bob1Thec:
Ich kann das nicht verstehen! Warum mussten Sie einen Teil eines großen Arrays mit einem einzigen Z-Wert füllen? Oder welche Daten weisen Sie dem Array zu, zu welchem Zweck?
Der einfarbige Hintergrund (einschließlich Transparenz) eines Bildes wird auf diese Weise erstellt.
 
fxsaber:
Der einfarbige Hintergrund (einschließlich Transparenz) eines Bildes wird auf diese Weise erstellt.

genauer gesagt ein Hintergrund mit Farbverlauf

 
Nikolai Semko:

genauer gesagt ein Hintergrund mit Farbverlauf

Ich habe keine Ahnung, was das Füllen eines Arrays mit einem einzelnen Wert hier zu suchen hat.