Arrays sortieren und als Buttons im Chart ausgeben

 

Hallo,

erstmal beschreibe ich meine Idee: Ich möchte aus Marktübersicht Symbole auslesen, Tagesrange berechnen und als Buttons in unten im Chart platzieren.

Das Problem ist aber, dass alle Symbole in der For-Schleife bei 0,1,2,3 u.sw ausgegeben werden und nach Range Berechnung als Beispiel so aussieht ( 2,3,7,9).

Für jeden Button wird ein Prefix und i benutzt (Siehe Kode). 

Jetzt kommt die Frage: Wie kann ich ausgelesene Zahlen (2,3,7,9) ins solchen Format umwandeln (0,1,2,3)?

Hier ist der Kode:

 

   // Market Watch
   int total = SymbolsTotal(true);
   for(int i = 0; i < total; i++) {


      if(!m_symbol.Name(SymbolName(i,true))) // sets symbol name
         return(INIT_FAILED);

      double DayHigh       = iHigh(SymbolName(i,true),PERIOD_D1,0);
      double DayLow        = iLow(SymbolName(i,true),PERIOD_D1,0);
      double SpanneProzent = NormalizeDouble(((DayHigh - DayLow) / DayHigh * 100),2); // Tagesspanne in %


      if(SpanneProzent > 0.5) {


         int prefixPlus = i;
         string prefix = "ButtonNr_"+(string)prefixPlus;
         

         int x = 112;
         int koordinate = i * x;

         //Create Object
         ObjectDelete(0,prefix);
         ObjectCreate(0,prefix,OBJ_BUTTON,0,0,0);
         ObjectSetInteger(0,prefix,OBJPROP_XDISTANCE,20+koordinate);
         ObjectSetInteger(0,prefix,OBJPROP_XSIZE,110);
         ObjectSetInteger(0,prefix,OBJPROP_YDISTANCE,20);
         ObjectSetInteger(0,prefix,OBJPROP_YSIZE,20);
         ObjectSetInteger(0,prefix,OBJPROP_CORNER,CORNER_LEFT_LOWER);
         ObjectSetString(0,prefix,OBJPROP_TEXT,SymbolName(i,true)+" "+DoubleToString(SpanneProzent,2)+" %");
         ChartRedraw(0);
      }


   }

 Hier ist auch das Bild.

Arrays_Buttons

Die Button werden versetzt platziert, weil dazwischen ausgeblendete Buttons fällen.

Hat vielleicht einer Idee?

Gruß Igor

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

  Habe jetzt die Lösung gefunden:

  Hier ist der Kode, falls jemand Interessiert:

  Und ein Artikel über diese Thema. https://www.mql5.com/de/articles/5348

// Market Watch
   int btn_high = 20;
   int btn_width = 110;
   int chart_Xdistance = 10;
   int btn_left=0;
   int btn_line=1;
   int btn_right=(int) ChartGetInteger(0, CHART_WIDTH_IN_PIXELS)-77;

   int total = SymbolsTotal(true);
   for(int i = 0; i < total; i++) {


      if(!m_symbol.Name(SymbolName(i,true))) // sets symbol name
         return(INIT_FAILED);

      double DayHigh       = iHigh(SymbolName(i,true),PERIOD_D1,0);
      double DayLow        = iLow(SymbolName(i,true),PERIOD_D1,0);
      double SpanneProzent = NormalizeDouble(((DayHigh - DayLow) / DayHigh * 100),2); // Tagesspanne in %


      if(SpanneProzent > 0.5) {

         int prefixPlus = i;
         string prefix = "ButtonNr_"+(string)prefixPlus;

         if(btn_left>btn_right-btn_width) {
            btn_line++;
            btn_left=0;
         }

         //Create Object
         ObjectDelete(0,prefix);
         ObjectCreate(0,prefix,OBJ_BUTTON,0,0,0);
         ObjectSetInteger(0,prefix,OBJPROP_XDISTANCE,btn_left+chart_Xdistance);
         ObjectSetInteger(0,prefix,OBJPROP_YDISTANCE,btn_high*btn_line);
         ObjectSetInteger(0,prefix,OBJPROP_XSIZE,btn_width);
         ObjectSetInteger(0,prefix,OBJPROP_YSIZE,btn_high);
         ObjectSetInteger(0,prefix,OBJPROP_CORNER,CORNER_LEFT_LOWER);
         ObjectSetString(0,prefix,OBJPROP_TEXT,SymbolName(i,true)+" "+DoubleToString(SpanneProzent,2)+" %");
         ObjectSetInteger(0,prefix+(string) i,OBJPROP_SELECTABLE,false);
         ChartRedraw(0);

         btn_left+=btn_width;
      }


   }

Gruß Igor

Entwicklung eines Symbolauswahl- und Navigationsprogramms in MQL5 und MQL4
Entwicklung eines Symbolauswahl- und Navigationsprogramms in MQL5 und MQL4
  • www.mql5.com
Erfahrene Händler sind sich der Tatsache bewusst, dass die meisten zeitaufwendigen Dinge im Handel nicht das Öffnen und Verfolgen von Positionen sind, sondern das Auswählen von Symbolen und das Suchen von Einstiegspunkten. In diesem Artikel werden wir einen EA entwickeln, das die Suche nach Einstiegspunkten für Handelsinstrumente Ihres Brokers vereinfacht.