Aplicación de directivas para personalizar trazados gráficos

Hasta ahora hemos estado personalizando los trazados gráficos mediante llamadas a funciones de PlotIndexSetInteger. MQL5 le permite hacer lo mismo utilizando directivas del preprocesador #property. La principal diferencia entre estos dos métodos es que las directivas se procesan en tiempo de compilación y las propiedades descritas con ellas se leen del archivo ejecutable durante la carga, incluso antes de que se ejecute el manejador OnInit (si existe). Es decir, las directivas proporcionan algunos valores por defecto que pueden utilizarse tal cual si no es necesario cambiarlos.

Por otro lado, la llamada a la función PlotIndexSetInteger permite cambiar las propiedades sobre la marcha, durante la ejecución del programa. Cambiar las propiedades dinámicamente mediante funciones permite crear escenarios más flexibles para utilizar el indicador. Las directivas y las correspondientes llamadas a la función PlotIndexSetInteger se muestran en la siguiente tabla:

Directivas

Función

Descripción

indicator_colorN

PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, color)

Color de línea para el trazado

indicator_styleN

PlotIndexSetInteger(N-1, PLOT_LINE_STYLE, type)

Estilo de dibujo de la enumeración ENUM_LINE_STYLE

indicator_typeN

PlotIndexSetInteger(N-1, PLOT_DRAW_TYPE, type)

Tipo de dibujo de la enumeración ENUM_DRAW_TYPE

indicator_widthN

PlotIndexSetInteger(N-1, PLOT_LINE_WIDTH, width)

Grosor de la línea en píxeles (1 - 5)

Tenga en cuenta que la numeración de los trazados en las directivas empieza por 1, mientras que en las funciones empieza por 0. Por ejemplo, la directiva #property indicator_type1 DRAW_ZIGZAG equivale a llamar a PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_ZIGZAG).

También vale la pena señalar que mediante el uso de la función puede establecer muchas más propiedades que a través de directivas: la enumeración ENUM_PLOT_PROPERTY_INTEGER proporciona diez elementos.

Las propiedades descritas por las directivas están disponibles (visibles y editables por el usuario) en el cuadro de diálogo de configuración del indicador, incluso cuando se coloca en el gráfico por primera vez. En concreto, esto incluye el grosor, el color y el estilo de las líneas (pestaña Colors), el número y la colocación de los niveles (pestaña Levels). Las mismas propiedades establecidas por las funciones (y si no tienen valores por defecto en las directivas) aparecen en el cuadro de diálogo sólo la segunda vez y siguientes.

Vamos a ajustar el indicador IndHighLowClose.mq5 para que utilice directivas. La nueva versión se encuentra en el archivo IndPropHighLowClose.mq5. El uso de directivas simplifica el manejador OnInit; OnCalculate no cambia.

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots 2
   
// High-Low histogram rendering settings (change index 0 to 1 in the directive)
#property indicator_type1   DRAW_HISTOGRAM2
#property indicator_style1  STYLE_SOLID // by default, can be omitted
#property indicator_color1  clrBlue
#property indicator_width1  5
   
// close line drawing settings (change index 1 to 2 in the directive)
#property indicator_type2   DRAW_LINE
#property indicator_style2  STYLE_SOLID // by default, can be omitted
#property indicator_color2  clrRed
#property indicator_width2  2
   
double highs[];
double lows[];
double closes[];
   
int OnInit()
{
   // arrays for buffers for 3 price types
   SetIndexBuffer(0highs);
   SetIndexBuffer(1lows);
   SetIndexBuffer(2closes);
   
   return INIT_SUCCEEDED;
}

El nuevo indicador es absolutamente igual al anterior.