IndicatorSetDouble

Establece el valor de la propiedad correspondiente del indicador. La propiedad del indicador tiene que ser del tipo double. Existen 2 variantes de la función.

Llamada con especificación del identificador de la propiedad.

bool  IndicatorSetDouble(
   int     prop_id,           // identificador
   double  prop_value         // valor que se establece
   );

Llamada con especificación del identificador y modificador de la propiedad.

bool  IndicatorSetDouble(
   int     prop_id,           // identificador
   int     prop_modifier,     // modificador 
   double  prop_value         // valor que se establece
   )

Parámetros

prop_id

[in]  Identificador de la propiedad del indicador. Su valor puede ser uno de los valores de la enumeración ENUM_CUSTOMIND_PROPERTY_DOUBLE.

prop_modifier

[in]  Modificador de la propiedad especificada. Sólo las propiedades de niveles requieren un modificador. La numeración de los niveles se empieza desde 0. Eso quiere decir que hay que especificar un uno para establecer la propiedad para el segundo nivel (uno menos que cuando se utiliza una directiva del compilador).

prop_value

[in]  Valor de la propiedad.

Valor devuelto

En caso de éxito devuelve true, de lo contrario devuelve false.

Nota

Cuando se utiliza la directiva #property la numeración de las propiedades (modificadores) se empieza desde 1 (un uno). Mientras que la función utiliza la numeración desde 0 (cero). Si el número del nivel no se establece de forma correcta, la visualización del indicador puede ser diferente de lo que está previsto.

Por ejemplo, hay dos maneras de establecer el valor del primer nivel para el indicador en una subventana separada:

  • property indicator_level1  50 - se utiliza un 1 par especificar el número del nivel,
  • IndicatorSetDouble(INDICATOR_LEVELVALUE, 0, 50) - se utiliza 0 para especificar el primer nivel.

Ejemplo: indicador que cambia los valores máximos y mínimos de la ventana del indicador, así como los valores de los niveles en los que se ubican las líneas horizontales.

Ejemplo del uso de la función IndicatorSetDouble()

//--- establecemos el valor máximo y mínimo para la ventana del indicador
#property indicator_minimum  0
#property indicator_maximum  100
//--- establecemos la muestra de tres niveles horizontales en la ventana separada del indicador
#property indicator_level1 25
#property indicator_level2 50
#property indicator_level3 75
//--- establecemos el grosor de niveles horizontales
#property indicator_levelwidth 1
//--- establecemos el estilo de niveles horizontales
#property indicator_levelstyle STYLE_DOT
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- ponemos las descripciones de niveles horizontales 
   IndicatorSetString(INDICATOR_LEVELTEXT,0,"First Level (index 0)");
   IndicatorSetString(INDICATOR_LEVELTEXT,1,"Second Level (index 1)");
   IndicatorSetString(INDICATOR_LEVELTEXT,2,"Third Level (index 2)");
//--- ponemos el nombre breve al indicador
   IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetDouble() Demo");
//--- establecemos su color para cada nivel
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrBlue);
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrGreen);
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,clrRed);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   static int tick_counter=0;
   static double level1=25,level2=50,level3=75;
   static double max=100,min=0, shift=100;
//--- contamos los ticks
   tick_counter++;
//--- en cada 10 tick hacemos la vuelta
   if(tick_counter%10==0)
     {
      //--- damos la vuelta al signo para los valores del nivel
      level1=-level1;
      level2=-level2;
      level3=-level3;
      //--- damos la vuelta al signo para los valores del máximo y mínimo
      max-=shift;
      min-=shift;
      //--- damos la vuelta al valor del desplazamiento
      shift=-shift;
      //--- establecemos nuevos valores de los niveles
      IndicatorSetDouble(INDICATOR_LEVELVALUE,0,level1);
      IndicatorSetDouble(INDICATOR_LEVELVALUE,1,level2);
      IndicatorSetDouble(INDICATOR_LEVELVALUE,2,level3);
      //--- establecemos nuevos valores del máximo y mínimo para la ventana del indicador
      Print("Set up max = ",max,",   min = ",min);
      IndicatorSetDouble(INDICATOR_MAXIMUM,max);
      IndicatorSetDouble(INDICATOR_MINIMUM,min);
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Véase también

Estilos de indicadores en ejemplos, Relación entre propiedades de indicador y funciones, Estilos de dibujo