break for-loop

 

Hello everyone, I have a problem. the for loop below runs through all the red rectangles on the chart and places lines on the respective lower and upper anchor point. So I only want one HLINE at the top and bottom per rectangle. unfortunately, he continually superimposes lines on top of each other. He should go through all the rectangles once and mark each one with a line at the top and bottom, nothing more. I'm looking for a way to break the loop.




int obj_index = ObjectsTotal(ChartID())-1;

for (int i = obj_index; i>=0; i--){

    

      string object_name = ObjectName(ChartID(), i);

          

      if (ObjectGetInteger(ChartID(), object_name, OBJPROP_TYPE) != OBJ_RECTANGLE) continue;

 

      string high_name =  "Line-High"+string(i);

      string low_name  =  "Line-Low"+string(i);       


      if(ObjectGetInteger(ChartID(), object_name,OBJPROP_COLOR)==clrRed){

        

      if(!ObjectCreate(_Symbol,high_name,OBJ_HLINE,0,0,ObjectGetDouble(ChartID(), object_name,OBJPROP_PRICE,1)))PrintFormat("Error object %s not created!",high_name);

      else PrintFormat("object %s created successfully", high_name);

      

      if(!ObjectCreate(_Symbol,low_name ,OBJ_HLINE,0,0,ObjectGetDouble(ChartID(), object_name,OBJPROP_PRICE,0)))PrintFormat("Error object %s not created!",low_name);

      else PrintFormat("object %s created successfully", low_name);

      

      

}

    

}

Dokumentation zu MQL5: Graphische Objekte / ObjectGetInteger
Dokumentation zu MQL5: Graphische Objekte / ObjectGetInteger
  • www.mql5.com
ObjectGetInteger - Graphische Objekte - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 

Hallo, aber:

  1. Wir können hier deutsch sprechen :)
  2. Wenn Code gepostet wird bitte dazu den Code-Knopf aus der Editierzeile [</>] oder Alt+S verwenden.
  3. Hmm? So ganz kann ich mir Dein Problem nicht vorstellen, aber 2 Hinweise:
    Mit dem Debugger kann man alles beim Entstehen kontrollieren (https://www.mql5.com/de/articles/654 // Zur Fehlerbehebung von MQL5-Programmen)
    Manche Eigenschaften wie im Vorder- oder Hintergrund können/müssen nach ObjectCreate festgelegt werden, alle Objektfunktionen (MQ5) sind hier: https://www.mql5.com/de/docs/objects
  4. Wenn Du den Kursor auf for stellst und F1 drückst kommst Du direkt zur Dok. dort gibt es auch Beispiel(e) zum Beenden von Schleifen zB. durch break.
Zur Fehlerbehebung von MQL5-Programmen (Debugging)
Zur Fehlerbehebung von MQL5-Programmen (Debugging)
  • www.mql5.com
Dieser Artikel richtet sich primär an Programmierer, die die Sprache zwar bereits gelernt haben, die allerdings noch keine Meister ihres Fachs sind. Er wird auf verschiedene Debugging-Techniken eingehen, die der gebündelten Erfahrung des Autors sowie vieler anderer Programmierer entspringen.
 
Carl Schreiber #:

Hallo, aber:

  1. Wir können hier deutsch sprechen :)
  2. Wenn Code gepostet wird bitte dazu den Code-Knopf aus der Editierzeile [</>] oder Alt+S verwenden.
  3. Hmm? So ganz kann ich mir Dein Problem nicht vorstellen, aber 2 Hinweise:
    Mit dem Debugger kann man alles beim Entstehen kontrollieren (https://www.mql5.com/de/articles/654 // Zur Fehlerbehebung von MQL5-Programmen)
    Manche Eigenschaften wie im Vorder- oder Hintergrund können/müssen nach ObjectCreate festgelegt werden, alle Objektfunktionen (MQ5) sind hier: https://www.mql5.com/de/docs/objects
  4. Wenn Du den Kursor auf for stellst und F1 drückst kommst Du direkt zur Dok. dort gibt es auch Beispiel(e) zum Beenden von Schleifen zB. durch break.

1. Gut zu wissen :) 

2. Was meinst du mit Code-Knop aus der Editierzeile? 

3. Den Debugger benutze ich, es läuft alles einwandfrei. Nur die Unterbrechung der Schleife bereitet mir Kopfschmerzen. Er muss ja aufhören Linien zu setzen, nachdem er es getan hat. 

Ich probiere es nochmal zu erklären: Auf dem Chart sind mehrere rote Rechtecke. Jedes Rechteck soll an der Ober- und Unterkante mit jeweils einer Linie versehen werden (dafür ist die schleife). 

Er tut das auch, nur endlos. Die Schleife ist in der onTick. Sie geht alle Rechtecke durch und setzt die Linien. Mit Break hatte ich bisher leider keinen Erfolg. 


Liebe Grüße :) 

 
Yango #:

1. Gut zu wissen :) 

2. Was meinst du mit Code-Knop aus der Editierzeile? 

3. Den Debugger benutze ich, es läuft alles einwandfrei. Nur die Unterbrechung der Schleife bereitet mir Kopfschmerzen. Er muss ja aufhören Linien zu setzen, nachdem er es getan hat. 

