Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   ArrayResize Doks (http://www.expert-advisor.com/forum/showthread.php?t=7061)

AVT 05.08.21 11:43

ArrayResize Doks
 
Ich verstehe die Doks nicht so ganz. Könnte mir jemand das bitte erklären.

Das ursprüngliche Problem (ich habe bisher noch nicht versucht, die Ursache herauszufinden):
Sämtliche Orders werden in einem Struct Array festgehalten.
Dieses Array bekommt seine Größe von einer Benutzereingabe MaxOrders, z.B. 5.
Das heißt das Array zählt von 0-4, rein theoretisch sollte es also 5 Orders festhalten können.
Konnte es aber nicht, die 5. Order legte den EA lahm (Array out of range).
Wie gesagt, die Ursache dafür muß ich noch finden, das steht aber auf einem anderen Blatt.

Frage: Wenn ich bei ArrayResize(ArrayName,MaxOrders) den 3.Parameter verwenden will, bekomme ich dann automatisch eine Reserve, falls ich mehr als 5 Orders habe? Also im Beispielfall, wenn vorher nur MaxOrders=5 war, ich aber ArrayResize(ArrayName,MaxOrders,MaxOrders) setze, heißt das dann, ich kann das Array um weitere 5 Orders überschreiten, bevor gemeckert wird?
(Diese ganze Memory allocation Sache finde ich mehr als verwirrend.)

Danke. AVT

Indikator-Trading 05.08.21 13:48

Zitat:

Zitat von AVT (Beitrag 45583)
Das ursprüngliche Problem (ich habe bisher noch nicht versucht, die Ursache herauszufinden):
Sämtliche Orders werden in einem Struct Array festgehalten.
Dieses Array bekommt seine Größe von einer Benutzereingabe MaxOrders, z.B. 5.
Das heißt das Array zählt von 0-4, rein theoretisch sollte es also 5 Orders festhalten können.
Konnte es aber nicht, die 5. Order legte den EA lahm (Array out of range).
Wie gesagt, die Ursache dafür muß ich noch finden, das steht aber auf einem anderen Blatt.

Hierbei kann ich dir nur helfen, wenn du den entsprechenden Code teilen würdest.

Zitat:

Zitat von AVT (Beitrag 45583)
Frage: Wenn ich bei ArrayResize(ArrayName,MaxOrders) den 3.Parameter verwenden will, bekomme ich dann automatisch eine Reserve, falls ich mehr als 5 Orders habe? Also im Beispielfall, wenn vorher nur MaxOrders=5 war, ich aber ArrayResize(ArrayName,MaxOrders,MaxOrders) setze, heißt das dann, ich kann das Array um weitere 5 Orders überschreiten, bevor gemeckert wird?
(Diese ganze Memory allocation Sache finde ich mehr als verwirrend.)
Danke. AVT

Für diesen Fall, finde ich ausnahmsweise mal die Doku gar nicht so schlecht.
Die Reserve macht nur Sinn, wenn du ein großes Array häufig in der Größe über ArrayResize verändern willst.
Also du hast ein Array mit der Größe von 1000 und setzt die Reserve auch auf 1000.
Jetzt kannst du die Größe des Arrays auf irgend etwas <=1000 setzen, es wird aber kein neuer Speicherplatz für das Array herangezogen. Das Initialisieren ist somit viel schneller.

Z.B.


Ansprechen kannst du diesen Reservierten Bereich allerdings nicht, da das ja jetzt nur freigehaltener Speicherplatz ist.

double MyArray[];
ArrayResize(MyArray,1000,1000); // Erster Resize mit Reserve
ArrayResize(MyArray,10,1000); // dieser ArrayResize würde schneller ausgeführt werden!
MyArray[9] = 10; // Kein Problem, da die Größe ja 10 beträgt!
MyArray[10] = 0; // Dies würde zu einem Compilerfehler führen!

Ohne Reserve wird halt immer wieder ein neuer Speicherbereich gesucht und belegt, was halt Zeit beansprucht. Schau die das Beispielscript einmal an und lasse es mal laufen, dann ist das kein Problem mehr den Vorteil zu verstehen.

Gruß Timo

AVT 05.08.21 15:35

Danke für Deine Antwort, Timo.
Zitat:

Zitat von Indikator-Trading (Beitrag 45584)
Hierbei kann ich dir nur helfen, wenn du den entsprechenden Code teilen würdest.

Ich denke, das werde ich schon rausfinden - wenn nicht, komme ich darauf zurück ;)
Zitat:

Zitat von Indikator-Trading (Beitrag 45584)
Für diesen Fall, finde ich ausnahmsweise mal die Doku gar nicht so schlecht.
Die Reserve macht nur Sinn, wenn du ein großes Array häufig in der Größe über ArrayResize verändern willst.
...

Genau das meinte ich mit total verwirrend - dieses ganze Hin und Her mit Vergrößern und Verkleinern und Ausführungsgeschwindigkeiten, wo ich einfach nur wissen will, ob ich den reservierten Bereich benutzen kann.
Zitat:

Zitat von Indikator-Trading (Beitrag 45584)
Ansprechen kannst du diesen Reservierten Bereich allerdings nicht, da das ja jetzt nur freigehaltener Speicherplatz ist.

Also NEIN, benutzen - im Sinne von mit Werten füllen - kann ich nur die Arrayindexnummern, die im 2.Parameter definiert sind, aber nicht die Reserve. Ist das so korrekt?
Danke. AVT


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum