OBJ_TEXT

Objeto "Texto".

ObjText

Nota

Desde la enumeración ENUM_ANCHOR_POINT se puede elegir la posición del punto de anclaje respecto al texto. Además, se puede cambiar el ángulo de inclinación del texto a través de la propiedad OBJPROP_ANGLE.

Ejemplo

El siguiente script crea varios objetos "Texto" 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 objeto gráfico \"Texto\"."
//--- 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            InpFont="Arial";         // Fuente
input int               InpFontSize=10;          // Tamaño de la fuente
input color             InpColor=clrRed;         // Color
input double            InpAngle=90.0;           // Ángulo de inclinación en grados
input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_LEFT;   // Modo de anclaje
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 objeto "Texto"                                           |
//+------------------------------------------------------------------+
bool TextCreate(const long              chart_ID=0,               // ID del gráfico
                const string            name="Text",              // nombre del objeto
                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            text="Text",              // el texto
                const string            font="Arial",             // fuente
                const int               font_size=10,             // tamaño de la fuente
                const color             clr=clrRed,               // color
                const double            angle=0.0,                // inclinación del texto
                const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER// modo de anclaje
                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
   ChangeTextEmptyPoint(time,price);
//--- anulamos el valor del error
   ResetLastError();
//--- creamos el objeto "Texto"
   if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al crear el objeto \"Texto\"! Código del error = ",GetLastError());
      return(false);
     }
//--- ponemos el texto
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- establecemos la fuente del texto
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- establecemos el tamaño del texto
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- establecemos el ángulo de inclinación del texto
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- establecemos el modo de anclaje
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- establecemos el color
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- 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 del texto 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);
  }
//+------------------------------------------------------------------+
//| Mueve el punto de anclaje                                        |
//+------------------------------------------------------------------+
bool TextMove(const long   chart_ID=0,  // ID del gráfico
              const string name="Text"// nombre del objeto
              datetime     time=0,      // coordenada del tiempo del punto de anclaje
              double       price=0)     // coordenada del 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 texto del objeto                                           |
//+------------------------------------------------------------------+
bool TextChange(const long   chart_ID=0,  // ID del gráfico
                const string name="Text"// nombre del objeto
                const string text="Text"// texto
  {
//--- anulamos el valor del error
   ResetLastError();
//--- cambiamos el texto del objeto
   if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al cambiar el texto! Código del error = ",GetLastError());
      return(false);
     }
//--- ejecución con éxito
   return(true);
  }
//+------------------------------------------------------------------+
//| Elimina el objeto "Texto"                                           |
//+------------------------------------------------------------------+
bool TextDelete(const long   chart_ID=0,  // ID del gráfico
                const string name="Text"// nombre del objeto
  {
//--- anulamos el valor del error
   ResetLastError();
//--- eliminamos el objeto
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al eliminar el objeto \"Texto\"! 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 ChangeTextEmptyPoint(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   low[];  // array para guardar los precios Low de las barras visibles
   double   high[]; // array para guardar los precios High de las barras visibles
//--- 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(low,bars);
   ArrayResize(high,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 Low
   if(CopyLow(Symbol(),Period(),0,bars,low)==-1)
     {
      Print("¡Fallo al copiar los valores de los precios Low! Código del error = ",GetLastError());
      return;
     }
//--- llenamos el array de precios High
   if(CopyHigh(Symbol(),Period(),0,bars,high)==-1)
     {
      Print("¡Fallo al copiar los valores de los precios High! Código del error = ",GetLastError());
      return;
     }
//--- definimos con qué frecuencia hay que hacer las notas
   int scale=(int)ChartGetInteger(0,CHART_SCALE);
//--- definimos el paso
   int step=1;
   switch(scale)
     {
      case 0:
         step=12;
         break;
      case 1:
         step=6;
         break;
      case 2:
         step=4;
         break;
      case 3:
         step=2;
         break;
     }
//--- creamos las notas para los valores High y Low de las barras (con intervalos)
   for(int i=0;i<bars;i+=step)
     {
      //--- creamos las notas
      if(!TextCreate(0,"TextHigh_"+(string)i,0,date[i],high[i],DoubleToString(high[i],5),InpFont,InpFontSize,
         InpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
        {
         return;
        }
      if(!TextCreate(0,"TextLow_"+(string)i,0,date[i],low[i],DoubleToString(low[i],5),InpFont,InpFontSize,
         InpColor,-InpAngle,InpAnchor,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 las notas
   for(int i=0;i<bars;i+=step)
     {
      if(!TextDelete(0,"TextHigh_"+(string)i))
         return;
      if(!TextDelete(0,"TextLow_"+(string)i))
         return;
      //--- redibujamos el gráfico
      ChartRedraw();
      // retardo de 0,05 segundo
      Sleep(50);
     }
//---
  }