input custom Color

 

Hallo,


nachdem ich es versehentlich im englischen Forum gepostet habe nun hier,

gibt es die Möglichkeit eine Custom Color als Input Variable zu setzen?

ich baue mir gerade einen Indikator der mir die Price Levels anzeigt, in einem Abstand den ich möchte und nicht den sinnlosen MQL Grid hat.

Versuche nur die Input color auf RGB zu ändern, aber das lässt er mich irgendwie nicht

//+------------------------------------------------------------------+
//|                                                   _Priceline.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

input bool ShowPrice = true;
input double LevelPips = 500;
input color Linecolor = clrDarkGray; //43,50,57;



double Max1, Min1;
double Max, Min;
int Steps;
double Lineprice=Min;
double Lineprice1;


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {

   ChartSetInteger(0,CHART_SHOW_PRICE_SCALE,ShowPrice);

   Max = iHigh(_Symbol,PERIOD_CURRENT,iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,Bars(_Symbol,PERIOD_CURRENT),0));
   Min = iLow(_Symbol,PERIOD_CURRENT, iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,Bars(_Symbol,PERIOD_CURRENT),0));

   Max = NormalizeDouble(Max,0) *2;
   Min = NormalizeDouble(Min,0);

   Lineprice=Min;


   Steps = (Max - Min)/(LevelPips*_Point);



   for(int i = Min; i< Steps; i++)
     {
      Lineprice1 = Lineprice;
      HLineCreatePrice((string)Lineprice1+" Line",Linecolor,Lineprice1);
      Lineprice = Lineprice1 + (LevelPips*_Point);
     }



   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

   for(int i = Min; i< Steps; i++)
     {

      Lineprice1 = Lineprice;
      ObjectDelete(0,(string)Lineprice1+ " Line");
      Lineprice = Lineprice1 + (LevelPips*_Point);
     }

  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {



//--- return value of prev_calculated for next call
   return(rates_total);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool HLineCreatePrice(string NameLine,color Color,double price)
  {
   long            chart_ID=0;             // ID des Charts
   string          Linename=NameLine;      // Linienname
   int             sub_window=0;           // Nummer des Unterfensters
   double          LinePrice=price;        // Linienpreis
   color           Lineclr=Color;          // Linienfarbe
   ENUM_LINE_STYLE Linestyle=STYLE_SOLID;  // Linienstil
   int             LineWidth=1;            // Linienbreite
   bool            Lineback=false;         // Im Hintergrund
   bool            LineSelection=false;     // Wählen um zu bewegen
   bool            LineHidden=true;       // Ausgeblendet in der Objektliste
   long            Linez_order=0;          // Priorität auf Mausklick

//--- wenn der Preis nicht angegeben ist, setzen wir ihn gleich dem aktuellen Bid-Preis

   if(!LinePrice)
      LinePrice=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- eine horizontale Linie erstellen
   if(!ObjectCreate(chart_ID,Linename,OBJ_HLINE,sub_window,0,LinePrice))
     {
      Print(__FUNCTION__,
            ": Horizontale Linie konnte nicht erstellt werden! Fehlercode = ",GetLastError());
      return(false);
     }
//--- Farbe der Linie setzen
   ObjectSetInteger(chart_ID,Linename,OBJPROP_COLOR,Lineclr);
//--- Linienstil setzen
   ObjectSetInteger(chart_ID,Linename,OBJPROP_STYLE,Linestyle);
//--- Linienbreite setzen
   ObjectSetInteger(chart_ID,Linename,OBJPROP_WIDTH,LineWidth);
//--- Im Vordergrund (false) oder Hintergrund (true) anzeigen
   ObjectSetInteger(chart_ID,Linename,OBJPROP_BACK,Lineback);
//--- Aktivieren (true) oder deaktivieren (false) Mausbewegung Modus
//--- Wenn Sie ein grafisches Objekt durch Funktion ObjectCreate erstellen, das Objekt
//--- kann nicht ausgewählt und verschoben werden. Innerhalb dieser Methode ist der Standardwert des Parameters selection
//--- true, was Sie das Objekt auswählen und verschieben erlaubt
   ObjectSetInteger(chart_ID,Linename,OBJPROP_SELECTABLE,LineSelection);
   ObjectSetInteger(chart_ID,Linename,OBJPROP_SELECTED,LineSelection);
//--- Verbergen (true) oder Anzeigen (false) den Namen des graphischen Objektes in der Objektliste
   ObjectSetInteger(chart_ID,Linename,OBJPROP_HIDDEN,LineHidden);
//--- setzen die Priorität für eine Mausklick-Ereignisse auf dem Chart
   ObjectSetInteger(chart_ID,Linename,OBJPROP_ZORDER,Linez_order);
//--- die erfolgreiche Umsetzung
   ObjectSetString(chart_ID,Linename,OBJPROP_TEXT,Linename);
//--- die erfolgreiche Umsetzung

   return(true);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
 

Mach ein enum mit den Farben und dann kannst Du daraus auswählen:

enum €colors {
   €rot=0, 
   €gelb,
   €grün,
   €blau
};
...
€colors clr[4] = {clrRed,clrYellow,clrLime,clrAqua}
...
input €colors Farbe =  €grün;
...
ObjectSetInteger(0,"myObj",OBJPROP_COLOR,clr[€grün]);

Ist ungetestet aber schau mal in der MQL-Referenz nach ObjectSetInteger() da gibt's ein Farbbeispiel.

Ich verwende für enums das €, hab ich mir so angewöhnt.

 

Euro-Zeichen im Variablennamen, soso. Das sowas überhaupt compiliert.

@amando

Du könntest die Farbauswahlbox der Indikator-Eigenschaften nutzen:


 
lippmaje:

Euro-Zeichen im Variablennamen, soso. Das sowas überhaupt compiliert.

Ja, nur der Debugger sträubte sich - zumindest früher - aber es gehen auch ander Zeichen wie die Griechen:

// ° ¹ ² ³ ª ¥ £ € ¿ ¡ ± ÷ × ¬ µ ø ð Ø ä ö ü Ä Ü Ö ß ¶ Æ ® © ¼ ½ ¾ « » ¤ ¢ — ;
// A B Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ   Σ Τ Υ Φ Χ Ψ Ω
// α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ υ φ χ ψ ω
// — ― ~ ⁓ • % ‰  ‱ 

 

wer suchet der findet ;-)

Danke Calli, war eine Idee, aber es geht viel einfacher

input color Linecolor = C'43,50,57';


@lippmaje, ja das weis ich eh, aber das ist keine Lösung, ich will ja nicht immer eine Farbe auswählen, dafür bin ich ja viel zu faul

Grund der Beschwerde: