Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43249
Benutzer: 7.221
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Thomas75
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 47 Minuten
- Thomas75
vor 14 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 505
Gesamt: 505
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 05.08.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard 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
  #2 (permalink)  
Alt 05.08.21
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AVT Beitrag anzeigen
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 anzeigen
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
  #3 (permalink)  
Alt 05.08.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Danke für Deine Antwort, Timo.
Zitat:
Zitat von Indikator-Trading Beitrag anzeigen
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 anzeigen
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 anzeigen
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
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 12:18 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------