MetaTrader 5 herunterladen

OBJ_ARROW_RIGHT_PRICE

Rechtes Preisschild.

ObjArrowRightPrice

Beispiel

Das folgende Skript erstellt und bewegt auf dem Chart ein rechtes Preisschild. Um die Eigenschaften eines grafischen Objekts zu erstellen und ändern, gibt es speziale Funktionen, die Sie "wie es ist" für Ihre eigenen Programme verwenden können.

 

//--- Beschreibung
#property description "Der Skript erstellt ein rechtes Preisschild auf dem Chart."
#property description "Koordinate des Bezugspunktes wird in Prozent"
#property description "von der Größe des Chartfensters eingegeben."
//--- Zeigen den Fenster von Eingabeparametern in der Skript-Startup
#property script_show_inputs
//--- Eingangsparameter von Skript
input string            InpName="RightPrice"// Name des Preisschilds
input int               InpDate=0;            // Datum des Bezugspunktes in %
input int               InpPrice=90;          // Preis des Bezugspunktes in %
input color             InpColor=clrRed;      // Farbe des Schilds
input ENUM_LINE_STYLE   InpStyle=STYLE_SOLID// Stil der Einfassungslinie
input int               InpWidth=2;           // Größe der Preisschilder
input bool              InpBack=false;        // Das Zeichen im Hintergrund
input bool              InpSelection=true;    // Wählen zu bewegen
input bool              InpHidden=true;       // Ausblenden in der Liste der Objekten
input long              InpZOrder=0;          // Priorität auf Mausklick
//+------------------------------------------------------------------+
//| Erstellt ein rechtes Preisschild                                      |
//+------------------------------------------------------------------+
bool ArrowRightPriceCreate(const long            chart_ID=0,        // ID des Charts
                           const string          name="RightPrice"// Name des Preisschilds
                          const int             sub_window=0,      // Nummer des Unterfensters
                    datetime              time=0,            // Zeit des Bezugspunkts
                    double                price=0,           // Preis des Bezugspunkts
                          const color           clr=clrRed,        // Farbe des Schilds
                          const ENUM_LINE_STYLE style=STYLE_SOLID// Stil der Einfassungslinie
                          const int             width=1,           // Größe des Preisschilds
                    const bool            back=false,        // In der Hintergrund
                          const bool            selection=true,    // Wählen zu bewegen
                    const bool            hidden=true,       // Verborgen in der Liste der Objekten
                    const long            z_order=0)         // Priorität für Mausklick
  {
//--- Die Koordinaten des Bezugspunkts angeben, wenn sie nicht gesetzt sind
   ChangeArrowEmptyPoint(time,price);
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- Ein Preisschild erstellen
   if(!ObjectCreate(chart_ID,name,OBJ_ARROW_RIGHT_PRICE,sub_window,time,price))
     {
      Print(__FUNCTION__,
            ": Kann nicht das rechte Preisschild erstellen! Fehlercode = ",GetLastError());
      return(false);
    ;}
//--- Die Farbe des Schilds setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- Stil der Einfassungslinie setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- Die Größe des Schilds setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- Im Vordergrund (false) oder Hintergrund (true) anzeigen
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- 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,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- Verbergen (true) oder Anzeigen (false) den Namen des graphischen Objektes in der Objektliste
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- setzen die Priorität für eine Mausklick-Ereignisse auf dem Chart
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- die erfolgreiche Umsetzung
   return(true);
 ;}
//+------------------------------------------------------------------+
//| Bewegt den Bezugspunkt |
//+------------------------------------------------------------------+
bool ArrowRightPriceMove(const long   chart_ID=0,        // ID des Charts
                         const string name="RightPrice"// Name des Schilds
                    datetime     time=0,            // Zeitkoordinate des Bezugspunkts
                    double       price=0)           // Preiskoordinate des Bezugspunkts
  {
//--- Wenn die Koordinaten des Punktes nicht angegeben sind, dann verschieben wir es an den aktuellen Bar mit dem Preis Bid
   if(!time)
      time=TimeCurrent();
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- bewegen den Bezugspunkt
   if(!ObjectMove(chart_ID,name,0,time,price))
     {
      Print(__FUNCTION__,
            ": der Bezugspunkt konnte nicht bewegt werden! Fehlercode = ",GetLastError());
      return(false);
    ;}
//--- die erfolgreiche Umsetzung
   return(true);
 ;}
//+------------------------------------------------------------------+
//| Löscht das rechte Preisschild aus dem Chart                           |
//+------------------------------------------------------------------+
bool ArrowRightPriceDelete(const long   chart_ID=0,        // ID des Charts
                           const string name="RightPrice"// Name des Schilds
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- das Schild löschen
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": Kann nicht das rechte Preisschild löschen! Fehlercode = ",GetLastError());
      return(false);
    ;}
//--- die erfolgreiche Umsetzung
   return(true);
 ;}
//+------------------------------------------------------------------+
//| Überprüft den Wert des Bezugspunkts für lehre Werte |
//| setzt Standardwerte |
//+------------------------------------------------------------------+
void ChangeArrowEmptyPoint(datetime &time,double &price)
  {
//--- Wenn Punktzeit nicht angegeben ist, wird es auf dem aktuellen Bar sein
   if(!time)
      time=TimeCurrent();
//--- Wenn der Preis des Punktes nicht angegeben wird, dann wird es einen Wert von Bid haben
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
 ;}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Überprüfen die Richtigkeit der Eingabeparameter
   if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100)
     {
      Print("Fehler! Ungültige Eingabeparameter! ");
      return;
    ;}
//--- Die Anzahl der sichtbaren Bars im Chart-Fenster
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- Größe des Arrays price
   int accuracy=1000;
//--- Arrays für Werte von Daten und Preise, die für Setzung und Änderung
//--- der Koordinaten von Bezugspunkte des Preisschilds verwendet werden
   datetime date[];
   double   price[];
//--- Speicher reservieren
   ArrayResize(date,bars);
   ArrayResize(price,accuracy);
//--- Füllen die Anordnung von Daten
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("Kann nicht den Wert der Zeit kopieren! Fehlercode = ",GetLastError());
      return;
    ;}
//--- Füllen den Array der Preise
//--- den Minimal- und Maximalwert der Charts finden
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- Schritte der Preisänderung finden und das Array füllen
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- Punkte für das Zeichnen des Schilds definieren
   int d=InpDate*(bars-1)/100;
   int p=InpPrice*(accuracy-1)/100;
//--- erstellen das rechte Preisschild auf dem Chart
   if(!ArrowRightPriceCreate(0,InpName,0,date[d],price[p],InpColor,
      InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
    ;}
//--- den Chart neu zeichnen und 1 Sekunde warten
   ChartRedraw();
   Sleep(1000);
//--- Jetzt werden wir den Bezugspunkt bewegen
//--- Schleifenzähler
   int v_steps=accuracy*4/5;
//--- bewegen den Bezugspunkt
   for(int i=0;i<v_steps;i++)
     {
      //--- den nächsten Wert nehmen
      if(p>1)
         p-=1;
      //--- den Punkt bewegen
      if(!ArrowRightPriceMove(0,InpName,date[d],price[p]))
         return;
 //--- Überprüfen die Fakten von Zwangsabschaltung der Skript
      if(IsStopped())
         return;
      //--- den Chart neu zeichnen
      ChartRedraw();
    ;}
//--- 1 Sekunde Verzögerung
   Sleep(1000);
//--- Schild aus dem Chart löschen
   ArrowRightPriceDelete(0,InpName);
   ChartRedraw();
//--- 1 Sekunde Verzögerung
   Sleep(1000);
//---
 ;}