Ich probiere es nochmal zu erklären: Auf dem Chart sind mehrere rote Rechtecke. Jedes Rechteck soll an der Ober- und Unterkante mit jeweils einer Linie versehen werden (dafür ist die schleife). 

Er tut das auch, nur endlos. Die Schleife ist in der onTick. Sie geht alle Rechtecke durch und setzt die Linien. Mit Break hatte ich bisher leider keinen Erfolg. 


Liebe Grüße :) 

OnTick() wird bei jeden neuen Kurs aufgerufen und dann startet dann auch die Schleife wieder?

Dann müsstest Du die Rechtecke kennzeichnen/erkennen, für die es schon Linien gibt und 'auslassen' - könnte es das sein?

 
Carl Schreiber #:

OnTick() wird bei jeden neuen Kurs aufgerufen und dann startet dann auch die Schleife wieder?

Dann müsstest Du die Rechtecke kennzeichnen/erkennen, für die es schon Linien gibt und 'auslassen' - könnte es das sein?

ja, bei jedem Tick.

ja genau, das wäre praktisch die Lösung. Komme da nur grad an meine Grenzen und weiß nicht, wie das machbar wäre.

 
Yango #:

ja, bei jedem Tick.

ja genau, das wäre praktisch die Lösung. Komme da nur grad an meine Grenzen und weiß nicht, wie das machbar wäre.

Entweder:
  1. Du pflegst eine eigene (globale) Liste mit bereits bearbeiteten Rechtecken.
  2. Du veränderst den Namens eines bearbeiteten Rechtecks (weiß aber nicht, ob das geht - nie gemacht, nie gedacht).
  3. Wenn Du ein Rechteck 'findst' schaust Du, ob es bereits Linien-Objekte gibt.
  4. Du speicherst die Namen der bearbeiteten Rechtecke als globale Variable (https://www.mql5.com/de/docs/globals) und prüfst, ob so eine Variable bereits existiert ....
Dokumentation zu MQL5: Globalvariablen des Kundenterminals
Dokumentation zu MQL5: Globalvariablen des Kundenterminals
  • www.mql5.com
Globalvariablen des Kundenterminals - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Carl Schreiber #:
Entweder:
  1. Du pflegst eine eigene (globale) Liste mit bereits bearbeiteten Rechtecken.
  2. Du veränderst den Namens eines bearbeiteten Rechtecks (weiß aber nicht, ob das geht - nie gemacht, nie gedacht).
  3. Wenn Du ein Rechteck 'findst' schaust Du, ob es bereits Linien-Objekte gibt.
  4. Du speicherst die Namen der bearbeiteten Rechtecke als globale Variable (https://www.mql5.com/de/docs/globals) und prüfst, ob so eine Variable bereits existiert ....

schwierig. ich brauche noch etwas zeit, um das alles zu verstehen.. 

 
Yango :

Hello everyone, I have a problem. the for loop below runs through all the red rectangles on the chart and places lines on the respective lower and upper anchor point. So I only want one HLINE at the top and bottom per rectangle. unfortunately, he continually superimposes lines on top of each other. He should go through all the rectangles once and mark each one with a line at the top and bottom, nothing more. I'm looking for a way to break the loop.




int obj_index = ObjectsTotal(ChartID())-1;

for (int i = obj_index; i>=0; i--){

    

      string object_name = ObjectName(ChartID(), i);

          

      if ( ObjectGetInteger (ChartID(), object_name, OBJPROP_TYPE) != OBJ_RECTANGLE) continue;

 

      string high_name =  "Line-High"+string(i);

      string low_name  =  "Line-Low"+string(i);       


      if(ObjectGetInteger(ChartID(), object_name,OBJPROP_COLOR)==clrRed){

        

      if(!ObjectCreate(_Symbol,high_name,OBJ_HLINE,0,0,ObjectGetDouble(ChartID(), object_name,OBJPROP_PRICE,1)))PrintFormat("Error object %s not created!",high_name);

      else PrintFormat("object %s created successfully", high_name);

      

      if(!ObjectCreate(_Symbol,low_name ,OBJ_HLINE,0,0,ObjectGetDouble(ChartID(), object_name,OBJPROP_PRICE,0)))PrintFormat("Error object %s not created!",low_name);

      else PrintFormat("object %s created successfully", low_name);

      

      

}

    

}

Wo ist break? 🤔

 
Vasile Verdes #:

Wo ist break? 🤔

nicht da :D ich habe momentan überhaupt keine Ahnung, wann ich die Schleife breaken soll.. 
theoretisch müsste er alles einmal durchlaufen und dann beenden. 


Grundsätzlich das das unterbrechen ja kein Problem.


Danke für deine Antwort

 
yango # :

not there :DI have no idea at the moment when I should break the loop..  theoretically it should run through everything once and then end. 


Basically, interrupting that is not a problem.


Thanks for your answer

break; :)

 
Weißt jemand zufällig, wie ich eine HLine an einem bestimmen Preis lösche? Das mit alle Objekte durchlaufen und löschen ist mir klar, sowie das mit dem Namen, den man angeben kann, um ein Objekt zu löschen. Ich müsste eine bestimmte Linie löschen, welche sich an einer bestimmen Position befindet (Preis). Ist das möglich? Die Objektdelete-Funktion hat ja soweit ich weiß nur die Parameter "Chart Und Name"🤔

Liebe Grüße 
Grund der Beschwerde: