OBJ_BITMAP

Oggetto Bitmap

ObjBitmap

Nota

Per oggetti Bitmap, puoi selezionare l'ambito di visibilità di un'immagine.

Esempio

Lo script che segue crea diversi bitmaps sul chart. Funzioni speciali sono state sviluppate per creare e modificare le proprietà dell'oggetto grafico. È possibile utilizzare queste funzioni "come è" nelle proprie applicazioni.

 

//--- descrizione
#property description "Gli Script creano un bitmap nella finestra del chart."
//--- mostra la finestra dei parametri di input durante il lancio dello script
#property script_show_inputs
//--- parametri di input dello script
input string          InpFile="\\Images\\dollar.bmp"// Nome del file del Bitmap
input int             InpWidth=24;                    // Ambito di visibilità, coordinate X
input int             InpHeight=24;                   // Ambito di visibilità, coordinate Y
input int             InpXOffset=4;                   // Ambito di visibilità, slittamento sull'asse X
input int             InpYOffset=4;                   // Ambito di visibilità, slittamento sull'asse Y
input color           InpColor=clrRed;                // Colore del bordo quando evidenziato
input ENUM_LINE_STYLE InpStyle=STYLE_SOLID;           // Stile della linea quando viene evidenziata
input int             InpPointWidth=1;                // Grandezza punto da muovere
input bool            InpBack=false;                  // Oggetto di sottofondo
input bool            InpSelection=false;             // Evidenzia di movimento
input bool            InpHidden=true;                 // Nascosto nella lista oggetti
input long            InpZOrder=0;                    // Priorità per il click del mouse
//+--------------------------------------------------------------------------------+
//| Crea un bitmap nella finestra chart                                            |
//+--------------------------------------------------------------------------------+
bool BitmapCreate(const long            chart_ID=0,        // ID del chart
                  const string          name="Bitmap",     // nome del bitmap
                  const int             sub_window=0,      // indice sottofinestra
                  datetime              time=0,            // orario punto di ancoraggio
                  double                price=0,           // prezzo punto di ancoraggio
                  const string          file="",           // nome del file bitmap
                  const int             width=10,          // ambito di visibilità coordinate X
                  const int             height=10,         // ambito di visibilità coordinate Y
                  const int             x_offset=0,        // ambito di visibilità, slittamento sull' asse X
                  const int             y_offset=0,        // ambito di visibilità, slittamento sull' asse Y
                  const color           clr=clrRed,        // colore del bordo quando evidenziato
                  const ENUM_LINE_STYLE style=STYLE_SOLID//stile linea quando evidenziata
                  const int             point_width=1,     // grandezza del punto di spostamento
                  const bool            back=false,        // in sottofondo
                  const bool            selection=false,   // evidenzia movimento
                  const bool            hidden=true,       // nascosto nella lista oggetti
                  const long            z_order=0)         // priorità per il click del mouse
  {
//--- imposta coordinate punto di ancoraggio se non sono impostate
   ChangeBitmapEmptyPoint(time,price);
//--- resetta il valore dell' errore
   ResetLastError();
//--- crea un bitmap
   if(!ObjectCreate(chart_ID,name,OBJ_BITMAP,sub_window,time,price))
     {
      Print(__FUNCTION__,
            ": fallimento nel creare un bitmap nella finestra del chart! Error code = ",GetLastError());
      return(false);
     }
//--- imposta il percorso al file dell'immagine
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file))
     {
      Print(__FUNCTION__,
            ": fallimento nel caricare l'immagine! Error code = ",GetLastError());
      return(false);
     }
//--- imposta ambito di visibilità per l'immagine; se i valori dello spessore o dell'altezza
//--- eccedono lo spessore e l'altezza(rispettivamente) di un'immagine sorgente,
//--- essa non viene disegnata; in caso contrario
//--- solo la parte corrispondente di questi valori viene disegnata
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- imposta la parte di un'immagine che dev'essere visualizzata nell'ambito visibilità
//--- la parte di default è la parte superiore sinistra dell'immagine; i valori permettono
//--- di eseguire uno slittamento da quest' area visualizzando un'altra parte dell'immagine
   ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
   ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
//--- imposta il colore del bordo quando è abilitata la modalità di evidenziazione
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- imposta lo stile del bordo della linea quando la modalità di evidenzia dell'oggetto è abilitata
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- imposta la grandezza di un punto di ancoraggio per lo spostamento di un oggetto
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
//--- mostra in primo piano (false) o sottofondo (true)
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- abilita (true) o disabilita (false) il modo di spostamento dell'etichetta con il mouse
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- nascondi (true) o mostra (falso) il nome di oggetto grafico nella lista degli oggetti
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- imposta la priorità per ricevere l'evento di un clic del mouse nel grafico
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- esecuzione avvenuta
   return(true);
  }
//+--------------------------------------------------------------------------------+
//| Imposta una nuova immagine per il bitmap                                       |
//+--------------------------------------------------------------------------------+
bool BitmapSetImage(const long   chart_ID=0,    // ID del chart
                    const string name="Bitmap"// nome del bitmap
                    const string file="")       // percorso del file
  {
//--- resetta il valore dell' errore
   ResetLastError();
//--- imposta il percorso al file dell'immagine
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file))
     {
      Print(__FUNCTION__,
            ": fallimento nel caricare l'immagine! Error code = ",GetLastError());
      return(false);
     }
//--- esecuzione avvenuta
   return(true);
  }
