MetaTrader 5 herunterladen

OBJ_BITMAP

Objekt "Bild".

ObjBitmap

Hinweis

Für Objekt "Bild" können Sie Scope der Zeichnung.

Beispiel

Das folgende Skript erstellt auf dem Chart einige Bilder. 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 ein Bild im Chartfenster."
//--- Zeigen den Fenster von Eingabeparametern in der Skript-Startup
#property script_show_inputs
//--- Eingangsparameter von Skript
input string          InpFile="\\Images\\dollar.bmp"// Dateiname mit dem Bild
input int             InpWidth=24;                    // X-Koordinate des Rahmens
input int             InpHeight=24;                   // Y-Koordinate des Rahmens
input int             InpXOffset=4;                   // X-Offset des Rahmens
input int             InpYOffset=4;                   // X-Offset des Rahmens
input color           InpColor=clrRed;                // Farbe des Rahmens bei der Zuteilung
input ENUM_LINE_STYLE InpStyle=STYLE_SOLID;           // Linienstil bei der Zuteilung
input int             InpPointWidth=1;                // Größe des Punktes für Bewegung
input bool            InpBack=false;                  // Objekt im Hintergrund
input bool            InpSelection=false;             // Wählen zu bewegen
input bool            InpHidden=true;                 // Ausgeblendet in der Liste der Objekte
input long            InpZOrder=0;                    // Priorität auf Mausklick
//+------------------------------------------------------------------+
//| Erzeugt ein Bild im Chartfenster                                   |
//+------------------------------------------------------------------+
bool BitmapCreate(const long            chart_ID=0,        // ID des Charts
                  const string          name="Bitmap",     // Bildname
                  const int             sub_window=0,      // Nummer des Unterfensters
                  datetime              time=0,            // Zeit des Ankerpunktes
                  double                price=0,           // Preis des Ankerpunktes
                  const string          file="",           // Name der Bilddatei
                  const int             width=10,          // X-Koordinate des Gültigkeitsbereichs
                  const int             height=10,         // Y-Koordinate des Gültigkeitsbereichs
                  const int             x_offset=0,        // X-Verschiebung des Gültigkeitsbereichs
                  const int             y_offset=0,        // Y-Verschiebung des Gültigkeitsbereichs
                  const color           clr=clrRed,        //Rahmenfarbe bei dem Wählen
                  const ENUM_LINE_STYLE style=STYLE_SOLID// Linienstil bei dem Wählen
                  const int             point_width=1,     // Größe des Ankerpunktes
                  const bool            back=false,        // Im Hintergrund
                  const bool            selection=false,   // Auswählen um zu bewegen
                  const bool            hidden=true,       // Ausgeblendet in der Liste der Objekte
                  const long            z_order=0)         // Priorität auf Mausklick
  {
//--- Die Koordinaten des Bezugspunkts angeben, wenn sie nicht gesetzt sind
   ChangeBitmapEmptyPoint(time,price);
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- Erstellen wir ein Bild
   if(!ObjectCreate(chart_ID,name,OBJ_BITMAP,sub_window,time,price))
     {
      Print(__FUNCTION__,
            ": Konnte nicht das Bild im Chartfenster erstellen! Fehlercode = ",GetLastError());
      return(false);
    ;}
//--- Pfad zur Datei mit dem Bild setzen
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file))
     {
      Print(__FUNCTION__,
            ": Bild konnte nicht geladen werden! Fehlercode = ",GetLastError());
      return(false);
    ;}
//--- Bildrahmen eingebenö wenn die Werte von Breite oder Höhe
//--- größer als die Breite und Höhe des ursprünglichen Bildes sind, dann
//--- wird es nicht gezeichnet; wenn die Werte von Breite und Höhe sind kleiner als die Bildgröße,
//--- dann sein Teil, der diesen Größen entspricht, gezeichnet wird
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- setzen den Teil des Bildes, der in den Rahmen angezeigt werden soll
//--- Standardmäßig ist es der linke obere Bereich des Bildes; durch den Wert
//--- kann es von diesem Bild bewegt werden
   ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
   ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
//--- Farbe des Rahmens bei der Markierung des Objektes
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- Linienstil des Rahmens bei der Markierung des Objektes
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- die Größe des Punktes, den benutzt werden kann, um ein Objekt zu bewegen
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
//--- Im Vordergrund (false) oder Hintergrund (true) anzeigen
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Aktivieren (true) oder deaktivieren (false) Mausbewegung Modus
   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);
 ;}
//+------------------------------------------------------------------+
//| Setzt ein neues Bild für die Zeichnung                         |
//+------------------------------------------------------------------+
bool BitmapSetImage(const long   chart_ID=0,    // ID des Charts
                    const string name="Bitmap"// Name der Zeichnung
                    const string file="")       // Pfad zur Datei
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- Pfad zur Datei mit dem Bild setzen
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file))
     {
      Print(__FUNCTION__,
            ": Bild konnte nicht geladen werden! Fehlercode = ",GetLastError());
      return(false);
    ;}
//--- die erfolgreiche Umsetzung
   return(true);
 ;}
//+------------------------------------------------------------------+
//| Bewegt ein Bild im Chartfenster                                   |
//+------------------------------------------------------------------+
bool BitmapMove(const long   chart_ID=0,    // ID des Charts
                const string name="Bitmap"// Bildname
                datetime     time=0,        // Zeit des Ankerpunktes
                double       price=0)       // Preis des Ankerpunktes
  {
//--- 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 die Größe von Gültigkeitsbereich (Bildgröße)               |
//+------------------------------------------------------------------+
bool BitmapChangeSize(const long   chart_ID=0,    // ID des Charts
                      const string name="Bitmap"// Bildname
                      const int    width=0,       // Breite des Bildes
                      const int    height=0)      // Höhe des Bildes
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- Bildgröße ändern
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
     {
      Print(__FUNCTION__,
            ": Konnte nicht die Breite des Bildes ändern! Fehlercode = ",GetLastError());
      return(false);
    ;}
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
     {
      Print(__FUNCTION__,
            ": Konnte nicht die Höhe des Bildes ändern! Fehlercode = ",GetLastError());
      return(false);
    ;}
//--- die erfolgreiche Umsetzung
   return(true);
 ;}
//+------------------------------------------------------------------+
//| Ändert die Koordinate der oberen linken Ecke von Bildrahmen |
//+------------------------------------------------------------------+
bool BitmapMoveVisibleArea(const long   chart_ID=0,    // ID des Charts
                           const string name="Bitmap"// Bildname
                           const int    x_offset=0,    // X-Koordinate des Gültigkeitsbereichs 
                           const int    y_offset=0)    // Y-Koordinate des Gültigkeitsbereichs 
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- Koordinaten des Gültigkeitsbereichs des Bildes ändern
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset))
     {
      Print(__FUNCTION__,
            ": X-Koordinate des Objektrahmens konnte nicht geändert werden! Fehlercode = ",GetLastError());
      return(false);
    ;}
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset))
     {
      Print(__FUNCTION__,
            ": Y-Koordinate des Objektrahmens konnte nicht geändert werden! Fehlercode = ",GetLastError());
      return(false);
    ;}
//--- die erfolgreiche Umsetzung
   return(true);
 ;}
//+------------------------------------------------------------------+
//| Löscht das Bild                                                  |
//+------------------------------------------------------------------+
bool BitmapDelete(const long   chart_ID=0,    // ID des Charts
                  const string name="Bitmap"// Bildname
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- das Schild löschen
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": Könnte nicht ein Bild löschen! Fehlercode = ",GetLastError());
      return(false);
    ;}
//--- die erfolgreiche Umsetzung
   return(true);
 ;}
//+------------------------------------------------------------------+
//| Überprüft den Wert des Bezugspunkts für lehre Werte |
//| setzt Standardwerte |
//+------------------------------------------------------------------+
void ChangeBitmapEmptyPoint(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()
  {
   datetime date[];  // Array speichert Daten von sichtbaren Bars
   double   close[]; // Array speichert Close-Preise
//--- Name der Bilddatei
   string   file="\\Images\\dollar.bmp";
//--- Die Anzahl der sichtbaren Bars im Chart-Fenster
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- Speicher reservieren
   ArrayResize(date,bars);
   ArrayResize(close,bars);
//--- 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;
    ;}
//--- Array mit Close-Preise Füllen
   if(CopyClose(Symbol(),Period(),0,bars,close)==-1)
     {
      Print("Kann nicht die Werte der Close-Preise kopieren! Fehlercode = ",GetLastError());
      return;
    ;}
//--- Definieren wir, wie oft das Bild anzuzeigen
   int scale=(int)ChartGetInteger(0,CHART_SCALE);
//--- Schritt definieren
   int step=1;
   switch(scale)
     {
      case 0:
         step=27;
         break;
      case 1:
         step=14;
         break;
      case 2:
         step=7;
         break;
      case 3:
         step=4;
         break;
      case 4:
         step=2;
         break;
    ;}
//--- Bilder für die Werte von High und Low der Baren erstellen (mit Zwischenräume)
   for(int i=0;i<bars;i+=step)
     {
      //--- Bilder erstellen
      if(!BitmapCreate(0,"Bitmap_"+(string)i,0,date[i],close[i],InpFile,InpWidth,InpHeight,InpXOffset,
         InpYOffset,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
        {
         return;
       ;}
 //--- Überprüfen die Fakten von Zwangsabschaltung der Skript
      if(IsStopped())
         return;
      //--- den Chart neu zeichnen
      ChartRedraw();
      // Verzögerung 0.05 Sekunden
      Sleep(50);
    ;}
//--- Halb-Sekunden-Verzögerung
   Sleep(500);
//--- Zeichen "Sell" löschen
   for(int i=0;i<bars;i+=step)
     {
      if(!BitmapDelete(0,"Bitmap_"+(string)i))
         return;
      if(!BitmapDelete(0,"Bitmap_"+(string)i))
         return;
      //--- den Chart neu zeichnen
      ChartRedraw();
      // Verzögerung 0.05 Sekunden
      Sleep(50);
    ;}
//---
 ;}