OBJ_BITMAP

Objeto "Dibujo".

ObjBitmap

Nota

Para el objeto "Dibujo" se puede elegir la zona de visibilidad de la imagen.

Ejemplo

El siguiente script crea varias imágenes en el gráfico. Para la creación y modificación de las propiedades del objeto gráfico han sido escritas unas funciones especiales que Usted puede utilizar "como son" en sus propias aplicaciones.

 

//--- descripción
#property description "El script crea el dibujo en la ventana del gráfico."
//--- mostramos la ventana de los parámetros de entrada durante el arranque del script
#property script_show_inputs
//--- los parámetros de entrada del script
input string          InpFile="\\Images\\dollar.bmp"// Nombre del archivo con la imagen
input int             InpWidth=24;                    // coordenada X de la zona de visibilidad
input int             InpHeight=24;                   // coordenada Y de la zona de visibilidad
input int             InpXOffset=4;                   // Desplazamiento de la zona de visibilidad por X
input int             InpYOffset=4;                   // Desplazamiento de la zona de visibilidad por Y
input color           InpColor=clrRed;                // Color del borde durante la selección
input ENUM_LINE_STYLE InpStyle=STYLE_SOLID;           // Estilo de la línea durante la selección
input int             InpPointWidth=1;                // Tamaño del punto para los movimientos
input bool            InpBack=false;                  // Objeto al fondo
input bool            InpSelection=false;             // Seleccionar para mover
input bool            InpHidden=true;                 // Ocultar en la lista de objetos
input long            InpZOrder=0;                    // Prioridad para el clic del ratón
//+------------------------------------------------------------------+
//| Crea el dibujo en la ventana del gráfico                                   |
//+------------------------------------------------------------------+
bool BitmapCreate(const long            chart_ID=0,        // ID del gráfico
                  const string          name="Bitmap",     // nombre del dibujo
                  const int             sub_window=0,      // número de subventana
                  datetime              time=0,            // hora del punto de anclaje
                  double                price=0,           // precio del punto de anclaje
                  const string          file="",           // nombre del archivo con la imagen
                  const int             width=10,          // coordenada X de la zona de visibilidad
                  const int             height=10,         // coordenada Y de la zona de visibilidad
                  const int             x_offset=0,        // desplazamiento de la zona de visibilidad por X
                  const int             y_offset=0,        // desplazamiento de la zona de visibilidad por Y
                  const color           clr=clrRed,        // color del borde durante la selección
                  const ENUM_LINE_STYLE style=STYLE_SOLID// estilo de la línea durante la selección
                  const int             point_width=1,     // tamaño del punto de desplazamiento
                  const bool            back=false,        // al fondo
                  const bool            selection=false,   // seleccionar para mover
                  const bool            hidden=true,       // ocultar en la lista de objetos
                  const long            z_order=0)         // prioridad para el clic del ratón
  {
//--- establecemos las coordenadas del punto de anclaje si todavía no han sido establecidas
   ChangeBitmapEmptyPoint(time,price);
//--- anulamos el valor del error
   ResetLastError();
//--- creamos el dibujo
   if(!ObjectCreate(chart_ID,name,OBJ_BITMAP,sub_window,time,price))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al crear el dibujo en la ventana del gráfico! Código del error = ",GetLastError());
      return(false);
     }
//--- establecemos la ruta hacia el archivo con la imagen
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al cargar la imagen! Código del error = ",GetLastError());
      return(false);
     }
//--- establecemos la zona de visibilidad de la imagen; si los valores del ancho o del alto
//--- superan los valores del ancho o del alto (respectivamente) de la imagen original,
//--- no se dibuja; si los valores del ancho o del alto son inferiores a las dimensiones de la imagen,
//--- se dibuja la parte que corresponde a estas dimensiones
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- establecemos la parte de la imagen que debe mostrarse en la zona de visibilidad
//--- por defecto se trata de la zona superior izquierda de la imagen; los valores permiten
//--- hacer el desplazamiento de esta esquina y mostrar otra parte de la imagen
   ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
   ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
//--- establecemos el color del contorno durante el modo de selección del objeto activado
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- establecemos el estilo del contorno durante el modo de selección del objeto activado
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- establecemos el tamaño del punto de enlace con el que se puede mover el objeto
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
//--- mostramos en el primer plano (false) o al fondo (true)
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- activar (true) o desactivar (false) el modo de desplazamiento de la etiqueta con ratón
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultamos (true) o mostramos (false) el nombre del objeto gráfico en la lista de objetos
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- establecemos la prioridad para obtener el evento de cliquear sobre el gráfico
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- ejecución con éxito
   return(true);
  }
//+------------------------------------------------------------------+
//| Pone nueva imagen para el dibujo                         |
//+------------------------------------------------------------------+
bool BitmapSetImage(const long   chart_ID=0,    // ID del gráfico
                    const string name="Bitmap"// nombre de la imagen
                    const string file="")       // ruta hacia el archivo
  {
//--- anulamos el valor del error
   ResetLastError();
//--- establecemos la ruta hacia el archivo con la imagen
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al cargar la imagen! Código del error = ",GetLastError());
      return(false);
     }
//--- ejecución con éxito
   return(true);
  }