//+--------------------------------------------------------------------------------+
//| Sposta un bitmap nella finestra del chart                                      |
//+--------------------------------------------------------------------------------+
bool BitmapMove(const long   chart_ID=0,    // ID del chart
                const string name="Bitmap"// nome del bitmap
                datetime     time=0,        // orario del punto di ancoraggio
                double       price=0)       // prezzo del punto di ancoraggio
  {
//--- se il punto della posizione non è impostato, spostarlo nella barra corrente che ha il prezzo Bid
   if(!time)
      time=TimeCurrent();
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- resetta il valore dell' errore
   ResetLastError();
//--- sposta il punto di ancoraggio
   if(!ObjectMove(chart_ID,name,0,time,price))
     {
      Print(__FUNCTION__,
            ": fallimento nello spostare il punto di ancoraggio! Error code = ",GetLastError());
      return(false);
     }
//--- esecuzione avvenuta
   return(true);
  }
//+--------------------------------------------------------------------------------+
//| Cambia la grandezza dell'ambito visibilità (bitmap)                            |
//+--------------------------------------------------------------------------------+
bool BitmapChangeSize(const long   chart_ID=0,    // ID del chart
                      const string name="Bitmap"// nome del bitmap
                      const int    width=0,       // spessore del bitmap
                      const int    height=0)      // altezza del bitmap
  {
//--- resetta il valore dell' errore
   ResetLastError();
//--- cambia la grandezza del bitmap
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
     {
      Print(__FUNCTION__,
            ": fallimento nel cambiare lo spessore del bitmap! Error code = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
     {
      Print(__FUNCTION__,
            ": fallimento nel cambiare l'altezza del bitmap! Error code = ",GetLastError());
      return(false);
     }
//--- esecuzione avvenuta
   return(true);
  }
//+----------------------------------------------------------------------------------+
//| Cambia le coordinate dell'angolo superiore sinistro dell'ambito di visibilità    |
//+----------------------------------------------------------------------------------+
bool BitmapMoveVisibleArea(const long   chart_ID=0,    // ID del chart
                           const string name="Bitmap"// nome del bitmap
                           const int    x_offset=0,    // ambito di visibilità coordinate X
                           const int    y_offset=0)    // ambito di visibilità coordinate Y
  {
//--- resetta il valore dell' errore
   ResetLastError();
//--- cambia le coordinate dell'ambito di visibilità
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset))
     {
      Print(__FUNCTION__,
            ": fallimento nel cambiare le coordinate X dell'ambito di visibilità! Error code = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset))
     {
      Print(__FUNCTION__,
            ": fallimento nel cambiare le coordinate Y dell'ambito di visibilità! Error code = ",GetLastError());
      return(false);
     }
//--- esecuzione avvenuta
   return(true);
  }
//+--------------------------------------------------------------------------------+
//| Elimina il bitmap                                                              |
//+--------------------------------------------------------------------------------+
bool BitmapDelete(const long   chart_ID=0,    // ID del chart
                  const string name="Bitmap"// nome del bitmap
  {
//--- resetta il valore dell' errore
   ResetLastError();
//--- elimina l'etichetta
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": fallimento nell'eliminazione del bitmap! Error code = ",GetLastError());
      return(false);
     }
//--- esecuzione avvenuta
   return(true);
  }
//+--------------------------------------------------------------------------------+
//| Controlla i valori di punto di ancoraggio ed imposta i valori di default       |
//| per quelli vuoti                                                               |
//+--------------------------------------------------------------------------------+
void ChangeBitmapEmptyPoint(datetime &time,double &price)
  {
//--- se il tempo del punto non è impostato, sarà sulla barra corrente
   if(!time)
      time=TimeCurrent();
//--- se il prezzo del punto non è impostato, avrà un valore Bid
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  }
//+--------------------------------------------------------------------------------+
//| Funzione di avvio del programma Script                                         |
//+--------------------------------------------------------------------------------+
voidOnStart()
  {
   datetime date[];  // array per memorizzare le date delle barre visibili
   double   close[]; // array per memorizzare i prezzi Close
//--- nome del file bitmap
   string   file="\\Images\\dollar.bmp";
//--- Numero di barre visibili nella finestra del chart
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- allocazione della memoria
   ArrayResize(date,bars);
   ArrayResize(close,bars);
//--- riempie l'array delle date
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("Fallimento nella copia dei valori tempo! Error code = ",GetLastError());
      return;
     }
//--- riempie l'array dei prezzi Close
   if(CopyClose(Symbol(),Period(),0,bars,close)==-1)
     {
      Print("Fallimento nel copiare i valori dei prezzi Close! Error code = ",GetLastError());
      return;
     }
//--- definisce quanto spesso devono essere visualizzate le immagini
   int scale=(int)ChartGetInteger(0,CHART_SCALE);
//--- definisce lo step
   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;
     }
//--- crea bitmap per valori High e Low delle barre (con i gap)
   for(int i=0;i<bars;i+=step)
     {
      //--- crea i bitmaps
      if(!BitmapCreate(0,"Bitmap_"+(string)i,0,date[i],close[i],InpFile,InpWidth,InpHeight,InpXOffset,
         InpYOffset,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
        {
         return;
        }
      //--- controlla se l'operazione dello script è stata disabilitata per forza
      if(IsStopped())
         return;
      //--- ridisegna il chart
      ChartRedraw();
      // 0.05 secondi di ritardo
      Sleep(50);
     }
//--- ritardo di mezzo secondo
   Sleep(500);
//--- elimina il segno Sell
   for(int i=0;i<bars;i+=step)
     {
      if(!BitmapDelete(0,"Bitmap_"+(string)i))
         return;
      if(!BitmapDelete(0,"Bitmap_"+(string)i))
         return;
      //--- ridisegna il chart
      ChartRedraw();
      // 0.05 secondi di ritardo
      Sleep(50);
     }
//---
  }