Descargar MetaTrader 5

Estilos de dibujo

Cuando creamos un indicador personalizado se puede indicar uno de 18 tipos de construcción gráfica (modo de visualizar en la ventana principal o subventana del gráfico), cuyos valores se especifican en la enumeración ENUM_DRAW_TYPE.

En un indicador personalizado se permite usar cualquier tipo de construcción/dibujo de indicadores. Cada tipo de construcción requiere que se indique de uno a cinco arrays globales para almacenar los datos necesarios para dibujar. Hay que enlazar estas matrices de datos con los buffers de indicadores mediante la función SetIndexBuffer(), y especificar el tipo de datos de la enumeración ENUM_INDEXBUFFER_TYPE para cada buffer.

Dependiendo del estilo de dibujo, podemos necesitar de uno a cuatro buffers de valores (marcados como INDICATOR_DATA). Si un estilo admite la alternación dinámica de colores (todos los colores contienen la palabra COLOR en sus nombres), entonces necesitamos un buffer de color (tipo indicado INDICATOR_COLOR_INDEX). El buffer de colores siempre se enlaza después de los buffers de valores que corresponden al estilo.

ENUM_DRAW_TYPE

Identificador

Descripción

Buffer de valores

Buffer de color

DRAW_NONE

No se dibuja

1

0

DRAW_LINE

Línea

1

0

DRAW_SECTION

Sección

1

0

DRAW_HISTOGRAM

Histograma de la línea cero

1

0

DRAW_HISTOGRAM2

Histograma de dos buffers de indicadores

2

0

DRAW_ARROW

Dibujo de flechas

1

0

DRAW_ZIGZAG

Estilo Zigzag permite secciones verticales en la barra

2

0

DRAW_FILLING

Relleno de color entre dos niveles

2

0

DRAW_BARS

Visualización como secuencia de barras

4

0

DRAW_CANDLES

Visualización como secuencia de velas

4

0

DRAW_COLOR_LINE

Línea multicolor

1

1

DRAW_COLOR_SECTION

Secciones multicolor

1

1

DRAW_COLOR_HISTOGRAM

Histograma multicolor desde la línea cero  

1

1

DRAW_COLOR_HISTOGRAM2

Histograma multicolor de dos buffers de indicadores

2

1

DRAW_COLOR_ARROW

Dibujo con flechas multicolor

1

1

DRAW_COLOR_ZIGZAG

ZigZag multicolor

2

1

DRAW_COLOR_BARS

Barras multicolor

4

1

DRAW_COLOR_CANDLES

Velas multicolor

4

1

 

Para perfeccionar la visualización del tipo seleccionado de dibujo podemos usar los identificadores que vienen en la enumeración ENUM_PLOT_PROPERTY.

Para las funciones PlotIndexSetInteger() y PlotIndexGetInteger()

ENUM_PLOT_PROPERTY_INTEGER

Identificador

Descripción

Tipo de la propiedad

PLOT_ARROW

Código de flecha para el estilo DRAW_ARROW

uchar

PLOT_ARROW_SHIFT

Desplazamiento vertical de flechas para el estilo DRAW_ARROW

int

PLOT_DRAW_BEGIN

Número de barras iniciales sin dibujar y valores en DataWindow

int

PLOT_DRAW_TYPE

Tipo de construcción gráfica

ENUM_DRAW_TYPE

PLOT_SHOW_DATA

Indica la visualización de valores de construcción en la ventana DataWindow

bool

PLOT_SHIFT

Desplazamiento de representación gráfica del indicador respecto al eje de tiempo en barras

int

PLOT_LINE_STYLE

Estilo de la línea de dibujo

ENUM_LINE_STYLE

PLOT_LINE_WIDTH

Grosor de línea de dibujo

int

PLOT_COLOR_INDEXES

Número de colores

int

PLOT_LINE_COLOR

Índice del buffer que contiene el color

color     modificador=número del índice de color

Para la función PlotIndexSetDouble()

ENUM_PLOT_PROPERTY_DOUBLE

Identificador

Descripción

Tipo de la propiedad

PLOT_EMPTY_VALUE

Valor vacío para una representación gráfica, para la que no hay dibujo

double

Para la función PlotIndexSetString()

ENUM_PLOT_PROPERTY_STRING

Identificador

Descripción

Tipo de la propiedad

PLOT_LABEL

Nombre de la serie gráfica de indicador para la visualización en DataWindow. Para los estilos gráficos complejos, que requieren varios búferes de indicador para su visualización, los nombres para cada búfer se puede establecer utilizando ";" como separador. El ejemplo del código se puede encontrar en DRAW_CANDLES

string

Hay 5 estilos que se usan para dibujar una línea en un indicador personalizado. Se puede usarlas sólo si tienen el grosor de 0 a 1.

ENUM_LINE_STYLE

Identificador

Descripción

STYLE_SOLID

Línea continua

STYLE_DASH

Polilínea

STYLE_DOT

Línea de puntos

STYLE_DASHDOT

Línea de punto y raya

STYLE_DASHDOTDOT

Línea de dos puntos y raya

 

Para definir el estilo de dibujo de línea y el tipo de dibujo, se usa la función PlotIndexSetInteger(). A través de la función ObjectSetInteger() se puede determinar el espesor y el estilo del dibujo de niveles para las extensiones de Fibonacci.

Ejemplo:

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- indicator buffers
double         MABuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- enlace del array con el búfer de indicador con el índice 0
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
//--- establecer el dibujo de línea
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
//--- configuración del estilo para dibujar la línea
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_DOT);
//--- color de línea
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrRed);
//--- espesor de línes
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);
//--- etiqueta para la línea
   PlotIndexSetString(0,PLOT_LABEL,"Moving Average");
//---
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//--- 
   for(int i=prev_calculated;i<rates_total;i++)
     {
      MABuffer[i]=close[i];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }