Wenn Du wirklich ALLE vertikalen Linien löschen möchtest, kannst Du nicht den Objektnamen ignorieren und das über den Objekttyp lösen?
ObjectsDeleteAll(0,0,OBJ_VLINE);
Wenn Du wirklich ALLE vertikalen Linien löschen möchtest, kannst Du nicht den Objektnamen ignorieren und das über den Objekttyp lösen?
Danke, wusste nicht das ich hier gleich den Typ reinschreiben kann
Hallo,
ich versuche gerade alle Vertikalen Linien im Chart über eine Schleife zu löschen
nachdem eine Vertikale Linie ja immer den Namen "TF Vertical Line #####" bekommt, dachte ich, ich lasse die Objekte durch eine schleife laufen und schau ob im SubString das Wort "Vertical" enthalten ist
jetzt funktioniert das auch, aber eben nur zu 80%
zuerst dachte ich noch, das liegt an den Timeframes, da ja manche 2 und manche 3 stellig angegeben werden. Z.B H4, M30, M15, M1
das ist zwar so, aber dafür hab ich ja die 2 verschiedenen Substring mit dem unterschiedlichen beginn.
Jetzt geht die schleife einfach her, und löscht aber willkürlich.
Mal 3 aus dem H4 und 2 aus M30
mal nur die H4 oder H1
hab ich da einen Fehler drin? Wie macht Ihr das?
lg
Amando
Was den Fehler in Ihrem Code betrifft, müssen Sie in Ihrer Schleife abwärts zählen.
for ( int i = total-1 ; i>=0; i--)
Was den Fehler in Ihrem Code betrifft, müssen Sie in Ihrer Schleife abwärts zählen.
Es ist eigentlich eher bedenklich, das metaquotes es nicht schafft, schleifen in beide richtungen durchlaufen zu lassen
Es ist eigentlich eher bedenklich, das metaquotes es nicht schafft, schleifen in beide richtungen durchlaufen zu lassen
Schaffen sie , nur DU musst es auch programmieren.
Schleifen kannst du nur in eine Richtung programmieren.
Entweder hoch oder runter.
Aber du kannst kombinieren. Ob das Sinn macht hat steht woanders.
Um zu erklären, warum du runterzählen musst:
Du hohlst die am Anfang die Anzahl der Objekte.
int total = ObjectsTotal(0, -1, -1);
Jedes hat dann einen Index. 0 bis total
Sobald ein Objekt gelöscht wird, sortiert MT die liste neu und schon stimmt der Index nicht mehr.
total-1 wäre dann der letzte.
Ich denke, dass beim Löschen eines Listenelements ..8,7,6,5,4,3,... der Zeiger von 5 auf 6 wechselt (denn 6 ist jetzt das 5. Element) und dann per Inkrement (noch einmal) erhöht wird und jetzt bei 7 steht. So kommt es dass a) 6 ausgelassen wird und am Ende der Zeiger b) auf die Liste auf das letzte Element+1 zeigt. Beim Abwärtsschreiten durch die Liste passiert das eben nicht.
Ich habe mir deswegen angewöhnt immer mit while(i-->0) durch Listen zu gehen.
dazu mal eine Frage, ist das üblich, das mit jedem rauslöschen neu sortiert wird oder ist das ein spezifikum von MQL5?
Das machen eigentlich alle Sprachen, wenn sie Objekte verwalten.
Speicher sparen steht da im Vordergrund.
Ich erkläre es noch mal am Beispiel Autoräder
Auto mit 4 Rädern.
Schematisch:
int total = GetAllRäder() // total = 4 // Rad1 = Index 0 // Rad2 = Index 1 // Rad3 = Index 2 // Rad4 = Index 3 DeleteRad(Index 1) int total = GetAllRäder() // total = 3 // Rad1 = Index 0 // // Rad3 = Index 1 // Rad4 = Index 2
Wenn du jetz Rad4 löschen willst geht das nur mit Index 2 statt wie in deinem Fall mit 3
Da dein Index in der Schleife nun eins tiefer ist kannst die Rad4 löschen.
Deswegen abwäherts zählen.
Soweit verständlich ?

- 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.
Hallo,
ich versuche gerade alle Vertikalen Linien im Chart über eine Schleife zu löschen
nachdem eine Vertikale Linie ja immer den Namen "TF Vertical Line #####" bekommt, dachte ich, ich lasse die Objekte durch eine schleife laufen und schau ob im SubString das Wort "Vertical" enthalten ist
jetzt funktioniert das auch, aber eben nur zu 80%
zuerst dachte ich noch, das liegt an den Timeframes, da ja manche 2 und manche 3 stellig angegeben werden. Z.B H4, M30, M15, M1
das ist zwar so, aber dafür hab ich ja die 2 verschiedenen Substring mit dem unterschiedlichen beginn.
Jetzt geht die schleife einfach her, und löscht aber willkürlich.
Mal 3 aus dem H4 und 2 aus M30
mal nur die H4 oder H1
hab ich da einen Fehler drin? Wie macht Ihr das?
lg
Amando