//+------------------------------------------------------------------+
//| Mueve el dibujo dentro de la ventana del gráfico                                |
//+------------------------------------------------------------------+
bool BitmapMove(const long   chart_ID=0,    // ID del gráfico
                const string name="Bitmap"// nombre del dibujo
                datetime     time=0,        // hora del punto de anclaje
                double       price=0)       // precio del punto de anclaje
  {
//--- si las coordenadas del punto de anclaje no han sido establecidas, lo movemos a la barra actual con el precio Bid
   if(!time)
      time=TimeCurrent();
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- anulamos el valor del error
   ResetLastError();
//--- movemos el punto de anclaje
   if(!ObjectMove(chart_ID,name,0,time,price))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al mover el punto de anclaje! Código del error = ",GetLastError());
      return(false);
     }
//--- ejecución con éxito
   return(true);
  }
//+------------------------------------------------------------------+
//| Cambia el tamaño de la zona de visibilidad (tamaño del dibujo)               |
//+------------------------------------------------------------------+
bool BitmapChangeSize(const long   chart_ID=0,    // ID del gráfico
                      const string name="Bitmap"// nombre del dibujo
                      const int    width=0,       // ancho del dibujo
                      const int    height=0)      // alto del dibujo
  {
//--- anulamos el valor del error
   ResetLastError();
//--- cambiamos las dimensiones del dibujo
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al cambiar el ancho del dibujo! Código del error = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al cambiar el alto del dibujo! Código del error = ",GetLastError());
      return(false);
     }
//--- ejecución con éxito
   return(true);
  }
//+------------------------------------------------------------------+
//| Cambia la coordenada de la esquina superior izquierda de la zona de visibilidad       |
//+------------------------------------------------------------------+
bool BitmapMoveVisibleArea(const long   chart_ID=0,    // ID del gráfico
                           const string name="Bitmap"// nombre del dibujo
                           const int    x_offset=0,    // coordenada X de la zona de visibilidad
                           const int    y_offset=0)    // coordenada Y de la zona de visibilidad
  {
//--- anulamos el valor del error
   ResetLastError();
//--- cambiamos las coordenadas de la zona de visibilidad del dibujo
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al cambiar la coordenada X de la zona de visibilidad! Código del error = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al cambiar la coordenada Y de la zona de visibilidad! Código del error = ",GetLastError());
      return(false);
     }
//--- ejecución con éxito
   return(true);
  }
//+------------------------------------------------------------------+
//| Elimina el dibujo                                                  |
//+------------------------------------------------------------------+
bool BitmapDelete(const long   chart_ID=0,    // ID del gráfico
                  const string name="Bitmap"// nombre del dibujo
  {
//--- anulamos el valor del error
   ResetLastError();
//--- eliminamos la etiqueta
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al eliminar el dibujo! Código del error = ",GetLastError());
      return(false);
     }
//--- ejecución con éxito
   return(true);
  }
//+------------------------------------------------------------------+
//| Comprueba los valores de los puntos de anclaje y para          |
//| los valores vacíos establece los valores por defecto                              |
//+------------------------------------------------------------------+
void ChangeBitmapEmptyPoint(datetime &time,double &price)
  {
//--- si la hora del punto no ha sido establecida, se colocará en la barra actual
   if(!time)
      time=TimeCurrent();
//--- si el precio del punto no ha sido establecido, tendrá el valor Bid
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date[];  // array para guardar las fechas de las barras visibles
   double   close[]; // array para guardar los precios Close
//--- nombre del archivo con la imagen
   string   file="\\Images\\dollar.bmp";
//--- número de barras visibles en la ventana del gráfico
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- asignación de la memoria
   ArrayResize(date,bars);
   ArrayResize(close,bars);
//--- llenamos el array de datos
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("¡Fallo al copiar el valor de la hora! Código del error = ",GetLastError());
      return;
     }
//--- llenamos el array de precios Close
   if(CopyClose(Symbol(),Period(),0,bars,close)==-1)
     {
      Print("¡Fallo al copiar los valores de los precios Close! Código del error = ",GetLastError());
      return;
     }
//--- definimos con qué frecuencia hay que mostrar las imágenes
   int scale=(int)ChartGetInteger(0,CHART_SCALE);
//--- definimos el paso
   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;
     }
//--- creamos los dibujos para los valores High y Low de las barras (con intervalos)
   for(int i=0;i<bars;i+=step)
     {
      //--- creamos los dibujos
      if(!BitmapCreate(0,"Bitmap_"+(string)i,0,date[i],close[i],InpFile,InpWidth,InpHeight,InpXOffset,
         InpYOffset,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
        {
         return;
        }
      //--- comprobamos si el trabajo del script ha sido finalizado forzosamente
      if(IsStopped())
         return;
      //--- redibujamos el gráfico
      ChartRedraw();
      // retardo de 0,05 segundo
      Sleep(50);
     }
//--- retardo de medio segundo
   Sleep(500);
//--- eliminamos los signos "Sell"
   for(int i=0;i<bars;i+=step)
     {
      if(!BitmapDelete(0,"Bitmap_"+(string)i))
         return;
      if(!BitmapDelete(0,"Bitmap_"+(string)i))
         return;
      //--- redibujamos el gráfico
      ChartRedraw();
      // retardo de 0,05 segundo
      Sleep(50);
     }
//---
  }