- Warum weist Du nicht das Ergebnis des Funktionsaufruf einer Variablen zu, um sie und _LastError zu überprüfen? :(
- Der Typ der beiden Parameter start und count ist uint - Du hast bestimmt eine Warnung des Compilers erhalten und ignoriert :(
- Wenn bei der Funktionsdeklaration für einen Parameter angegeben wird "count=WHOLE_ARRAY" heißt das, dass ein Default-Wert angegeben ist, sodass die Funktion aus ohne ihn aufgerufen werden kann. :(
- Hast Du die Dok. zu der Funktion mal angesehen? Dort gäbe es ein Beispiel: https://www.mql5.com/de/docs/array/arrayremove. :(
- Ich weiß ja nicht genau, was Du willst, aber schau mal nach den Funktionen: ZeroMemory(), ArrayFree(), ArrayFill(), ArrayInitialize() und ArrayResize() - und überall gibt es Beispiele.

- www.mql5.com
- Warum weist Du nicht das Ergebnis des Funktionsaufruf einer Variablen zu, um sie und _LastError zu überprüfen? :(
- Der Typ der beiden Parameter start und count ist uint - Du hast bestimmt eine Warnung des Compilers erhalten und ignoriert :(
- Wenn bei der Funktionsdeklaration für einen Parameter angegeben wird "count=WHOLE_ARRAY" heißt das, dass ein Default-Wert angegeben ist, sodass die Funktion aus ohne ihn aufgerufen werden kann. :(
- Hast Du die Dok. zu der Funktion mal angesehen? Dort gäbe es ein Beispiel: https://www.mql5.com/de/docs/array/arrayremove. :(
- Ich weiß ja nicht genau, was Du willst, aber schau mal nach den Funktionen: ZeroMemory(), ArrayFree(), ArrayFill(), ArrayInitialize() und ArrayResize() - überall gibt es Beispiele.
Ich hatte im Compiler tatsächlich keine Warnung erhalten! Deshalb habe ich mich auch halb tot gesucht.
Ok, also ich bin dem jetzt mal nachgegangen, lerne ja immer dazu..
meine Fehlernummer über GetLastError() ist (noch nie benutzt) :
- 5052 – ERR_SMALL_ARRAY (Zu großer Wert für start)
hatte wie du sagtest auch mal uint ausprobiert, da bekomme ich aber einen Critical Error im Journal und der Tester hängt sich auf.
5. Also ich will einfach nur alle Werte raus löschen (die Preise, die man oben im Bild-Ausschnitt sieht), mehr nicht. Schaue mir mal die anderen Funktionen an.. dachte ArrayRemove wäre vom Grundsatz her richtig.
Verwende (fast) ganz oben (nach version):
#property strict
Naja - nicht denken, nachlesen ist besser und sich an Beispielen orientieren noch besser.
Naja - nicht denken, nachlesen ist besser und sich an Beispielen orientieren noch besser.
Ja klar, hast du vollkommen Recht. Bin aber eben erst daraus schlau geworden :D. Selbst ausprobieren ist meiner Meinung nach auch immer viel Wert..
Er tut jetzt, was er soll, habe glaube einfach zu kompliziert gedacht. For-Loop, alle Werte auf 0.0 und fertig. Der Rest war aber sehr informativ und in Zukunft braucht man das bestimmt mal..
Danke Dir.. mal wieder.
Hat jemand eine Ahnung, warum mein Array nicht gelöscht wird (double Werte aus Array entfernen) ?
Also rein von der Abfrage "ArrayRemove".. passt das?
Entfernt die angegebene Anzahl von Elementen im Array, beginnend mit dem angegebenen Index.
Entfernt die angegebene Anzahl von Elementen im Array, beginnend mit dem angegebenen Index. bool ArrayRemove( void& array[], // Array irgendeines Typs uint start, // Startindex für das Entfernen uint count=WHOLE_ARRAY // Anzahl der Elemente ); also muss das so sein um alle wete zu löschen : ArrayRemove(pendingSet,0,WHOLE_ARRAY); |
was aber nur für das gesammte Array zutrifft wenn nen bestimmten eintrag löschen willst geht das so:
wobei x die nummer im Array ist also der Speicherplatz das Beispiel löscht alles ab 0 bis wert x, du kannst also genauer selektieren:ArrayRemove(pendingSet,0,x);
ArrayRemove(pendingSet,5,7);
Hier wird Arrayplatz[5] bis Arrayplatz[7] gelöscht. Zieh dir mal das Beispiel aus der Referenz Rein(siehe Quelle):
//+------------------------------------------------------------------+ //| Skript Programm Start Funktion | //+------------------------------------------------------------------+ void OnStart() { //--- Deklarieren des Arrays mit fixer Größe und der Wertezuweisung int array[10]; for(int i=0;i<10;i++) { array[i]=i; } //--- Anzeigen des Arrays vor dem Entfernen der Elemente Print("Vor dem Aufruf von ArrayRemove()"); ArrayPrint(array); //--- Entfernen von 2 Elementen im Array und dessen Darstellung danach ArrayRemove(array,4,2); Print("Nach dem Aufruf von ArrayRemove()"); ArrayPrint(array); /* Ausführungsergebnis: Vor dem Aufruf von ArrayRemove() 0 1 2 3 4 5 6 7 8 9 Nach dem Aufruf von ArrayRemove() 0 1 2 3 6 7 8 9 8 9 */
Quelle:

- www.mql5.com
Entfernt die angegebene Anzahl von Elementen im Array, beginnend mit dem angegebenen Index.
was aber nur für das gesammte Array zutrifft wenn nen bestimmten eintrag löschen willst geht das so:
wobei x die nummer im Array ist also der Speicherplatz das Beispiel löscht alles ab 0 bis wert x, du kannst also genauer selektieren: Hier wird Arrayplatz[5] bis Arrayplatz[7] gelöscht.Zieh dir mal das Beispiel aus der Referenz Rein(siehe Quelle):
Quelle:
Vielen Dank, dass du Dir so viel Zeit genommen hast!
Hierbei wird das Array leider nicht bereinigt, hatte ich schon versucht:
ArrayRemove(pendingSet,0,WHOLE_ARRAY);
Fehlt vielleicht eine Schleife?
Wenn ich die 0 zur -1 mache (wegen:
pendingSetIdx = -1;
) , bekomme ich einen critical Error im Journal. Den Rest hatte ich gecheckt und das leuchtet auf jeden Fall ein!
Vielen Dank, dass du Dir so viel Zeit genommen hast!
Hierbei wird das Array leider nicht bereinigt, hatte ich schon versucht:
Fehlt vielleicht eine Schleife?
Wenn ich die 0 zur -1 mache (wegen:
) , bekomme ich einen critical Error im Journal. Den Rest hatte ich gecheckt und das leuchtet auf jeden Fall ein!
-1 wäre wie array[-1] die kleinste zahl ist aber 0... deswegen der Critical Error...
Klatsch mal das aufs Chart..... bei mir funtz das...
void OnStart() { //--- Deklarieren des Arrays mit fixer Größe und der Wertezuweisung int array[]; for(int i=0; i<10; i++) { ArrayResize(array,i+1); array[i]=i; } //--- Anzeigen des Arrays vor dem Entfernen der Elemente Print("Vor dem Aufruf von ArrayRemove()"); ArrayPrint(array); //--- Entfernen von allen Elementen im Array und dessen Darstellung danach ArrayRemove(array,0,WHOLE_ARRAY); Print("Nach dem Aufruf von ArrayRemove()"); ArrayPrint(array); }
-1 wäre wie array[-1] die kleinste zahl ist aber 0... deswegen der Critical Error...
Klatsch mal das aufs Chart..... bei mir funtz das...
for(int b=0; b<10; b++) { ArrayResize(pendingSet,b+1); pendingSet[b]=b; } //--- Anzeigen des Arrays vor dem Entfernen der Elemente Print("Vor dem Aufruf von ArrayRemove()"); ArrayPrint(pendingSet); //--- Entfernen von allen Elementen im Array und dessen Darstellung danach ArrayRemove(pendingSet,0,WHOLE_ARRAY); Print("Nach dem Aufruf von ArrayRemove()"); ArrayPrint(pendingSet); } } }
Du machst nicht, was dir die Experten raten.
Dein Code enthält OnTick() also nicht der Code der vom Alekski-Trader ist.
Dann kommt das hier
Aus diesem Code der funktioniert musst du deine Version anpassen.
Lerne lesen was im Code passiert. Erst wenn du verstehst was da passiert kannst den den Fehler in deinem Code erkennen.
Du machst nicht, was dir die Experten raten.
Dein Code enthält OnTick() also nicht der Code der vom Alekski-Trader ist.
Dann kommt das hier
Aus diesem Code der funktioniert musst du deine Version anpassen.
Lerne lesen was im Code passiert. Erst wenn du verstehst was da passiert kannst den den Fehler in deinem Code erkennen.
Bei Aleksi-Trader ist es die
void OnStart()
, habe ich schon erkannt. Aber ich verstehe trotzdem nicht, was ich falsch mache und es anpassen kann/soll.

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hat jemand eine Ahnung, warum mein Array nicht gelöscht wird (double Werte aus Array entfernen) ?
Also rein von der Abfrage "ArrayRemove".. passt das?