2D-Array mit Preisen befüllen

 

Hallo,

kann meinen Fehler nicht finden. Habe zwei 2D-Arrays, von denen eines mit den Preisen der HLINES und das andere mit den Preisen der RECTANGLE befüllt werden soll (erste Schleife für die Linien, zweite Schleife für die Rechtecke). Jeweils innerhalb der Schleife schaut eine Funktion (HasPriceBeenCheckedRectangles und HasPriceBeenCheckedRectangles), ob die Preise schon vorhanden sind. Lasse mir die Arrays über Print ausgeben.. nur irgendwie gibt er mir immer nur die Preise der Rechtecke (oben und unten aus, was so gewollt ist), aber nicht die, der Linien.

double   RectanglePrices[2][1000];
int      RectanglePricesIdx = -1;
double   LinePrices[2][1000];
int      LinesPricesIdx = -1;

int obj_index = ObjectsTotal(0,0,-1);

for (int i = obj_index; i>=0; i--){
    
      string object_name = ObjectName(ChartID(), i);
      double Price_Line_Up = 0;
      double Price_Line_Do = 0;
      
         if (ObjectGetInteger(ChartID(), object_name, OBJPROP_TYPE) != OBJ_HLINE) continue;
               
      if (ObjectGetInteger(ChartID(), object_name, OBJPROP_COLOR)  == clrMaroon )Price_Line_Up = ObjectGetDouble(_Symbol,object_name,OBJPROP_PRICE);
      if (ObjectGetInteger(ChartID(), object_name, OBJPROP_COLOR)  == clrBrown ) Price_Line_Do = ObjectGetDouble(_Symbol,object_name,OBJPROP_PRICE);        
      
      if( !HasPriceBeenCheckedLines(Price_Line_Up, Price_Line_Do) ){
      LinesPricesIdx++;
      LinePrices[0][LinesPricesIdx] = Price_Line_Up;
      LinePrices[1][LinesPricesIdx] = Price_Line_Do;
      Print("Lines");
      ArrayPrint(LinePrices,_Digits,NULL,0,LinesPricesIdx,ARRAYPRINT_INDEX);
      }      
 }
            
for (int i = obj_index; i>=0; i--){
    
      string object_name = ObjectName(ChartID(), i);
      double Price_Rectangle_Up = 0;
      double Price_Rectangle_Do = 0;
            
            if (ObjectGetInteger(ChartID(), object_name, OBJPROP_TYPE) != OBJ_RECTANGLE) continue;
             
      if (ObjectGetInteger(ChartID(), object_name, OBJPROP_COLOR)  == clrRed || ObjectGetInteger(ChartID(), object_name, OBJPROP_COLOR) == clrGreen){     
      Price_Rectangle_Up = ObjectGetDouble(_Symbol,object_name,OBJPROP_PRICE,0);
      Price_Rectangle_Do = ObjectGetDouble(_Symbol,object_name,OBJPROP_PRICE,1); }         
           
         if( !HasPriceBeenCheckedRectangles(Price_Rectangle_Up, Price_Rectangle_Do) ){
         RectanglePricesIdx++;
         RectanglePrices[0][RectanglePricesIdx] = Price_Rectangle_Up;
         RectanglePrices[1][RectanglePricesIdx] = Price_Rectangle_Do;
         Print("Recs");
         ArrayPrint(RectanglePrices,_Digits,NULL,0,RectanglePricesIdx,ARRAYPRINT_INDEX);
         }       
} 

bool HasPriceBeenCheckedRectangles(double rectanglepriceUP, double rectanglepriceDO)
{
   int i;
   for (i=0;i<=RectanglePricesIdx;i++)
   {
      if ( (RectanglePrices[0][i]==rectanglepriceUP)||(RectanglePrices[1][i]==rectanglepriceDO) )
      {
         return true;
      }
   }
   return false;
}

bool HasPriceBeenCheckedLines(double linepriceUP, double linepriceDO)
{
   int i;
   for (i=0;i<=LinesPricesIdx;i++)
   {
      if ( (LinePrices[0][i]==linepriceUP)||(LinePrices[1][i]==linepriceDO) )
      {
         return true;
      }
   }
   return false;
}  
 
"Lasse mir die Arrays über Print ausgeben.. nur irgendwie gibt er mir immer nur die Preise der Rechtecke (oben und unten aus, was so gewollt ist), aber nicht die, der Linien."

Das passiert meistens, wenn in irgendeiner if-Verzweigung man nicht zu den fehlenden Prints kommt.

Da hilft Debugger anschmeißen aber vorher mit F9 Haltepunkte für den Debugger platzieren und die Variablenwerte im Fenster Shift-F9 kontrollieren und verfolgen.

 
Carl Schreiber #:
"Lasse mir die Arrays über Print ausgeben.. nur irgendwie gibt er mir immer nur die Preise der Rechtecke (oben und unten aus, was so gewollt ist), aber nicht die, der Linien."

Das passiert meistens, wenn in irgendeiner if-Verzweigung man nicht zu den fehlenden Prints kommt.

Da hilft Debugger anschmeißen aber vorher mit F9 Haltepunkte für den Debugger platzieren und die Variablenwerte im Fenster Shift-F9 kontrollieren und verfolgen.

Er kommt aber an die Preise.. habe diese mir ebenfalls schon ausgeben lassen, überall.. 

 
Naja, was wir denken und was das Programm tut, sind manchmal 2 verschiedene Dinge. Es hilft nur testen!
 
Carl Schreiber #:
Naja, was wir denken und was das Programm tut, sind manchmal 2 verschiedene Dinge. Es hilft nur testen!

Ja, ich schaue mal, was ich heraus bekomme. Danke für die Antwort

 

Ok.. also scheinbar bekommt er beim Funktionsaufruf von "HasPriceBeenCheckedLines" immer nur den Preis von einer Linie, dann verschwindet er und es taucht der Preis der andere auf.  Das wechselt sich ständig ab. 

 

Kannst du mir sagen, warum er mir die ganzen Sachen jedes mal mit reinpackt, obwohl ich Haltepunkte gesetzt habe? Ich habe noch nichts zur Aussicht hinzugefügt.

Auch wenn ich sie lösche, bei dem Drücken von F5 kommen sie immer wieder.. 


 

Lies mal die beiden Artikel über das Wie des Debugging:

https://www.mql5.com/de/articles/2041 // Error Handling and Logging in MQL5
https://www.mql5.com/de/articles/272

Die Fehlerverarbeitung und Protokollierung in MQL5
Die Fehlerverarbeitung und Protokollierung in MQL5
  • www.mql5.com
In diesem Artikel werden die meisten Fragen bezüglich der Fehlerverarbeitung im Programm betrachtet. Außerdem betrachten wir Protokollierung und werden ein Beispiel der Log-Realisierung mit MQL5 darstellen.
Grund der Beschwerde: