ChartIndicatorDelete

Quita el indicador con el nombre especificado de la ventana del gráfico especificada.

bool  ChartIndicatorDelete(
   long           chart_id,              // identificador del gráfico
   int            sub_window             // número de subventana
   const string   indicator_shortname    // nombre breve del indicador
   );

Parámetros

chart_id

[in]  Identificador del gráfico. 0 significa el gráfico actual.

sub_window

[in]  Número de subventana del gráfico. 0 significa la ventana principal del gráfico.

const indicator_shortname

[in]  Nombre breve del indicador que se establece en la propiedad INDICATOR_SHORTNAME por la función IndicatorSetString(). Para obtener el nombre breve del indicador se usa la función ChartIndicatorName().

Valor devuelto

La función devuelve true si el indicador se elimina con éxito, de lo contrario se devuelve false. Para obtener la información sobre el error, hay que llamar a la función GetLastError().

Nota

Si en la subventana del gráfico especificada hay varios indicadores con el mismo nombre breve, se elimina el que va primero.

Si en el mismo gráfico están construidos otros indicadores a base de los valores del indicador que se elimina, éstos también serán eliminados.

No se debe confundir el nombre breve del indicador con el nombre del archivo que se indica durante la creación del indicador por las funciones iCustom() y IndicatorCreate(). Si el nombre breve del indicador no está establecido de una manera explícita, entonces durante la compilación ahí se indica el nombre del archivo que contiene el código fuente del indicador. 

Si un indicador se quita del gráfico, esto no significa que su parte de cálculo también será eliminada de la memoria del terminal. Para liberar el manejador del indicador, hay que usar la funciónIndicatorRelease().

Se debe formar correctamente el nombre breve del indicador. Este nombre se escribe en la propiedad INDICATOR_SHORTNAME mediante la función IndicatorSetString(). Es recomendable que el nombre breve contenga los valores de los parámetros de entrada del indicador, puesto que en la función ChartIndicatorDelete() la identificación del indicador que se quita del gráfico se realiza precisamente por el nombre breve.

Ejemplo de eliminación de un indicador tras el fallo de inicialización:

//+------------------------------------------------------------------+
//|                                    Demo_ChartIndicatorDelete.mq5 |
//|                         Copyright 2000-2024, MetaQuotes Ltd. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Histogram
#property indicator_label1  "Histogram"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input int      first_param=1;
input int      second_param=2;
input int      third_param=3;
input bool     wrong_init=true;
//--- indicator buffers
double         HistogramBuffer[];
string         shortname;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   int res=INIT_SUCCEEDED;
//--- vinculamos el array HistogramBuffer al búfer de indicador
   SetIndexBuffer(0,HistogramBuffer,INDICATOR_DATA);
//--- generamos el nombre breve del indicador a base de los parámetros de entrada
   shortname=StringFormat("Demo_ChartIndicatorDelete(%d,%d,%d)",
                          first_param,second_param,third_param);
   IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- si está establecida la finalización forzosa del indicador, devolvemos el valor no nulo
   if(wrong_init) res=INIT_FAILED;
   return(res);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//--- posición inicial para trabajar en el ciclo
   int start=prev_calculated-1;
   if(start<0) start=0;
//--- llenamos el búfer de indicador con los valores
   for(int i=start;i<rates_total;i++)
     {
      HistogramBuffer[i]=close[i];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| manejador de eventos Deinit                                        |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   PrintFormat("%s: Código de la causa de deinicialización=%d",__FUNCTION__,reason);
   if(reason==REASON_INITFAILED)
     {
      PrintFormat("El indicador con el nombre breve %s (archivo %s) elimina a sí mismo del gráfico",shortname,__FILE__);
      int window=ChartWindowFind();
      bool res=ChartIndicatorDelete(0,window,shortname);
      //--- analizaremos el resultado de la llamada a ChartIndicatorDelete()
      if(!res)
        {
         PrintFormat("Fallo al eliminar el indicador %s desde la ventana #%d. Código del error %d",
                     shortname,window,GetLastError());
        }
     }
  }

Véase también

ChartIndicatorAdd(), ChartIndicatorName(), ChartIndicatorsTotal(), iCustom(), IndicatorCreate(), IndicatorSetString()