MetaTrader 5 herunterladen

OBJ_ARROW

Zeichen "Pfeil".

ObjArrow

Hinweis

Die Position des Bezugspunktes relativ zum Zeichen kann aus der Enumeration ENUM_ARROW_ANCHOR gewählt werden.

Größe Pfeile (mehr als 5) können nur durch Setzen der entsprechenden Eigenschaft OBJPROP_WIDTH beim Schreiben von Code in MetaEditor erstellt werden.

Die gewünschte Art der Pfeile kann durch Einstellung einer der Codes von Symbole von Font Wingdings ausgewählt werden.

Beispiel

Das folgende Skript erstellt Objekt "Pfeil" auf dem Chart und ändert seinen Typ. 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 "Das Skript erstellt einen zufälligen Pfeil im Chartfenster."
#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="Arrow";        // Name des Pfeils
input int               InpDate=50;             // Datum des Bezugspunktes in %
input int               InpPrice=50;            // Preis des Bezugspunktes in %
input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_TOP;   // Bezugsmethode
input color             InpColor=clrDodgerBlue// Farbe des Pfeils
input ENUM_LINE_STYLE   InpStyle=STYLE_SOLID;   // Stil der Einfassungslinie
input int               InpWidth=10;            // Größe des Pfeils
input bool              InpBack=false;          // Pfeil im Hintergrund
input bool              InpSelection=false;     // Wählen zu bewegen
input bool              InpHidden=true;         // Ausgeblendet in der Liste der Objekten
input long              InpZOrder=0;            // Priorität auf Mausklick
//+------------------------------------------------------------------+
//| Erstellt einen Pfeil                                                |
//+------------------------------------------------------------------+
bool ArrowCreate(const long              chart_ID=0,           // ID des Charts
                 const string            name="Arrow",         // Name des Pfeils
                 const int               sub_window=0,         // Nummer des Unterfensters
                 datetime                time=0,               // Zeit des Bezugspunkts
                double                  price=0,              // Preis des Bezugspunkts
                 const uchar             arrow_code=252,       // Code des Pfeils
                 const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM// Position des Bezugspunkts
                 const color             clr=clrRed,           // Farbe des Pfeils
                 const ENUM_LINE_STYLE   style=STYLE_SOLID,    // Stil der Einfassungslinie
                 const int               width=3,              // Größe des Pfeils
                const bool              back=false,           // Im 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 auf Mausklick
  {
//--- Die Koordinaten des Bezugspunkts angeben, wenn sie nicht gesetzt sind
   ChangeArrowEmptyPoint(time,price);
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- Pfeil erstellen
   if(!ObjectCreate(chart_ID,name,OBJ_ARROW,sub_window,time,price))
     {
      Print(__FUNCTION__,
            ": Pfeil konnte nicht erstellt werden! Fehlercode = ",GetLastError());
      return(false);
    ;}
//--- Code des Pfeils setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_ARROWCODE,arrow_code);
//--- die Bindungsmethode setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- Farbe des Pfeils setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- Stil der Einfassungslinie setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- Größe des Pfeils 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 ArrowMove(const long   chart_ID=0,   // ID des Charts
               const string name="Arrow"// Name des Objekts
              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);
 ;}
//+------------------------------------------------------------------+
//| Ändert Code des Pfeils                                          |
//+------------------------------------------------------------------+
bool ArrowCodeChange(const long   chart_ID=0,   // ID des Charts
                     const string name="Arrow"// Name des Objekts
                     const uchar  code=252)     // Code des Pfeils
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- Code des Pfeils ändern
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_ARROWCODE,code))
     {
      Print(__FUNCTION__,
            ": Code des Pfeils konnte nicht geändert werden! Fehlercode = ",GetLastError());
      return(false);
    ;}
//--- die erfolgreiche Umsetzung
   return(true);
 ;}
//+------------------------------------------------------------------+
//| Ändert Bindungsmethode                                           |
//+------------------------------------------------------------------+
bool ArrowAnchorChange(const long              chart_ID=0,        // ID des Charts
                       const string            name="Arrow",      // Name des Objekts
                       const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP// Bindungsmethode
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- Bindungsmethode ändern
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor))
     {
      Print(__FUNCTION__,
            ": Bindungsmethode konnte nicht geändert werden! Fehlercode = ",GetLastError());
      return(false);
    ;}
//--- die erfolgreiche Umsetzung
   return(true);
 ;}
//+------------------------------------------------------------------+
//| Löscht den Pfeil                                                   |
//+------------------------------------------------------------------+
bool ArrowDelete(const long   chart_ID=0,   // ID des Charts
                 const string name="Arrow"// Name des Pfeils
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- Pfeil löschen
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": Pfeil konnte nicht gelöscht werden! 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 Ankerpunkte 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 Pfeils definieren
   int d=InpDate*(bars-1)/100;
   int p=InpPrice*(accuracy-1)/100;
//--- erstellen einen Pfeil auf dem Chart
   if(!ArrowCreate(0,InpName,0,date[d],price[p],32,InpAnchor,InpColor,
      InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
    ;}
//--- den Chart neu zeichnen
   ChartRedraw();
//--- Alle Varianten von Erstellung der Pfeile in Zyklus betrachten
   for(int i=33;i<256;i++)
     {
      if(!ArrowCodeChange(0,InpName,(uchar)i))
         return;
 //--- Überprüfen die Fakten von Zwangsabschaltung der Skript
      if(IsStopped())
         return;
      //--- den Chart neu zeichnen
      ChartRedraw();
      // Verzögerung in einer halben Sekunde
      Sleep(500);
    ;}
//--- 1 Sekunde Verzögerung
   Sleep(1000);
//--- Pfeil aus dem Chart löschen
   ArrowDelete(0,InpName);
   ChartRedraw();
//--- 1 Sekunde Verzögerung
   Sleep(1000);
//---
 ;}